
แนวทางในการออกแบบระบบงานแบบ distributed นั้น
เรื่องของ Resilience pattern เป็นความรู้พื้นฐานที่สำคัญมาก ๆ
เพื่อให้ระบบมีความเสถียรและคงทนต่อความผิดพลาดมากยิ่งขึ้น
ทั้ง backoff, timeout, retry, idempotency และ circuit breaker
แต่ถ้าจัดการไม่ดี ก็อาจจะทำให้เกิดปัญหาตามมาได้
ยกตัวอย่างเช่น การ Retry หรือ ทำซ้ำ
ปกติเมื่อมีการติดต่อสื่อสารระหว่างระบบงาน
เช่น A เรียกไปยัง B แล้ว
มักจะเกิดเหตุการณ์ไม่ปกติ เช่น
- B ทำงานช้ามาก ๆ จึงต้องทำการกำหนด timeout ที่ฝั่ง A
- เมื่อเกิด timeout ที่ฝั่ง A แล้ว จะทำอย่างไร ?
- ผู้ใช้งานได้รับผลการทำงานอย่างไร ?
ตัวอย่างเช่น
เมื่อเกิด timeout ขึ้นมาแล้ว
อาจจะทำการ retry หรือ เรียก B ใหม่อีก 1 -2 ครั้ง
เพื่อทำซ้ำไปจนกว่าจะถึง limit ที่กำหนดไว้
โดยตรงนี้ต้อง monitoring ดี ๆ ด้วยว่า
การ retry นั้นส่งผลต่อการทำงานของระบบหรือไม่
มี concurrent user เท่าไรบ้าง
คิดถึง worse case ด้วยว่า จะส่งผลเสียมากกว่าผลดีหรือไม่ ?
ระบบปลายทางมีปัญหา ยังทำการส่ง request ซ้ำ ๆ ไปอีก
แบบนี้เหมือนกับการที่คนคนหนึ่งล้มไป แล้วเรากระทืบหรือไม่ ? (Retry storm)
อีกเรื่องถ้ามีการ retry แล้ว ต้องการันตีว่า
จะมีการทำงานเหมือนการทำงานครั้งเดียวเท่านั้น (idempotency)
ไม่เกิด duplicated transaction ขึ้นมานะ
มิฉะนั้นจะส่งผลเสียต่อระบบโดยรวมอย่างมาก
หรือบางครั้งมีปัญหาที่ระบบ network เท่านั้น
ทำให้ A คิดว่า B มีปัญหา หรือ ทำงานช้า
ก็ทำการส่ง request มาใหม่
อาจจะทำให้เกิดการทำงานซ้ำได้อีก
หรือถ้า A เรียก B แล้ว จากนั้น B ไปเรียก C
ซึ่ง B ไป C ทำงานสำเร็จ
แต่ A ไป B เกิด timeout ขึ้นมา
แบบนี้การ retry ที่ A จึงก่อให้เกิดปัญหาใหญ่ขึ้นมาได้ เช่น

การแก้ไขบางอย่าง อาจจะส่งผลเสียต่อระบบโดยรวมก็ได้
ตรงนี้ต้องระวังให้ดี
ดังนั้น ในการตัดสินใจเพื่อเลือกแนวทางการแก้ไขอย่างไร
ต้องดูภาพรวมของ flow การทำงานของระบบด้วย
ว่าการ retry นั้น มันปลอดภัย และ ไม่สร้างปัญหาอื่น ๆ ขึ้นมาใช่ไหม ?
และเลือกแนวทางของ retry ใหม่เหมาะสมกับ service หรือ flow นั้น ๆ
รวมทั้ง ความคาดหวังจากผู้ใช้งานอีกด้วย ว่าเป็นอย่างไร ?
หรืออาจจะต้องเปลี่ยนไปใช้วิธีการอื่น ๆ ที่เหมาะสมกว่านั่นเอง
เพราะว่า ในการทำงานของระบบไม่ได้มีแค่ hop เดียวเท่านั้น
และพฤติกรรมของแต่ละระบบก็ไม่เหมือนกันอีก !!
ในการอ่านข้อมูลนั้น retry ไม่ค่อยมีปัญหา
แต่ถ้ามีการสร้าง หรือ แก้ไขข้อมูล ต้องระวังเป็นอย่างมาก
Reference websites