ปัจจัยหนึ่งที่นำมาใช้ในการออกแบบระบบ Distributed System ก็คือ ความสามารถในการทนต่อความล้มแหลวของส่วนบางส่วนได้ โดยที่ไม่ได้มีผลต่อประสิทธิภาพมากนัก

  • Availability ความน่าจะเป็นที่ระบบทำงานได้อย่างถูกต้อง
  • Reliability ความน่าเชื่อถือของระบบ ที่สามารถทำงานได้อย่างต่อเนื่อง
  • Safety ถ้าเกิดความผิดพลาดขึ้นระบบจะต้องไม่สร้างความผิดพลาดอื่นขึ้นอีก
  • Maintainability ความสามารถในการบำรุงรักษา ซึ่งมีผลต่อ availability

ประเภทของ fault tolerance

  • transient  เกิดแค่ครั้งเดียว แล้วหายไปเลย
  • intermittent เกิดขึ้นเป็นจังหวะๆ ติดๆดับๆ
  • permanent เกิดขึ้นถาวรจนกว่าจะมีการแก้ไข

โมเดลของ Fault Tolerance

  • Byzantine เกิดจากความผิดพลาดของระบบในการประมวลผลข้อมูล เช่นรับข้อมูลไม่ได้ หรือเปลี่ยนสถานะผิด ทำให้ผลลัพธ์การทำงาน ออกมาในรูปแบบที่เข้าใจได้ยาก
  • Fail-stop ก่อนหยุดการส่งผลลัพธ์ออกมา มีการประกาศให้โปรเซสอื่นๆรู้ก่อน
  • Fail-silent process หยุดการทำงานไปดื้อๆ ไม่มีการบอกกล่าว
  • Fail-safe output ที่ออกมาผิดพลาดแต่ยังรับรู้ได้ด้วย process อื่นว่าเป็น junk

Failure Masking by Redundancy

ถ้าระบบจะมี fault tolerance ระบบจะต้องซ่อนการเกิดความผิดพลาดออกจาก process อื่นๆ โดยเทคนิคที่ใช้ก็คือ redundancy โดยสามารถแบ่งได้ออกเป็นสามประเภท

  1. Information ใส่ข้อมูลเพิ่มลงไปเช่น การใช้ hamming code เพื่อจะได้กู้คืนข้อมูลบางส่วนได้
  2. Time เป็นการทำงานที่สามารถเกิดซ้ำได้หากต้องการเหมาะกับการเกิด fault แบบ transient หรือ intermittent
  3. Physical เพิ่มในส่วนของ hw หรือ process ลงไปในระบบ ทำให้ระบบโดยรวมสามารถทนต่อความผิดพลาดได้ เช่นการรัน process สำรองไว้ โดยจะทำงานควบคุ่กันไปด้วย เพื่อเปรียบเทียบผลลัพธ์ (active replica) หรือจะทำการตั้งไว้เฉยๆเป็น backup รอ process fail ก็ได้

Process Resilience

การป้องการการล้มเหลวของ process สามารถทำได้ด้วยการ สร้าง process ซ้ำแล้วแบ่งออกเป็นกลุ่มๆ โดยข้อความจะถูกส่งเข้าไปในกลุ่ม แล้วจะมีเพียง 1 ข้อความผลลัพธ์ตอบกลับมา โดยที่หากมี process ใดล้มเหลว ก็หวังว่าจะมี process อื่นทำงานแทนได้ โดยอาจจะทำงานในลักษณะของ dynamic ที่สามารถสร้างกลุ่มใหม่และลบกลุ่มเก่าออกไปได้ process สามารถเข้าร่วมหรือออกจาก กลุ่มใดก็ได้ และสามารถเป็นสมาชิกได้หลายกลุ่ม โดยกลไลการจัดการอาจแบ่งได้เป็นสองแบบคือ

flat group ทุกๆ process มีสิทธิเท่าเทียมกันโดย ไม่มีใครเป็นเจ้านายใคร ทำให้ยากต่อการตัดสินใจว่าใครจะทำงาน ทำให้ระบบซับซ้อน

hierarchical group มี coordinator 1 ตัวในการควบคุมการทำงานของกลุ่ม ทำให้ง่ายต่อการตัดสินใจ แต่ถ้าหาก coordinator ทำงานไม่ได้ กลุ่มนั้นก็จะต้องหยุดการทำงาน

K Fault Tolerant จะเกิดขึ้นได้ก็ต่อเมื่อ ถ้าระบบสามารถทำงานได้หากมี K ส่วนทำงานไม่ได้ เช่นมี process fail-slient ถ้าระบบมี k+1 ก็สามารถทำงานต่อได้ แต่หากระบบ fail แบบ byzantine โดยมี component ทำงานผิดพลาดทำงานอยู่ ต้องใช้ 2k+1 ถึงจะทำงานได้ไม่ผิดพลาด

Agreement in faulty systems

ในระบบที่มี m process ผิดพลาดจาก process ทั้งหมด 3m+1 จะต้องมี process จำนวน 2m+1 ทำงานได้ถูกต้อง จึงจะตกลงกันได้ หรือ พูดง่ายๆก็คือ 2 ใน 3 ส่วนจะต้องทำงานได้ถูกต้อง โดยที่จำนวน process ทั้งหมดจะต้องมีมากกว่า 3 ตัว