สิ่งที่คุณต้องการคือความพร้อมใช้งานสูง ในการทำให้ระบบพร้อมใช้งานสูงคุณต้องมีสามสิ่ง:
- กำจัดจุดล้มเหลวเดียว
- กลไกการสลับจากจุดปลายไปยังจุดอื่น
- วิธีการตรวจสอบความล้มเหลว
กำจัดจุดล้มเหลวเดียว
ในกรณีของ S3, จุด # 1 เป็น addressed เป็น Evgeny ชี้ให้เห็นโดยS3 จำลองแบบข้ามภูมิภาค
อย่างไรก็ตามการจำลองแบบไม่ได้เกิดขึ้นทันทีและคุณต้องการตรวจสอบว่าคุณต้องการให้การจำลองแบบแอปพลิเคชันของคุณทราบหรือไม่ ในกรณีที่ไฟดับอาจเป็นไปได้ว่ามีบางสิ่งที่เขียนไปยังที่ฝากข้อมูลของคุณยังไม่ได้สร้าง (ไม่ได้จำลอง) ไปยังที่ฝากข้อมูลปลายทาง คุณต้องคิดว่าแอปพลิเคชันจะจัดการกับสถานการณ์ดังกล่าวอย่างไร นั่นขึ้นอยู่กับประเภทของข้อมูลสิ่งที่กำลังทำอยู่และ (อาจ) ผู้ใช้หรือการคาดหวังการจัดการ
กลไกการสลับจากจุดปลายไปยังจุดอื่น
สำหรับ S3 นั่นหมายความว่าในกรณีที่ไฟดับคุณต้องการให้แอปพลิเคชันหยุดอ่านและเขียนจาก / ถึงที่เก็บข้อมูล A และใช้ที่ฝากข้อมูล B แทน
วิธีการบรรลุเป้าหมายนี้เท่าที่ฉันรู้นั้นขึ้นอยู่กับคุณในตอนนี้ บริการ AWS อื่น ๆ บางตัวให้การล้มเหลวแบบโปร่งใสอย่างสมบูรณ์ แต่ฉันไม่ทราบถึงสิ่งนี้สำหรับ S3 ในขณะนี้
มีหลายวิธีในการบรรลุเป้าหมายนี้ ตัวอย่างหนึ่งคือการใช้พร็อกซีที่จะกำหนดเส้นทางการรับส่งข้อมูลไปยังที่ฝากข้อมูลที่เหมาะสม ในระหว่างที่ไฟดับคุณจะต้องอัพเดต / เปลี่ยนพรอกซีเพื่อกำหนดเส้นทางทราฟฟิกไปยังที่ฝากข้อมูลที่ไม่ได้รับผลกระทบจากไฟดับ อีกตัวอย่างหนึ่งคือการทำให้การกำหนดค่าแอปพลิเคชันของคุณเป็นแบบไดนามิกและเก็บไว้ในที่เก็บคีย์ - ค่า หากแอปพลิเคชันอ่านที่เก็บ KV สำหรับคุณสมบัติที่ได้รับการปรับปรุงบ่อยครั้งเพียงพอคุณสามารถสลับตำแหน่งที่คุณอ่านและเขียนได้ (Spring Cloud มีการรองรับผู้ฟัง "EnvironmentChange" ตัวอย่างเช่น)
วิธีการตรวจสอบความล้มเหลว
ฉันคิดว่าเป็นเรื่องง่าย เพียงตั้งค่าห่วงการเขียน + อ่านและการแจ้งเตือนทันทีที่มีบางอย่างไม่ถูกต้อง :)
การปิดบันทึก
- หากใบสมัครของคุณเขียนถึงที่เก็บข้อมูลคุณต้องคิดว่าจะเกิดอะไรขึ้นในกรณีที่เกิดข้อผิดพลาด การเขียนทั้งหมดส่งไปยังที่ฝากข้อมูลปลายทาง (และคุณสามารถบอกได้) คุณสามารถอนุญาตให้เขียนไปยังที่ฝากข้อมูลปลายทาง (ทำให้เป็น "หลัก" ใหม่) ได้หรือไม่ การวางแผนอย่างรอบคอบจะหลีกเลี่ยงการแยกสมองหรือสถานการณ์การอัพเดทที่สูญหาย
- ขึ้นอยู่กับ SLA ของคุณคุณอาจต้องการให้คะแนน # 2 และ # 3 เป็นแบบอัตโนมัติหรือแบบอัตโนมัติ ที่ต้องมีการวางแผนเพิ่มเติมการใช้เครื่องมือและการทดสอบ แต่สคริปต์ที่เขียนขึ้นอย่างดีจะตอบสนองได้เร็วกว่าและคาดการณ์ได้ดีกว่าความสามารถของมนุษย์ (ความล้มเหลวยังมีนิสัยที่น่ารำคาญเกิดขึ้นในกลางดึก
- เป็นมูลค่าการกล่าวขวัญว่าแม้การจำลองแบบข้ามภูมิภาคไม่ได้ขจัดความล้มเหลวจุดเดียวอย่างสมบูรณ์ แน่นอนว่าถ้าภูมิภาคใดภาคหนึ่งล่มคุณก็จะได้รับความคุ้มครอง แต่จะเกิดอะไรขึ้นถ้าไฟดับ AWS ของสหรัฐฯเกิดขึ้น? สีฟ้าก็มีบางส่วน แต่เกิดดับทั่วโลกและหนึ่งในปี 2014 เช่นกัน