
ระบบงานต่าง ๆ นั้นจำเป็นต้องทำงานร่วมกับระบบงานอื่น ๆ ผ่านระบบ network
ซึ่งแน่นอนว่า พร้อมพัง เสมอ
ดังนั้นในการออกแบบ พัฒนา และ ทดสอบ
จำเป็นต้องสนใจ และ ใส่ใจมาก ๆ ถ้ามีปัญหาขึ้นมา
จะจัดการกันอย่างไร เพื่อให้ระบบมีความเสถียร ไม่พังง่าย ๆ
หรือไม่เกิดไฟลามทุ่ง คือ ปัญหาเกิดที่หนึ่ง แล้วส่งผลกระทบไปทั่วระบบ !!
ดังนั้นเรื่องของ Resiliency Pattern จึงสำคัญมาก
อาจจะเรียกว่า Design for failure ก็ได้
มาดูกันว่ามีรูปแบบอะไรบ้าง ?
เพื่อช่วยให้ระบบมีความเสถียรมากขึ้น
สามารถรอบรับการขยายตัวได้ง่ายขึ้น
และสามารถทำงานได้ตลอดเวลามากขึ้น
กลุ่มที่ 1 จัดการที่ฝั่งของผู้เรียกใช้งาน หรือ consumer
เมื่อระบบงานที่เราเรียกใช้มีปัญหา เช่น พัง หรือ ช้า
จะไม่ส่งผลต่อผู้เรียกมากนัก หรือ ไม่พังไปด้วยกัน
ยกตัวอย่างรูปแบบที่ใช้จัดการ
- Timeout (มักจะมาพร้อมกันการ retry) เพื่อลดการจองหรือใช้งาน resource ต่าง ๆ นานจนเกินไป
- Circuit breaker หรือตัดก่อนตาย เตือนก่อนวายวอด เป็นการ monitor ตาม rate ของ failure ที่เกิดขึ้น ถ้าถึงจุดที่กำหนดไว้ จะทำการ disable การเรียกแบบชั่วคราว รอจนกว่าปลายทางจะกลับมาทำงานเป็นปกติ จึงจะเรียกไปแบบอัตโนมัติ เพื่อลดการเรียกไปยังปลายทางที่ไม่เสถียร ต้องทำการร่วมกับระบบ monitoring ของระบบ รวมทั้งระบบ alert จะช่วยทำให้เรารู้ทันทีว่าตรงจุดใดในระบบมีปัญหา เพื่อเข้าไปแก้ไขได้ง่ายขึ้น
- Client-load balancing ทางฝั่ง consumer ทำการเลือกได้ว่า จะส่ง request ไปยัง provider instance ไหนเองได้
กลุ่มที่ 2 จัดการที่ฝั่งของผู้ถูกเรียก หรือ provider
เมื่อมี request เข้ามายังฝั่งของ provider มาก ๆ หรือ มากจนเกินไป
ส่งผลต่อ reponse time ของการเรียกใช้งาน
รวมทั้งอาจจะทำให้ระบบงานพังได้ง่าย ๆ
แล้วกระทบคนอื่น ๆ อีก ดังนั้นจึงมีรูปแบบการจัดการ
- Rate limit ทำการกำหนด limit การใช้งานตามเงื่อนไขที่กำหนด เช่น ตามระบบ ตาม ip ตาม user เป็นต้น เราจะเจอกันทุกเดือน !!
- Bulkhead เป็นแนวทางในการแยกส่วนต่าง ๆ ของระบบออกจากกัน เพื่อป้องกันปัญหา casecade failure หรือ ไฟลามทุ่ง นั่นให้ให้พังเป็นส่วน ๆ ไป ส่วนอื่น ๆ ก็ยังคงทำงานได้อยู่ นั่นคือการลดเรื่อง single point of failure
- Load balance ทำงานร่วมกับ health check ของระบบงาน ซึ่งใช้ความสามารถของ load balance เพื่อกระจาย request ไปยัง provider instance ต่าง ๆ แต่ก็ทำการ monitor ด้วยว่า provider instance นั้น ๆ ยังคงมีสุขภาพดีไหมผ่าน health check ถ้าไม่ดี ก็จะไม่ส่ง request ไปนั่นเอง
- Load Shedding หรือ sharding request ทำการจัดการ request เข้ามาช่วง peak load ระบบ provider จะรับมืออย่างไรบ้าง เพื่อให้ request ของแต่ละ user ทำงานตามลำดับความสำคัญได้ เช่น การใช้ priority queue มาช่วยจัดการ กระจาย request ไปตามกลุ่มของงาน หรือการใช้งาน token bucket มาช่วยจัดการเป็นต้น
Reference websites