เส้นทาง 04บทเรียน 5 / 10

ออกแบบซอฟต์แวร์สำหรับสภาพแวดล้อม cloud native

เชื่อมโยงโครงสร้างพื้นฐานที่ทำซ้ำได้ process ที่แทนที่ได้ สถานะที่คงอยู่ และพฤติกรรมที่สังเกตได้ ประเมินการออกแบบ cloud native ให้มากกว่าการบรรจุใน container

ผู้ปฏิบัติงาน12 minตรวจทานแล้ว

เผยแพร่โดย วิธีเขียนเนื้อหาของเรา

ตรวจความเข้าใจแพลตฟอร์มแทนที่ report worker หลังจากเกิดความขัดข้อง สิ่งใดทำให้การลองใหม่ปลอดภัย?ทำแบบฝึกหัด
แพลตฟอร์มแทนที่ report worker หลังจากเกิดความขัดข้อง สิ่งใดทำให้การลองใหม่ปลอดภัย?

สิ่งที่จะได้เรียนรู้

  • แยกความแตกต่างระหว่างการบรรจุใน container กับพฤติกรรมแบบ cloud native
  • ระบุความเสี่ยงด้านสถานะ การลองใหม่ และการแทนที่ในบริการที่สร้างด้วย AI
  • กำหนดข้อกำหนดของแพลตฟอร์มที่ agent และคนสามารถตรวจสอบได้

กำหนดพฤติกรรมที่ต้องการ

แนวปฏิบัติแบบ cloud native สนับสนุนการพัฒนาและการดำเนินงานที่ทำซ้ำได้ในสภาพแวดล้อม public, private หรือ hybrid CNCF เน้นระบบที่ยังจัดการ สังเกต และรับมือความขัดข้องได้ขณะเปลี่ยนแปลง Container และ orchestration ช่วยสนับสนุนแนวทางนี้ได้ แต่ไม่ได้สร้างคุณสมบัติทั้งหมดนี้ด้วยตัวเอง

เริ่มจากบริการรายงานในสถานการณ์สมมติ เครื่องมือ AI สร้าง endpoint, worker และ container image การสาธิตสร้าง PDF ได้ถูกต้อง ก่อนใช้งานใน production ทีมต้องตอบอีกคำถามหนึ่งว่า จะเกิดอะไรขึ้นเมื่อแพลตฟอร์มแทนที่ worker ระหว่างทำงาน?

นี่เป็นคำถามด้านการออกแบบแอปพลิเคชันและโครงสร้างพื้นฐาน การเริ่มใหม่อาจทำให้ process กลับมาทำงานได้ แต่งานที่ยังไม่เสร็จอาจสูญหาย

แยก process ออกจากสถานะที่ต้องคงอยู่

ต้นแบบเก็บงานในคิวและรายงานที่เสร็จแล้วไว้บนดิสก์ของ container การแทนที่ container อาจทำให้ทั้งสองอย่างหายไป การเพิ่ม worker ยังอาจให้คำตอบต่างกันตาม worker ที่รับคำขอ

การออกแบบที่ปรับใหม่ใช้ที่เก็บงานแบบคงทนและ object store ที่ได้รับอนุมัติ คำขอจะบันทึกรหัสงาน Worker รับงาน สร้างผลลัพธ์ และบันทึกตำแหน่งของผลลัพธ์ ยังคงต้องตรวจสอบสิทธิ์เมื่อผู้ใช้ดาวน์โหลดรายงาน

ประเด็นคำถามสำหรับบริการรายงาน
สถานะระเบียนใดต้องคงอยู่หลังจากแทนที่ process?
การกำหนดค่าArtifact เดียวกันทำงานในแต่ละสภาพแวดล้อมอย่างไร?
ตัวตนตัวตนของบริการใดอ่านงานและเขียนผลลัพธ์ได้?
สถานะการทำงานWorker รับงานได้หรือไม่ และทำงานนั้นจนเสร็จได้หรือไม่?
การหยุดทำงานเกิดอะไรขึ้นกับงานที่รับไว้เมื่อ worker หยุด?
ความจุขีดจำกัดใดถึงก่อน: worker, ฐานข้อมูล, storage หรือบริการอื่น?

เก็บ secret ไว้นอก image ส่งผ่านระบบจัดการ secret ที่ได้รับอนุมัติ บันทึกว่าการเปลี่ยนค่ารายการใดต้องออก release ใหม่หรือเริ่ม process ใหม่

ออกแบบการลองใหม่ก่อนเพิ่ม worker

สมมติว่า worker บันทึก PDF แล้วหยุดก่อนยืนยันงาน คิวส่งงานนั้นอีกครั้ง การทำครั้งที่สองต้องไม่เรียกเก็บเงินลูกค้าซ้ำหรือส่งข้อความแจ้งงานเสร็จที่ขัดแย้งกัน

ใช้การทำงานแบบ idempotent เมื่อเหมาะสม การทำคำขอเชิงตรรกะเดิมซ้ำควรรักษาผลที่ตั้งใจไว้ กำหนดรหัสคำขอที่คงเดิม บันทึกผลลัพธ์อย่างคงทน และตรวจสอบสิ่งที่เกิดขึ้นในแต่ละจุดที่อาจขัดข้อง AWS อธิบายเทคนิคนี้ในคู่มือการลองใหม่อย่างปลอดภัย

การลองใหม่ต้องมีขีดจำกัดด้วย ใช้ timeout จำนวนครั้งสูงสุด และช่วงหน่วงที่หลีกเลี่ยงการส่งคำขอซ้ำพร้อมกัน เก็บงานที่ล้มเหลวไว้ตรวจสอบ แทนการลองใหม่ไม่สิ้นสุด

ทำให้สถานะที่ต้องการตรวจทานได้

การกำหนดค่าแบบ declarative ระบุ deployment ที่ต้องการ Controller ทำงานเพื่อรักษาสถานะนั้น ตัวอย่างเช่น Kubernetes Deployment จัดการ replica ของแอปพลิเคชันและการอัปเดตแบบควบคุม แอปพลิเคชันยังต้องจัดการการแทนที่อย่างถูกต้อง

จัดเก็บเวอร์ชันของโครงสร้างพื้นฐานและการกำหนดค่าแอปพลิเคชัน ตรวจทานการเปลี่ยนแปลงผ่านกระบวนการส่งมอบตามปกติ สังเกตงานที่เสร็จจริง อายุของงานในคิว ความขัดข้อง และขีดจำกัดของ dependency Process ที่กำลังทำงานอยู่อาจยังสร้างรายงานไม่ได้

เลือกแพลตฟอร์มที่ทีมดำเนินงานได้

Cloud native ไม่ได้กำหนดให้ทุกแอปพลิเคชันต้องเป็น microservices แอปพลิเคชันแบบ modular บน managed runtime อาจตอบข้อกำหนดได้ บริการที่มากขึ้นเพิ่ม interface การตัดสินใจด้าน deployment และงานดำเนินการ

ให้ agent ที่พัฒนาซอฟต์แวร์ทราบข้อกำหนดจริงของแพลตฟอร์ม ได้แก่ runtime ที่รองรับ วิธีจัดการตัวตน บริการข้อมูล กฎ deployment และหลักฐานที่ต้องมี ทดสอบพฤติกรรมเมื่อถูกขัดจังหวะและแทนที่ควบคู่กับคำขอที่สำเร็จ เรียนต่อเรื่องความพร้อมใช้งานและขอบเขตความขัดข้อง

ทำแบบฝึกหัด

บริการรายงานในสถานการณ์สมมติเก็บงานและไฟล์ที่สร้างเสร็จไว้บนดิสก์ของ container วาดลำดับตั้งแต่คำขอ งาน ไฟล์ ไปจนถึงการดาวน์โหลด ทำเครื่องหมายสถานะที่ต้องคงอยู่ กำหนดสิ่งที่จะเกิดขึ้นหาก worker หยุดหลังจากเขียนไฟล์ แต่ก่อนยืนยันงาน

ดาวน์โหลดใบงาน (Markdown)
ตรวจความเข้าใจ ↑

เรียนต่อ

แหล่งข้อมูลและเนื้อหาอ่านเพิ่มเติม

เนื้อหาเกี่ยวข้องจาก Taiga

← บทเรียนก่อนหน้า: กำหนดโครงสร้างพื้นฐานที่ต้องมีนอกเหนือจากต้นแบบ