ในช่วง 2-3 เดือนที่ผ่านมานั้น มีโอกาสได้แลกเปลี่ยนความรู้และประสบการณ์
เกี่ยวกับการนำแนวคิด Microservices มาใช้งาน
ผ่านทางการพูดคุย สอน แบ่งปันแบบ Remote/Online
ทำให้ได้เห็นแนวทางที่ชัดเจนขึ้นว่า

เราต้องเข้าใจในปัญหา หรือ ความต้องการก่อน

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

การแบ่งระบบงานออกเป็น service ย่อย ๆ (Decomposition)

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

  • แยกตาม business หรือ feature ไป บ่อยครั้งแยกให้แต่ละทีมทำไปเลย เช่น logging, monitoring และ user management เป็นต้น
  • แยกตาม domain ตามแนวคิดของ Domain-Driven Design

เมื่อแยกเป็นหลาย ๆ  service แล้วจะค้นหากันอย่างไร (Service Discovery) ?

แน่นอนว่า ต้องเตรียมคำตอบหรือวิธีการไว้เสมอ

ต่อจากนั้นเรื่องของ การติดต่อสื่อสารระหว่าง service ก็ตามมาอีก

ว่าจะมีรูปแบบอย่างไร ?
ทั้ง Remote Procedure Invocation เช่น REST, RPC เป็นต้น
ทั้ง Messaging ที่ติดต่อสื่อสารกันแบบ  asynchronous หรือเป็น protocol เฉพาะทาง

บ่อยครั้งจะพบว่า แยก service แล้ว
แต่รูปแบบการติดต่อสื่อสารกันยังผูกมัดกัน !!
มันเป็นผลมาจากการเลือกที่ไม่เหมาะสมหรือไม่ ?

สิ่งที่ขาดไม่ได้เลยคือ Service Observation 

เพื่อทำให้เราสามารถดูแลสุขภาพของระบบงานโดยรวมได้ดี
รวมทั้งสามารถหาต้นเหตุของปัญหาได้ง่ายอีกด้วย
ประกอบไปด้วย

  • Log aggregation
  • Application Metrics
  • Distributed tracing
  • Health check
  • Log deployment and change

อีกส่วนที่มักพลาดกันเยอะคือ Database management

ถือว่าเป็นอีกส่วนที่สำคัญ ว่าระบบงานและ service จะจัดการข้อมูลกันอย่างไร
แต่ละรูปแบบก็มีข้อดีข้อเสียต่างกันไป 
จำเป็นต้องกลับไปดูความต้องการและขอบเขตการทำงานจากข้างต้นด้วย 
เพราะว่า แต่ละ service ต้องการ database ที่แตกต่างกันไป
รูปแบบประกอบไปด้วย

  • Shared database
  • Database per service
  • Hybrid database

เรื่องที่คุยกันท้าย ๆ คือ Testing และ Deployment

เราจะทดสอบกันอย่างไร เราจะ deploy กันอย่างไร
จำเป็นต้องมีการออกแบบและเตรียมระบบ CI/CD ไว้เสมอ
เพื่อให้เรามีความมั่นใจต่อระบบ
เพื่อให้เราสามารถ deploy ได้บ่อยตามที่ต้องการ
เพื่อให้เรากลัวการผิดพลาดน้อยลง