วันนี้มีความต้องการความรู้ topic ใหม่ในเรื่องของความแตกต่าง ระหว่าง Monolithic และ Microservices ว่าแตกต่างกันอย่างไร จึงได้เผยแพร่บทความนี้ให้ผู้ที่กำลังศึกษาได้ทำความรู้จักกับความแตกต่างของเฟรมเวิร์กของสองชนิดนี้ โดยการเริ่มต้นถาม ChatGPT เพื่อหาคำตอบในการสืบค้นข้อมูลเชิงลึก
ลองถาม ChatGPT ดูว่า
“If you a senior software engineer can you explain to me how difference between micro service and monolit”
ก็ได้คำตอบมาประมาณว่า
ChatGPT ได้แยกประเด็นการเปรียบเทียบมา 6 หัวข้อ เช่น Codebase, Coupled, การดีพลอย, การสเกล, การพัฒนาและการทำการทดสอบ และ เทคโนโลยี Stack
เดี๋ยวเรามาดูกันว่า ChatGPT ได้ให้ข้อมูลมาอย่างไรบ้าง
สำหรับ Monolithic Architecture
การใช้ Monolithic Architecture เป็นรูปแบบการพัฒนาซอฟแวร์แบบ traditional ซึ่งเหมาะแก่การสร้างแอพพลิเคชั่นขนาดเล็ก
การเปรียบเทียบ จาก Monolithic มีอะไรบ้าง ?
Single Codebase:
ในการใช้สถาปัตยกรรมแบบ Monolithic Architecture หรือในวงการนิยมเรียกสั้นๆว่า “Flutter” , โดยทั้งแอพพลิเคชั่นของเรานั้นจะใช้ จะถูกสร้างแบบ Single หรือ แบบยึดเหนียวแน่น (cohesive unit) โดยที่การใช้งานต่างๆ นั้นประสานกัน และมีอยู่ใน single codebase
Tightly Coupled:
ส่วนต่างๆของระบบได้ถูกเชื่อมโยงกันแบบแน่นๆ (tightly coupled), หมายความว่า เปลี่ยนอะไรบางอย่างในระบบก็สามารถกระทบในส่วนอื่นๆของแอพพลิเคชั่นของเราได้
Deployment:
คือการที่แอพพลิเคชั่นทั้งหมดของเราถูกดีพลอยในรูปแบบยูนิตเดี่ยว ในทุกๆการเปลี่ยนแปลงแม้แต่การเปลี่ยนแปลงเล็กๆ จำเป็นต้องถูกดีพลอยใหม่ทั้งระบบ
Scaling:
Scaling หรือการขยายโครงสร้างพื้นฐาน ในที่นี้หมายถึง Network ให้ใหญ่ขึ้น มันสามรถทำให้ได้โดยการ คัดลอกของข้อมูล (replicating) ทั้งหมดในแอพพลิเคชั่น ข้ามไปในเซิร์ฟเวอร์ต่างๆ สิ่งนี้อาจทำให้เกิดความไม่มีประสิทธิภาพหากมีส่วนใดส่วนหนึ่งเฉพาะที่มีประสบการณ์โหลดในระดับสูง
Development and Testing:
เมื่อทั้งหมดของระบบอยู่ในที่เดียวกัน การพัฒนาและการทำการทดสอบจะมีความเรียบง่ายในช่วงต้น แต่อย่างไรก็ตาม เมื่อระบบได้โตขึ้นการจัดการ codebase และการทำความเข้าใจการพึ่งพากันของระบบนั้นจะประสบกับความท้าทายเป็นอย่างสูง
Technology Stack:
โดยส่วนใหญ่จะใช้รูปแบบ single technology stack ในระบบ ซึ่งจะทำให้ยากขึ้นเมื่อมีการเริ่มใช้เทคโนโลยีใหม่ๆสำหรับส่วนที่เฉพาะเจาะจงในระบบ
การเปรียบเทียบ จาก Microservices มีอะไรบ้าง ?
Multiple Codebases:
ในรูปแบบสถาปัตยกรรม microservices นั้น แอพพลิเคชั่นได้ถูกย่อยขนาดให้เล็กลง มีการแบ่ง service เป้นอิสระต่อกันโดยแต่ละ service จะมี codebase เป็นของตนเอง
Loosely Coupled:
Services จะถูกเชื่อมโยงกันแบบหลวมๆ และมีการติดต่อสื่อสารกันผ่าน API ที่ถูกระบุอย่างชัดเจน การเปลี่ยนแปลงใน service ใดๆอันหนึ่งจะไม่ค่อยส่งผลกระทบต่ออันอื่น
Deployment:
ในแต่ละ microservice สามารถ deployed ได้อย่างอิสระ นั่นหมายความว่า เราสามารถทำการอัปเดท ดีพลอย และ สเกล ในแต่ละส่วนของแอปพลิเคชั่นโดยไม่ส่งผลกระทบต่อระบบทั้งหมด
Scaling:
ในแต่ละ services สามารถทำการสเกลได้อย่างอิสระไม่ขึ้นต่อกัน บนพื้นฐานของความต้องการต่างๆ ซึ่งมันทำให้เกิดประสิทธิภาพในการใช้ทรัพยากรณ์ based on demand. This allows more efficient use of resources.
Development and Testing:
การพัฒนาสามารถทำได้อย่างซับซ้อนตั้งแต่แรกเริ่ม จากที่มีการคาบเกี่ยวของการจัดการหลายๆ service พร้อมกันและในแต่ละการปฏิสัมพันธ์ อย่างไรก็ตาม ในแต่ละ Service นั้นสามารถพัฒนา ทดสอบ และ ดีพลอยได้อย่างอิสระ นั่นเป็นการเพิ่มความรวดเร็วสำหรับการพัฒนาในระยะยาว
Technology Stack:
ในแต่ละ microservice สามารถใช้เทคโนโลยีที่แตกต่างกันได้ โดยใช้สแตกที่ดีที่สุดสำคัญความต้องการเหล่านั้นอย่างเฉพาะเจาะจง ในความยืดหยุ่นนี้สามารถทำให้ใช้งานเครื่องมือที่เหมาะสม หรือภาษาที่แตกต่างกันในแต่ละ service.
NEXT READ : เมื่อไหร่ ที่เราควรให้ Monolithic Architecture ?
ซึ่งงานพัฒนาแพลตฟอร์มของ Daywork ระบบจัดหางานออนไลน์ ที่มีประสิทธิภาพสูงของไทย ก็ได้ใช้เทคนิคแบบ Monolithic Architecture ซึ่งทำให้ Scale งานได้ไว แต่ข้อเสียคือหากระบบล่มมันจะทำให้ล่มทั้งระบบ ทางบริษัทจึงได้ให้ความสำคัญกับ Server ที่เสถียรมีประสิทธิภาพสูง และ รองรับการใช้งานหนักๆได้