ระหว่างรอรถกลับบ้าน ทำการสรุปสิ่งที่จำเป็นต่อการพัฒนาระบบงาน
แต่ในปัจจุบันเราพยายามแยกระบบงานใหญ่ออกเป็น service เล็ก ๆ
หรือบางคนอาจจะเรียกว่า Microservices
สิ่งที่น่าสนใจคือ ในการพัฒนาระบบงานนั้น
เราต้องคำนึงถึงอะไรบ้าง

Interface สำหรับการเชื่อมต่อกับ service หรือระบบอื่น ๆ

ซึ่งมีหลากหลายมาก ๆ เช่น

  • JSON
  • JSON-RPC
  • Thrift
  • Protocol Buffers

รวมไปถึง Protocol ของการติดต่อสื่อสาร
โดยในปัจจุบันก็จะใช้ REST และ RPC
ส่วน WebService ก็เห็นมีบ้างนะ แต่อาจจะมี overhead สูงหน่อย
หรืออาจจะมี Legacy Protocol ซึ่งนิยมนำเอา 3 protocol ด้านบนมาครอบอีกชั้น !!

Pattern หรือรูปแบบที่ระบบงานน่าจะต้องมี

ยิ่งในโลกของ Microservices ยิ่งจำเป็นและมีการพูดคุยกันมา
ยกตัวอย่างเช่น

  • Circuit breaking ถ้าปล่อยให้ผู้ใช้เรียก service ที่ทำงานแย่ ๆ เช่น ทำงานช้า ใช้ memory เยอะ ๆ คงไม่ดีแน่นอน
  • Service discovery/registry ถ้ามี service จำนวนมาก ๆ การนำ service เข้าและออก แบบง่าย ๆ น่าจะดีไม่น้อย รวมทั้งสามารถดูได้ด้วยว่ามี service อะไรบ้าง ก็น่าจะแจ่มมาก ๆ คนใช้งาน service ก็มีหาและเชื่อมต่อ service จากที่นี่เลย One Stop Service ชัด ๆ แต่ระวังเรื่อง Single Point of Failure นะ ย้อนกลับไป SOA มันก็คุ้น ๆ นะ
  • Health check ในทุก ๆ service หรือทุก ๆ ระบบควรมี health check เสมอ ทั้ง readiness และ liveness
  • Timeout ขาดไม่ได้เลย สำหรับการเชื่อมต่อไปยังส่วนต่าง ๆ ซึ่งต้องสามารถ configuration ได้ง่าย ไม่ใช้ไปแก้ไข code ตรง ๆ นะ
  • Load balancing สิ่งที่ควรต้องมีในการเรียกใช้ service จาก client ปัจจุบัน Load balance มีอยู่ในฝั่ง client หรือผู้เรียกใช้งานกันแล้ว
  • Routing สิ่งที่เราเลือกใช้งานนั้น จำเป้นต้องมีการจัดการ routing ที่ง่ายและยืดหยุ่น ทั้งแบบ static และ dynamic
  • Application monitoring ของระบบงาน ในแต่ละ flow และ scenario ในมุมมองของผู้ใช้งานและการทำงานของระบบงาน ไม่ใช่ Server หรือ System monitoring นะ

คำถามที่น่าสนใจคือ service หรือระบบของเรามีสิ่งต่าง ๆ เหล่านี้หรือไม่ ?
ไม่ว่าจะพัฒนาด้วยภาษา program และ framework อะไร
สิ่งต่าง ๆ เหล่านี้จำเป็นต้องมีเสมอ