Microservices เป็นสถาปัตยกรรมการออกแบบซอฟต์แวร์รูปแบบหนึ่งที่จะแบ่ง Services ย่อยๆ ซึ่งแต่ละส่วนสามารถแยกกันทำงานได้อย่างอิสระ ทำให้ง่ายต่อการพัฒนา, แก้ไข, Deployment , Scale Services และการทดสอบ ซึ่งจะแตกต่างจากการพัฒนาซอฟต์แวร์แบบเดิม(Monolithic) ที่ทุกอย่างจะถูกรวมไว้ใน Package เดียวกัน ทำให้การพัฒนาและแก้ไขยาก ดังนั้น Microservices จึงเป็นแนวทางการพัฒนาซอฟต์แวร์ที่รวดเร็วและง่ายมากยิ่งขึ้น
การทำงานแบบ Monolithic
เป็นการทำงานแบบดั้งเดิมคือการรวมทุกอย่างทุก Features อยู่ในก้อนเดียวกันทั้งหมด Code ทั้งหมดจะมองเป็นก้อนเดียวกัน อยู่ภายใต้ Unit เดียวกัน ในช่วงแรกจะพบว่า Application ติดตั้งง่าย แต่หากมีการพัฒนาซอฟต์แวร์ต่อยอดขึ้นมาเรื่อยๆ มีการเพิ่มฟังก์ชันต่างๆเพิ่มขึ้นมา จะพบว่าเริ่มจัดการยากขึ้น การแก้ไข Code เพียงเล็กน้อยอาจะส่งผลกระทบกับ Feature อื่นหรือมีผลกระทบทั้งระบบได้เช่นระบบ e-commerce เราต้องการเพิ่มวิธีการชำระเงิน โดยการโอนเงินผ่าน QR CODE เข้ามา ตอน Deploy เราก็ต้อง Deploy ใหม่ทั้งหมด ทั้งที่อาจจะมีบาง Feature ที่ไม่เกี่ยวข้องก็ตาม ซึ่งมันทำให้การดูรักษายาก การทดสอบนั้นก็ยาก ดังนั้นจึงมีแนวคิดการแยก Code ออกจากกัน(Microsercie) เพื่อแก้ปัญหาดังกล่าว
การทำงานแบบ Microservices
เป็นการทำงานแบบแยกย่อยกันหลายๆ Services โดยแต่ละ Services ทำงานได้อย่างอิสระสามารถแยกกันพัฒนาได้ แต่สุดท้ายแล้วเรานำแต่ละ Services มารวมกันก็จะได้ Application ที่มีขนาดใหญ่ได้เหมือนกัน แต่ละ Service สามารถมี Database เป็นของตัวเองได้ ปัจจุบันเรามักมีการแยก Microservices โดยใช้ Business function เช่นระบบ e-commerce สามารถแยกได้เป็น Services ต่างๆเช่น ระบบจัดการสมาชิก ระบบบริการคลังสินค้า การจัดการโปรโมชั่น ระบบจ่ายเงิน ระบบบริหารการจัดส่ง ระบบแจ้งเตือนสถานะสินค้า เป็นต้น แต่ละ Services สามารถ Deploy และ Scale ของแต่ละ Services ได้ นอกจากนั้น Microservices ยังช่วยลดความเสียหายของซอฟต์แวร์ได้อีกด้วย เช่นหากมี Services ใดพังไป Services อื่นๆก็ยังสามารถใช้งานได้เช่น ระบบสมัครสมาชิกพังไปก็ยังสามารถจัดส่งสินค้าได้
วิธีการติดต่อสื่อสารระหว่าง Services(Communication Pattern)
Microservices vs. Monolithic
ถึงแม้ Microservices จะเป็นสถาปัตยกรรมแบบใหม่ก็ตาม แต่ปัจจุบัน Monolithic ก็ยังนิยมใช้กับงานบางประเภทอยู่ ซึ่งข้อแตกต่างของทั้งสองมีดังนี้
Monolithic | Microservices |
---|---|
Source Code อยู่ใน Package ชุดเดียวกัน | Source Code ถูกแยกออกเป็นหลายๆส่วนตาม Feature |
หาก Service พังจะไม่สามารถใช้งานได้ทั้งระบบ | หากมี Services ใดพังส่วนอื่นๆของระบบยังสามารถใช้งานได้อยู่ |
ยิ่งระบบมีขนาดใหญ่มากเท่าไหร่ การรับส่งข้อมูลภายในระบบก็จะยิ่งช้ามากขึ้น | การรับส่งข้อมูลภายในระบบจะรวดเร็ว |
ต้อง Deploy ทั้งระบบ ไม่สามารถแยกได้ | สามารถแยกกัน Deploy แต่ละ Services ได้ |
จัดสรรทรัพยากรสิ้นเปลือง | จัดสรรทรัพยากรที่ประหยัดกว่า |
ต้องใช้ทีมขนาดใหญ่ในการพัฒนา เพราะไม่สามารถแยกออกเป็นส่วนๆได้ ทุกอย่างจะถูก Pack รวมกัน | สามารถพัฒนาซอฟต์แวร์ได้รวดเร็วกว่า สามารถแยกพัฒนาแต่ะละ Services ไปพร้อมๆกันได้ |
การ Deploy ง่ายและรวดเร็ว(หากโปรแกรมมีขนาดเล็ก) | การ Deploy อาจช้ากว่าเพราะมีหลาย Services |
การแก้ Bug หรือการทดสอบอาจมีความยากและซับซ้อน | แก้ Bug และทดสอบซอฟต์แวร์สามารถแยกทดสอบเป็นส่วนๆได้ |