กำหนดขอบเขตที่ปลอดภัยสำหรับ self-healing
เรียนจบแล้วทำการกู้คืนที่รู้วิธีแล้วให้เป็นอัตโนมัติ พร้อมอำนาจที่ชัดเจน การตรวจสอบ และเงื่อนไขหยุด แยกการกู้คืน runtime ออกจากการเปลี่ยนซอฟต์แวร์
เผยแพร่โดย Taigaวิธีเขียนเนื้อหาของเรา
ตรวจความเข้าใจController เริ่ม worker ใหม่แล้วสองครั้ง คิวยังเพิ่มขึ้น และเข้าถึงฐานข้อมูลไม่ได้ นโยบายควรให้ทำอะไร?ทำแบบฝึกหัด
สิ่งที่จะได้เรียนรู้
- แยก self-healing ออกจากการแก้ซอฟต์แวร์อย่างถาวร
- กำหนดนโยบายกู้คืนที่มีขอบเขตและการตรวจสอบความสำเร็จอย่างเป็นอิสระ
- ระบุว่าเมื่อใด automation ต้องหยุดและยกระดับเรื่อง
กู้คืนจากเงื่อนไขที่รู้จัก
Self-healing ตรวจพบความขัดข้องที่กำหนดโดยอัตโนมัติ และพยายามกู้คืนด้วยการกระทำที่ได้รับอนุญาต ตัวอย่างคือเริ่ม process ที่ล้มเหลวใหม่หรือแทนที่ instance ที่ผิดปกติ การกระทำต้องเหมาะกับความขัดข้องและโมเดลสถานะของบริการ
Kubernetes แทนที่ instance ของ workload ที่ล้มเหลวและปรับให้ตรงกับสถานะที่ประกาศไว้ได้ แต่ไม่ได้แก้ตรรกะแอปพลิเคชันที่ผิดหรือความขัดข้องของ storage ทุกแบบ การกู้คืนโครงสร้างพื้นฐานกับความถูกต้องของซอฟต์แวร์ต้องใช้การตรวจสอบต่างกัน Kubernetes self-healing
กำหนดเป้าหมายก่อนกลไก การกู้คืนการส่งออกหมายถึงงานที่เข้าเกณฑ์เสร็จอย่างถูกต้อง Container ที่ทำงานอยู่เป็นเพียงเงื่อนไขก่อนหน้าข้อหนึ่ง
แยกการเปลี่ยนแปลงสามประเภท
| การเปลี่ยนแปลง | ตัวอย่าง | การตัดสินใจที่ต้องมี |
|---|---|---|
| การกู้คืน runtime | แทนที่ stateless worker ที่ล้มเหลวหนึ่งตัว | นโยบายกู้คืนที่อนุมัติล่วงหน้าอาจให้อำนาจทำได้ |
| การแก้ซอฟต์แวร์ | แก้ memory leak ที่ทำให้ worker หยุด | การตรวจทาน test มาตรการควบคุม release และการตรวจสอบ production |
| การเปลี่ยนนโยบาย | เพิ่มอัตรา restart หรือขอบเขตสิทธิ์ที่อนุญาต | การอนุมัติอย่างชัดเจนจากผู้รับผิดชอบนโยบาย |
Agent อาจเสนอการแก้หลังการกู้คืน ข้อเสนอนั้นเป็นการเปลี่ยนซอฟต์แวร์ใหม่ ต้องไม่ได้รับอำนาจไม่จำกัดต่อมาจาก controller กู้คืน
Controller ต้องไม่แก้เกณฑ์ความสำเร็จของตัวเองเมื่อการตรวจไม่ผ่าน มิฉะนั้นระบบอาจรายงานว่าดีขึ้นโดยไม่ได้ทำให้บริการดีขึ้น
เขียนนโยบายกู้คืนก่อนเปิดใช้
นโยบายต่อไปนี้เป็นตัวอย่างสมมติ ตัวเลขใช้แสดงทางเลือกการออกแบบ ไม่ใช่ค่าเริ่มต้นที่แนะนำ
| รายการนโยบาย | กฎของ export worker ในสถานการณ์สมมติ |
|---|---|
| เงื่อนไขเริ่ม | ไม่ได้รับ heartbeat ของ worker เป็นเวลา 90 วินาที และมีงานในคิว |
| เงื่อนไขก่อนดำเนินการ | Worker อีกตัวทำงานปกติ การตรวจ dependency ผ่าน ไม่มีข้อสงสัยการบุกรุกหรือความผิดปกติด้านความถูกต้องครบถ้วน |
| การกระทำที่อนุญาต | แทนที่ worker หนึ่งตัวด้วย artifact ที่อนุมัติอยู่ในปัจจุบัน |
| การป้องกันสถานะ | งานใช้ที่เก็บข้อมูลแบบคงทนและ idempotency key ที่ตรวจสอบแล้ว |
| ขีดจำกัด | แทนที่ไม่เกินสองครั้งใน 15 นาที และไม่เกินครั้งละหนึ่งตัว |
| ช่วงพัก | รอห้านาทีหลังแทนที่ก่อนลองอีกครั้ง |
| ความสำเร็จ | งานสังเคราะห์เสร็จอย่างถูกต้อง และคิวที่ได้รับผลกระทบเริ่มลดลง |
| หยุดและยกระดับ | เงื่อนไขก่อนดำเนินการข้อใดไม่ผ่าน ถึงขีดจำกัด หรือตรวจสอบความสำเร็จไม่ได้ |
ใช้ตัวตนที่มีสิทธิ์เท่าที่จำเป็น บันทึกเวอร์ชันนโยบาย หลักฐานที่ทำให้เริ่ม การกระทำ ทรัพยากร และผล จัดให้มีวิธีปิด controller ที่เป็นอิสระ กำหนดคนที่รับผิดชอบรับเรื่องยกระดับ
ทดสอบเส้นทางความขัดข้องควบคู่กับการกู้คืนสำเร็จ
การลองใหม่อาจทำผลข้างเคียงซ้ำ Worker อาจเก็บไฟล์แล้วหยุดก่อนยืนยันงาน ตรวจสอบ idempotency ก่อนอนุญาตให้ทำอีกครั้ง ดูตัวอย่างความขัดข้องแบบ cloud native
การลองใหม่อาจซ้ำเติม dependency ที่โหลดเกินด้วย จำกัดจำนวนครั้ง ใช้ timeout และ backoff ที่เหมาะสม หลีกเลี่ยงการลองใหม่พร้อมกันทุก instance AWS อธิบายว่า backoff และ jitter ช่วยลดการซ้ำเติมนี้อย่างไร แนวทางการลองใหม่
ทดสอบนโยบายสมมติกับสามกรณี Worker ที่หยุดหนึ่งตัวควรกู้คืนได้ ฐานข้อมูลล่มควรทำให้ไม่แทนที่ซ้ำ ความผิดปกติด้านความถูกต้องครบถ้วนที่ยังไม่แน่ชัดควรหยุด automation และขอการตัดสินใจตอบสนอง
ตรวจกรณี telemetry ขาดด้วย Heartbeat ที่หายอาจหมายถึง worker ขัดข้องหรือเส้นทางเก็บข้อมูลขัดข้อง Controller ต้องมีหลักฐานเพียงพอสำหรับการกระทำ ไม่ใช่ความมั่นใจในคำอธิบายจาก AI
วัดว่านโยบายช่วยหรือไม่
บันทึกการกู้คืนที่ตรวจสอบแล้ว ความพยายามที่ไม่สำเร็จ การยกระดับ งานซ้ำ และเวลาที่ผู้ใช้ได้รับผลกระทบ เปรียบเทียบกับวิธีดำเนินงานเดิมภายใต้เงื่อนไขใกล้เคียงกัน
เก็บข้อบกพร่องต้นเหตุไว้เป็นงานวิศวกรรม การเริ่ม process ที่มี memory leak ใหม่ซ้ำอาจลดผลกระทบทันที แต่ leak ยังคงอยู่ เรียนต่อเรื่องการปรับปรุงระบบ เพื่อเชื่อมข้อสังเกตกับการแก้ที่คงผลระยะยาว
ทำแบบฝึกหัด
ออกแบบนโยบายกู้คืนสำหรับ export worker ในสถานการณ์สมมติของบทเรียน ระบุเงื่อนไขเริ่ม ข้อยกเว้น การกระทำที่อนุญาต จำนวนครั้งสูงสุด ช่วงพัก การตรวจสอบความสำเร็จ และผู้รับเรื่องยกระดับ ทดสอบกับฐานข้อมูลล่มและความผิดปกติด้านความถูกต้องครบถ้วนของข้อมูลที่ยังไม่ทราบสาเหตุ
ดาวน์โหลดใบงาน (Markdown)การยกเลิกตัวเลือกนี้จะลบความคืบหน้าทั้งหมดที่บันทึกใน browser นี้
ความคืบหน้าอยู่ใน browser นี้ ไม่ใช้บัญชีและไม่ติดตามการใช้งาน
แหล่งข้อมูลและเนื้อหาอ่านเพิ่มเติม
- Kubernetes: Self-Healing ↗
- AWS Builders’ Library: Timeouts, retries, and backoff with jitter ↗
- Google SRE: Automation at Google ↗