อ่านบทความเรื่อง Taming Complex Systems in Production
มีเรื่องที่น่าสนใจเยอะ หนึ่งในนั้นคือ
เรื่องเกี่ยวกับการพัฒนาระบบ
ให้สามารถ recover กลับมาจากความผิดพลาดได้ด้วยระบบเอง
โดยไม่ต้องมีคนเข้าไปยุ่งเกี่ยว
ซึ่งสรุปว่าระบบที่จะทำได้จำเป็นจะต้องมีคุณสมบัติดังต่อไปนี้

  • Graceful termination เมื่อระบบงานผิดพลาดเช่น node พังแล้ว ต้องสามารถจัดการได้เช่น ทำการ deploy ระบบใน node ใหม่ได้เอง
  • Transactional ถ้าระบบทำงานผิดพลาดแล้ว ข้อมูลยังคงต้องถูกต้อง เช่น commit หรือ rollback นั่นเอง ไม่ใช่มีข้อมูลเพียงครึ่ง ๆ กลาง ๆ
  • Clean restarts ถ้า node พังขึ้นมา ระบบต้องการันตีว่า node นั้นออกไปจากการทำงานแล้ว ไม่มีการส่งงานไปให้ แต่จะส่งงานไปให้จนกว่าจะพร้อมหรือสร้างขึ้นมาใหม่
  • Queue backed เมื่อระบบทำงานผิดพลาด เช่น node พังไปแล้ว ต้องทำกลับมาให้ได้ หนึ่งในนั้นคือ การนำ event หรือการทำงานไปไว้ใน queue เพื่อรอการทำงานต่อไป
  • Idempotency เป็นความสามารถของระบบที่ดี นั่นคือเมื่อ request หนึ่งทำงานซ้ำมากกว่า 1 ครั้งแล้ว ผลการทำงานยังต้องเหมือนเดิม ไม่ใช่ทำงานซ้ำ เนื่องจากถ้าระบบทำงานผิดพลาด เราจะสามารถ replay หรือสั่งให้ทำงานใหม่ได้โดยไม่กลัวความผิดพลาด
  • Stateless ถ้าระบบงานทำงานแบบ stateless แล้ว นั่นคือไม่เก็บข้อมูลหรือ state ใด ๆ ในตัวเอง ส่งผลให้สามารถจัดการหรือย้ายระบบงานไปที่อื่นได้ง่ายขึ้น

ว่าแล้วก็ลองกลับมาตรวจสอบระบบงานเรากำลังพัฒนาหรือดูแลอยู่
มีคุณสมบัติตามนี้หรือไม่ ?