เราจะไป Microservice ดีใหมนะ ?

เป็น Trend ใหม่ กันไปเสียแล้ว กับการปรับเปลี่ยน Software Architecture
ไปในรูปแบบ Microservices

Microservices” คำนี้ ไม่ได้พึ่งมาฮ็อตฮิตกันตอนนี้นะ
จริงๆแล้ว เกิดมาตั้งแต่ ปี 2011 และถูกกล่าวถึงกันอย่างแพร่หลาย เรื่อยมา

เปรียบเทียบ Monolith vs Microservices

https://martinfowler.com/articles/microservices.html#CharacteristicsOfAMicroserviceArchitecture

Monolith

น่าจะเป็น สถาปัตยกรรมที่ใชักันอย่างแพร่หลายในปัจจุบัน (2017)
โดยเป็นการเอา Service ทั้งหมดรวบกันเป็นชิ้นเดียว
แล้วนำไป ติดตั้งบน Web Server หรือ App Server เช่น ใน Java อาจ เป็น War , Ear file และ นำไปติดตั้งยกชุด
ข้อดี
- Performance ดีกว่า เพราะทำงานภายในระบบเดียวกัน
- Codebase เดียว Maintain ง่าย ทั้งในแง่ Source code และ Operation Support
- การ Debug / Test ไม่ซับซ้อน
- จัดการเรื่อง Security ง่ายกว่า
ข้อด้อย
- ทำการขยายขนาด เพื่อรองรับการใช้งานที่เพิ่มขึ้นลำบาก
- กรณีบาง Service พัง อาจส่งผลกับการทำงานของระบบโดยรวม

Microservices

James Lewis และ Martin Fowler
ให้คำจำกัดความ ของ Microservices
โดยสรุปไว้ว่า
- เป็นรูปแบบการพัฒนา Application ที่ประกอบด้วย การแบ่ง Service ออกเป็นชิ้นเล็กๆ
- Service สามารถทำงาน จนจบกระบวนการได้ด้วยตัวเอง
- แต่ละ Services ไม่จำเป็นที่จะต้องเขียนด้วยภาษาโปรแกรมแบบเดียวกัน
- สามารถแยกใช้วิธีการเก็บข้อมูล ที่แตกต่างกันได้

สมมุติว่า เราพัฒนาระบบ E-Wallet ก็จะสามารถ แยก ฟังชั่น ต่างๆ ออกเป็นระบบเล็กๆ ดังนี้
- Registration (ระบบลงทะเบียน)
- Authentication (ระบบล็อคอิน)
- Top-up (ระบบเติมเงิน)
- Transfer (ระบบโอนเงิน)
- Payment (ระบบชำระเงิน)

จะเห็นได้ว่า เราทำการแยกการพัฒนาระบบ
เป็นแต่ละ Service ออกจากกันอย่างชัดเจน ทำให้เมื่อบางระบบพัง ก็จะกระทบระบบอื่นน้อยลงเช่นกัน

ข้อดี
Scalable :
สามารถขยายขนาดเพื่อรองรับผู้ใช้งานได้ง่าย เช่น เลือกขยาย Service ที่ถูกใช้งานเยอะๆ
Reliability : บาง Service พัง ก็ไม่กระทบกับระบบโดยรวม เพราะแยกการทำงานจากกันชัดเจน
Design autonomy : แต่ละ Service สามารถเลือกใช้ เทคโนโลยี ที่แตกต่างกัน ตามความเหมาะสม
Modifiability : ปรับเปลี่ยนได้ไว เนื่องจากแยก Service อย่างชัดเจน
ไม่จำเป็นต้อง Deploy ทั้งระบบ

ข้อด้อย
Complexity :
ออกแบบฯ Architecture ให้ดี ยาก
Performance :
Performance อาจไม่ดีนักถ้าเทียบกับ Monolith เพราะเป็นการเรียกใช้งานระหว่าง Service ไม่ใช่ใน Process เดียวกัน
Security : แยกหลาย Service ทำให้ จัดการ Security ยากขึ้น
Data : กรณีแยก การเก็บข้อมูลจากกัน จะยากต่อการจัดการ Data consistency

เลือกยังไงดี ระหว่าง Monolith / Microservices

กราฟ แสดง Productivity / Base Complexity

จะเห็นว่า กรณีระบบที่ไม่ซับซ้อนมาก
การเลือกใช้ Monolith จะได้ Productivity ที่ดีกว่า
แต่เมื่อไรก็ตามที่ระบบเริ่มซับซ้อนมากขึ้น ๆ
Monolith กลับได้ Productivity ลดลงอย่างเห็นได้ชัด

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

--

--