Microservice คืออะไร

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)

1. Synchronous Calls เป็นการสื่อสารที่ใช้งานง่ายที่สุดโดยผ่าน REST API สมมติหากมี Service 1 ต้องการเรียก Service 2 คำขอจะเสร็จสิ้นก็ต่อเมื่อ Service 2 ต้องมีการตอบกลับไป Service 1
2. Simple Messaging เป็นการส่งแบบ Asynchronous Message โดยส่ง Service 1 ส่ง Messages ไปไม่ต้องรอการตอบกลับ โดยหาก Service 2 ต้องการรับ Messages ก็เพียงมา Subscribe ได้ เช่น kafka, Rabbit MQ คือ Messages นั้นจะถูกส่งไปแล้วไปเก็บที่ Messages Queue หาก Service ใดต้องการข้อมูลก็สามารถ Subscribe ได้
3. Transactional Messaging เป็นการต่อยอดจาก Simple Messaging แทนที่ Messages จะถูกส่งไปยังฝั่งที่ต้องการโดยตรง Messages จะถูกเก็บไว้ในฐานข้อมูลทั้งฝั่งที่รับและฝั่งที่ส่ง เนื่องจากข้อมูลนั้นถูกเก็บใน Database หากระบบของฝั่งใดฝั่งหนึ่งล้มเหลวไป ข้อมูลต่างๆนั้นจะไม่สูญหายและสามารถกลับมาทำงานได้อย่างปกติ
4. Zero-Payload Events วิธีนี้จะเป็นการส่งข้อมูลคล้ายๆกับตัว Messaging แต่เราจะไม่ส่ง Messages ทั้งหมดออกไป (ปกติแล้วจะส่งเป็น JSON Objects ออกไป) เราจะใช้วิธีการใช้ Pointer ส่งออกไปแทนซึ่งขนาด Messages จะเล็กกว่าตัว JSON Objects มาก

Microservices vs. Monolithic

ถึงแม้ Microservices จะเป็นสถาปัตยกรรมแบบใหม่ก็ตาม แต่ปัจจุบัน Monolithic ก็ยังนิยมใช้กับงานบางประเภทอยู่ ซึ่งข้อแตกต่างของทั้งสองมีดังนี้

MonolithicMicroservices
Source Code อยู่ใน Package ชุดเดียวกันSource Code ถูกแยกออกเป็นหลายๆส่วนตาม Feature
หาก Service พังจะไม่สามารถใช้งานได้ทั้งระบบหากมี Services ใดพังส่วนอื่นๆของระบบยังสามารถใช้งานได้อยู่
ยิ่งระบบมีขนาดใหญ่มากเท่าไหร่ การรับส่งข้อมูลภายในระบบก็จะยิ่งช้ามากขึ้นการรับส่งข้อมูลภายในระบบจะรวดเร็ว
ต้อง Deploy ทั้งระบบ ไม่สามารถแยกได้สามารถแยกกัน Deploy แต่ละ Services ได้
จัดสรรทรัพยากรสิ้นเปลือง จัดสรรทรัพยากรที่ประหยัดกว่า
ต้องใช้ทีมขนาดใหญ่ในการพัฒนา เพราะไม่สามารถแยกออกเป็นส่วนๆได้ ทุกอย่างจะถูก Pack รวมกันสามารถพัฒนาซอฟต์แวร์ได้รวดเร็วกว่า สามารถแยกพัฒนาแต่ะละ Services ไปพร้อมๆกันได้
การ Deploy ง่ายและรวดเร็ว(หากโปรแกรมมีขนาดเล็ก)การ Deploy อาจช้ากว่าเพราะมีหลาย Services
การแก้ Bug หรือการทดสอบอาจมีความยากและซับซ้อนแก้ Bug และทดสอบซอฟต์แวร์สามารถแยกทดสอบเป็นส่วนๆได้

ป้ายกำกับ

แสดงเพิ่มเติม

บทความยอดนิยม

Software Development Life Cycle (SDLC) คืออะไร ทำไมจำเป็นต่อการพัฒนาซอฟต์แวร์

Automation testing หรือ การทดสอบซอฟต์แวร์อัตโนมัติ คืออะไร ทำไมถึงสำคัญต่อการทดสอบซอฟต์แวร์

ม.ปลายอยากเข้าสายคอม วิทยาการคอม วิศวกรรมคอม เตรียมตัวอย่างไร ต้องมีพื้นฐานอะไรบ้าง

วิธีเก็บ วิเคราะห์ รวบรวม requirement อย่างไรให้มีประสิทธิภาพ

Performance Test คือ อะไร วัดประสิทธิภาพของระบบ ล่มไม่ล่ม จะรู้ได้อย่างไร

8 สิ่งที่ AI จะมาเปลี่ยนโลกในอนาคต

ถอดรหัสความลับเครื่อง Enigma จุดเริ่มต้นและจุดจบของสงครามโลกครั้งที่ 2