จากบทความเรื่อง Software Architecture and Design InfoQ Trends Report :: April 2022 จาก InfoQ
ม่ีเรื่องที่น่าสนใจมากมาย
หนึ่งในนั้นคือ Design for failure
หรือการออกแบบระบบเพื่อให้สามารถรับมือกับความผิดพลาดได้
ทั้งความผิดพลาดที่เราคาดหวังและไม่คาดหวังได้
ระบบงานไม่ได้จบเพียงแค่ส่งมอบหรือ deploy เท่านั้น
แต่ยังต้องสนับสนุนทาง business และสร้างความพึงพอใจให้กับลูกค้าด้วย
ดังนั้นระบบงานที่ดี ควรประกอบไปด้วย
- การทำงานอย่างถูกต้องตามที่คาดหวัง
- ระบบมีความน่าเชื่อถือ
- ระบบสามารถเข้าได้งานได้เสมอ (24x7)
แน่นอนว่า การทำงานได้อย่างถูกต้องของระบบนั้สำคัญมาก ๆ
แต่สิ่งที่ขาดไม่ได้คือ 2 เรื่องต่อมา
เพื่อทำให้ระบบมีความน่าเชื่อถืแและเสถียร
ดังนั้นในการออกแบบควรต้องวางแผนไว้เสมอ
เนื่องจากระบบงานหนึ่ง ๆ นั้นมีส่วนประกอบทั้ง service และ component มากมาย
รวมทั้งติดต่อกันผ่านระบบ network ต่าง ๆ อีก
แน่นอนว่าทำให้ระบบงาน สามารถเกิดข้อผิดพลาดได้อย่างมากมาย
ดังนั้นเราจึงต้องทำระบบ automatic fail-over และทำ redundancy ส่วนต่าง ๆ
หรืออาจจะต้องวางแผนการรับมือจากความผิดพลาด (Design for failure)
หรืออาจจะเรียกว่า resilience pattern
เพื่อทำให้ระบบรับมือกับความผิดพลาดได้
และสามารถช่วยให้ระบบกลับมาทำงานได้ปกติรวดเร็วที่สุด
หรือลดผลกระทบต่อผู้ใช้งานให้มากที่สุดนั่นเอง
เป้าหมายของระบบที่มักจะใช้งานคือ Availability
โดยจะมีส่วนประกอบจากค่า Uptime และ Downtime
นั่นคือเราจะเพิ่ม Uptime ให้มากที่สุด
และลดเวลา Downtime ให้น้อยที่สุด
ในการพัฒนาระบบสมัยใหม่นั้น
เราจะสนใจการลดเวลาการ Downtime ให้น้อยลง
ด้วยการลดเวลา Mean Time To Recovery
หรือ หรือเวลาการนำระบบกลับมาให้ทำงานได้แบบปกติ
ซึ่งประกอบไปด้วย เวลาต่าง ๆ เหล่านี้
- เวลาที่เรารู้ว่าปัญหาเกิดขึ้น
- เวลาในการหาต้นเหตุของปัญหา
- เวลาในการแก้ไข
- เวลาในการทดสอบ
- เวลาในการ deploy
- เวลาที่กลับมาทำงานได้ปกติ
จะเห็นได้ว่า ถ้าเราลดเวลาต่าง ๆ เหล่านี้ลงไปได้
ก็ยิ่งทำให้ระบบมีความน่าเชื่อถือ และเข้าใช้งานได้มากยิ่งขึ้น
รูปแบบของการออกแบบเพื่อรองรับข้อผิดพลาด
ประกอบไปด้วย
- Redundancy
- Replication data
- Isolate หรือการแยกทั้ง service และ database หรืออาจจะใช้แนวคิด Bulkhead มาช่วย
- Timeout
- Retry
- Fail fast
- Fall back
- Rate limit
- Circuit breaker
- Asynchronous communication
อะไรที่มันจะ fail ได้ มันย่อม fail เสมอ
Reference Websites