ไปอ่านเจอใน feed จาก Twitter แบบผ่าน ๆ
เจอว่ามีการพูดถึง Microservices 4.0 ด้วย (หา link ต้นทางไม่เจออีก)
แบบนี้แสดงว่า 4.0 นี่ไม่ได้ฮิตในบ้านเราเท่านั้นนะ (ไม่น่าเกี่ยวข้องกัน)
เลยนำมาสรุปแบบคร่าว ๆ ไว้หน่อย
น่าจะพอมีประโยชน์กันบ้าง

ปล. แค่เรื่อง Microservices ก็ยังงง ๆ กันแล้ว
นี่มีทั้ง 1.0, 2.0, 3.0 และ 4.0 จะไม่งงได้อย่างไร !!

เริ่มด้วยประวัติความเป็นมาก่อน

โดยเล่ามาตั้งแต่ Continuous Integration(CI) และ Continuous Delivery (CD) มาถึง Agile
ต่อด้วยเข้าสู่ยุคของ Cloud คือ Amazon EC2
จากนั้น J2EE (แก่จริง ๆ) ก็มา ตามด้วย DevOps ติด ๆ
แต่ที่โด่งดังมาก ๆ คือ AWS + Netflix นั่นเอง
ซึ่งหลังจากนี้เริ่มเข้าสู่ยุค Microservices 1.0

โดยทาง Netflix ได้พัฒนาระบบตามแนวคิดเหล่านี้

แถมยังปล่อยของชุดใหญ่ออกมา ยกตัวอย่างเช่น

  • Service registry คือ Eureka
  • API Gateway คือ Zuul
  • Client-side Load Balancer คือ Ribbon

ยังไม่พอนะ Spring Boot + Spring Cloud มาอีก
ยิ่งทำให้ทุกอย่างมันเหมาะเจาะพอดี
ดังนั้นสาย Java จึงมักจะพัฒนาตาม stack ของเทคโนโลยีเหล่านี้
แต่ยังผูกติดกับภาษาและเทคโนโลยี
แถมต้องเพิ่ม code ในเรื่องต่าง ๆ เข้ามาในระบบงานของเราอีก
ซึ่งมันดูขัด ๆ กับแนวทางและคุณสมบัติของ Microservices นะ !!

ดังนั้นจึงมาแนวคิดว่า ถ้าแยกส่วนการทำงานต่าง ๆ ออกมาจาก code

ยกตัวอย่างเช่น Service registry, API Gateway หรือเรื่อง routing
รวมไปถึงเรื่องของการ deploy และ scale ออกมา
ลดเรื่องของการผูกติดกับภาษาและเทคโนโลยี
รวมทั้งไม่ยึดติดกับ Cloud provider อีกด้วย
นั่นคือจึงเป็นที่มาของ Kubernetes + Docker
ทำให้เข้าสู่ยุค Microservices 2.0

แต่ปัจจุบันเริ่มพูดถึง Service Mesh มากยิ่งขึ้น

นั่นคือจำนวนของ service เริ่มมากขึ้น
การติดต่อสื่อสาร
การจัดการเรื่อง Authentication
การจัดการเรื่อง logging
การจัดการเรื่อง tracing
ซึ่ง Kubernetes ยังไม่ตอบโจทย์มากนัก
จึงทำให้เกิด Istio ขึ้นมา เพื่อจัดการหรือตอบโจทย์สิ่งเหล่านี้
ทำให้แยกส่วนการทำงานเหล่านี้ไปให้ Istio ดูแลให้เราเลย
แต่แน่นอนว่า ได้บางอย่างก็ต้องเสียบางอย่างไปเสมอ
นั่นคือ overhead ของการเรียนรู้สิ่งใหม่ ๆ นั่นเอง
นี่คือ Microservices 3.0

จะเห็นได้ว่า เป้าหมายของการสร้างสิ่งต่าง ๆ ออกมา

เพื่อแก้ไขปัญหาทั้งสิ้น
ส่งผลให้ code ของระบบงานนั้น มีเฉพาะสิ่งที่จำเป็นจริง ๆ
ส่วนอื่น ๆ แยกออกไปให้เป็น platform/infrastructure ดีกว่า
แต่ก็แลกมาด้วย overhead รวมทั้งต้องเรียนรู้ของอีกหลาย ๆ อย่างมาแทนเช่นกัน
แสดงดังรูป

สุดท้าย … ไม่ใช่สิ คือ ล่าสุด Microservices 4.0

ทำไมคุ้น ๆ กับประเทศเรานะ !!
มันคือเรื่องของสิ่งที่พูดกันเยอะมาก ๆ คือ Function as a Service (FaaS) หรือ Serverless นั่นเอง

ก่อนอื่น จะนำอะไรมาใช้ตอบให้ได้ก่อนว่า เรามีปัญหาอะไร ?