Failure Is Everywhere (ความล้มเหลวอยู่ทุกที่)
เรา เข้าใจดีว่าอะไรๆ ก็ผิดพลาดได้ ฮาร์ดดิสก์อาจเสีย ซอฟต์แวร์ของเราอาจ crash และใครก็ตามที่เคยอ่าน fallacies of distributed computing ก็คงบอกคุณได้ว่าเครือข่ายนั้นไม่น่าเชื่อถือ เราทำได้ดีที่สุดเพื่อจำกัดสาเหตุของความล้มเหลว แต่เมื่อถึงระดับหนึ่ง ความล้มเหลวก็หลีกเลี่ยงไม่ได้ ยกตัวอย่างเช่นฮาร์ดดิสก์ ทุกวันนี้เชื่อถือได้มากกว่าเดิม แต่สุดท้ายมันก็จะเสียอยู่ดี ยิ่งคุณมีฮาร์ดดิสก์มากเท่าไร โอกาสที่ตัวใดตัวหนึ่งจะเสียในวันใดวันหนึ่งก็ยิ่งสูงขึ้น—ความล้มเหลวกลายเป็นความแน่นอนทางสถิติเมื่อถึงระดับสเกลหนึ่ง
แม้แต่พวกเราที่ไม่ได้คิดในระดับสเกลใหญ่ขนาดนั้น หากเรายอมรับความเป็นไปได้ที่จะเกิดความล้มเหลวได้ เราก็จะอยู่ในสถานะที่ดีกว่า ตัวอย่างเช่น ถ้าเราสามารถจัดการความล้มเหลวของ microservice ได้อย่างนุ่มนวล ก็ตามมาว่าเราสามารถทำ in-place upgrade ของบริการได้ด้วย เพราะ outage ที่วางแผนไว้ล่วงหน้านั้นจัดการง่ายกว่า outage ที่ไม่ได้วางแผนมาก
เรายังใช้เวลาน้อยลงในการพยายามหยุดสิ่งที่หลีกเลี่ยงไม่ได้ และใช้เวลามากขึ้นในการรับมือกับมันอย่างนุ่มนวล ผมรู้สึกทึ่งที่องค์กรจำนวนมากวางกระบวนการและการควบคุมไว้เพื่อพยายามหยุดความล้มเหลวไม่ให้เกิดขึ้น แต่กลับแทบไม่คิดเลยว่าจะทำให้การฟื้นตัวจากความล้มเหลวง่ายขึ้นได้อย่างไรตั้งแต่แรก การเข้าใจสิ่งที่มีแนวโน้มจะล้มเหลว เป็นกุญแจสำคัญในการพัฒนา robustness ของระบบเรา
การตั้งสมมติฐานว่าทุกอย่างสามารถและจะล้มเหลวได้ จะทำให้คุณคิดต่างออกไปเกี่ยวกับวิธีแก้ปัญหา ลองนึกถึงเรื่องราวของเซิร์ฟเวอร์ Google ที่เราพูดถึงใน Chapter 10 สิครับ? ระบบของ Google ถูกสร้างขึ้นในลักษณะที่ถ้าเครื่องใดเครื่องหนึ่งล่ม จะไม่ทำให้บริการหยุดชะงัก—นั่นคือการพัฒนา robustness ของระบบโดยรวม Google ยังไปไกลกว่านั้นในการพัฒนาความทนทานของเซิร์ฟเวอร์ด้วยวิธีอื่นๆ—มีการเปิดเผยว่าเซิร์ฟเวอร์แต่ละตัวมีแหล่งจ่ายไฟของตัวเอง เพื่อให้มันยังทำงานต่อได้แม้ data center จะไฟดับ 3 และตามที่คุณจำได้จาก Chapter 10 ฮาร์ดดิสก์ในเซิร์ฟเวอร์เหล่านี้ถูกยึดด้วย Velcro แทนที่จะเป็นสกรู เพื่อให้เปลี่ยนไดรฟ์ได้ง่าย—ช่วยให้ Google นำเครื่องกลับมาใช้งานได้เร็วเมื่อไดรฟ์เสีย และในทางกลับกันก็ช่วยให้ส่วนประกอบนั้นของระบบ rebound ได้อย่างมีประสิทธิภาพมากขึ้น
ผมขอย้ำอีกครั้ง: เมื่อถึงระดับสเกลใหญ่ ต่อให้คุณซื้ออุปกรณ์ที่ดีที่สุด ฮาร์ดแวร์ที่แพงที่สุด คุณก็ไม่สามารถหลีกเลี่ยงความจริงที่ว่าสิ่งต่างๆ สามารถและจะล้มเหลวได้ ดังนั้นคุณต้องตั้งสมมติฐานว่าความล้มเหลวจะเกิดขึ้น ถ้าคุณสร้างแนวคิดนี้เข้าไปในทุกสิ่งที่คุณทำและวางแผนสำหรับความล้มเหลว คุณก็จะสามารถทำการแลกเปลี่ยน (trade-off) ได้อย่างมีข้อมูลรองรับ ถ้าคุณรู้ว่าระบบของคุณสามารถรับมือกับความจริงที่ว่าเซิร์ฟเวอร์สามารถและจะล้มเหลวได้ อาจไม่คุ้มค่าที่จะใช้เงินมากขึ้นเรื่อยๆ กับเครื่องแต่ละเครื่อง แทนที่จะทำแบบนั้น การมีเครื่องราคาถูกจำนวนมากขึ้น (อาจใช้ชิ้นส่วนราคาถูกและ Velcro บ้าง!) แบบที่ Google ทำอาจสมเหตุสมผลกว่ามาก