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

ในมุมมองของนักพัฒนานั้น
การทำอะไรที่มันเล็ก ๆ แยกส่วนการทำงานออกจากกันอย่างชัดเจน
เป็นสิ่งที่ชอบมาก ๆ ( แต่หาไม่ค่อยเจอ )
ดังนั้นจึงชอบแนวคิดของ Modular และ Microservices อย่างมาก

แต่เมื่อมองในมุมของ operation
พบว่ามันน่าสะพรึงกลัวอย่างมาก
เป็นเรื่องที่เครียดมาก ๆ
เพียงระบบเดียวยังดูแลยากลำบาก
เพียงระบบเดียวยังติดตั้งยาก
เพียงระบบเดียวยัง … ยากลำบาก

ดังนั้นก่อนจะเริ่ม Microservices มาเตรียมสิ่งเหล่านี้ให้พร้อมก่อนดีกว่าไหม ?

1. เตรียม environment ได้เร็วไหม ?

ตัวอย่างเช่นการเตรียมหรือ provisioning server ขึ้นมา
ไม่ว่าจะเป็นเครื่องจริง ๆ หรือบน Cloud นั้น
ใช้เวลานานเท่าไร ?
มีขั้นตอนการทำงานที่เยอะหรือไม่ ?
เช่น
ใช้เวลาเป็นชั่วโมง เป็นวันกว่าจะได้ ?
ต้องผ่านการ approve หลายฝ่าย กว่าจะได้ ?
ถ้ายังเป็นแบบนี้ แสดงว่ายังไม่พร้อมนะ

ดังนั้นควรต้องเตรียมการเตรียม environment ให้รวดเร็ว มีคุณภาพ
การทำงานควรเป็นแบบอัตโนมัติ
ซึ่งอาจจะดูไม่สำคัญสำหรับระบบงานที่ไม่เยอะ
แต่เมื่อเข้าสู่โลก Microservices แล้วเป็นสิ่งที่ขาดไม่ได้เลย

2. ขั้นตอนการ deploy ระบบงานเร็วไหม ?

ยกตัวอย่างเช่น
เมื่อมีการเปลี่ยนแปลง source code และ configuration ต่าง ๆ แล้ว
ขั้นตอนการ build -> test -> package -> deploy นั้นมีความเร็วเท่าไร ?
รวมไปถึงการ deploy ใน environment ต่าง ๆ เช่น QA/Test, UAT, Staging และ Production
ใช้เวลาเป็นชั่วโมง เป็นวันหรือไม่ ?
ยังทำแบบ manual หรือไม่ ?

ถ้ายังเป็นเช่นนี้ ก็ให้ปรับปรุงและเปลี่ยนแปลงก่อนเลย
ด้วยการกำหนดหรือสร้าง Deployment pipeline ขึ้นมา
ทำงานแบบอัตโนมัติให้ได้มากที่สุด
แต่สุดท้ายจำเป็นต้องเป็นแบบอัตโนมัติ

3. ระบบ Monitoring

ส่วนใหญ่เรามักมีระบบ Monitoring
ทั้ง infrastructure และ application บน production server เท่านั้น
แต่กลับไม่มีใน environment อื่น ๆ
ทำให้เจอปัญหาได้ช้ามาก
และแก้ไขก็ช้าเช่นกัน
บ่อยครั้งต้องเสียค่าใช้จ่ายในการแก้ไขสูงมาก

ดังนั้นสิ่งที่ควรต้องมีระบบ Monitoring ใน environment ต่าง ๆ ด้วย
อาจจะจะไม่ครบหรือเต็มเหมือนกับ production
แต่ขอให้มีแบบขั้นพื้นฐานทาง technical issue เป็นต้นก่อน
เพื่อช่วยให้เห็นปัญหาได้รวดเร็วขึ้น

โดยทั้ง 3 สิ่งนี่แหละ คือ สิ่งที่จำเป็นมาก ๆ ต่อ Microservices

นั่นหมายความว่า
ทั้งทีม Development และ Operation ต้องทำงานร่วมกัน
เพื่อให้เกิดสิ่งต่าง ๆ เหล่านี้ขึ้นมา
มันคือ DevOps culture ชัด ๆ

ขอให้สนุกกับการ coding ครับ

Reference Websites
https://martinfowler.com/bliki/MicroservicePrerequisites.html
https://martinfowler.com/articles/break-monolith-into-microservices.html