ไมโครเซอร์วิสคืออะไร ?

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

สถาปัตยกรรมแบบก้อนเดียว

ก่อนที่จะไปทำความรู้จักไมโครเซอร์วิส เราต้องรู้สถาปัตกรรมแบบก้อนเดียวก่อนครับ จริง ๆ ผมอาจจะใช้คำผิดไปบ้างนะครับ แต่เอาเป็นว่าให้เราเข้าใจว่าตรงกันว่า Application ของเรานั้นถูกพัฒนาขึ้นมาและติดตั้งไปที่เครื่อง ๆ เดียว เช่น เราทำ Web Application ที่ต้องติดตั้งร่วมกับ PHP , MySQL , Nginx เป็นต้น

Web Application แบบนี้หากมีผู้ใช้งานจำนวนมากระบบก็จะรองรับได้จำนวนจำกัด วิธีการแก้ปัญหาคือเราอาจจะเพิ่ม Harddisk , RAM , CPU เพื่อให้สามารถทำงานได้ดีขึ้น และรองรับผู้ใช้งานได้จำนวนมากขึ้น และถ้าเราเพิ่มขนาดของ Hardware จนถึงขีดจำกัดแล้ว สิ่งที่จะทำเพิ่มคือการเพิ่มเครื่องและทำ Load balance โดยทำการคัดลอกตัว Code ให้เหมือนกันทุกเครื่อง

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

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

สถาปัตยกรรมแบบไมโครเซอร์วิส

สถาปัตยกรรมแบบไมโครเซอร์วิส คือ การออกแบบระบบ โครงสร้าง ให้เป็นเซอร์วิสที่เล็กที่สุดที่สามารถทำได้ แล้วแยกการพัฒนาแต่ละส่วนออกจากกันอย่างชัดเจน และเราจะทำการเชื่อมต่อระบบเข้าด้วยกันในรูปแบบของ API อาจจะเป็น HTTP โปรโตคอลในรูปแบบของ XML หรือ JSON

เมื่อเราพัฒนาแบบไมโครเซอร์วิสแล้วเราสามารถติดตั้งเซอร์วิสแยกจากกันคนละเครื่องได้เลย ทีนี้ถ้าเซอร์วิสไหนใช้งานหนักเราก็เพิ่มเฉพาะเครื่องนั้น ๆ หรือถ้า Code มีการเปลี่ยนแปลงเราก็แก้แค่ส่วนนั้น ๆ นอกจากนั้น ด้วยความที่แยกกันชัดเจนแบบนี้ ทำให้เราสามารถแบ่ง Code ออกเป็นโปรเจคย่อย ๆ และส่งให้แต่ละโปรเจคย่อยนั้นให้ทีมต่าง ๆ รับผิดชอดบได้

พอเป็นโปรเจคย่อยทีนี้การเพิ่มคนเข้ามาร่วมพัฒนาก็สามารถเรียนรู้ได้เร็ว เพราะไม่ต้องไปเรียนรูปทั้งหมดของ Code การปรับเปลี่ยนก็จะทำได้รวดเร็วและมีประสิทธิภาพมากขึ้น

เปรียบเทียบ

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

ควรใช้สถาปัตยกรรมแบบก้อนเดียว เมื่อ เป็นโครงการง่าย ๆ ไม่ซับซ้อน รองรับผู้ใช้งานจำนวนไม่มาก ทีมพัฒนาทีมเดียว (ทีมเล็ก ๆ) โปรเจคไม่ค่อยมีการอัพเดท ไม่เน้นงานเอกสาร

ควรใช้สถาปัตยกรรมแบบไมโครเซอร์วิส เมื่อ เป็นระบบที่รองรับคนใช้งานจำนวนมาก มีการพัฒนาต่อเนื่องในระยะยาว ระบบทำงานหลาย platform

สุดท้ายเราต้องเลือกสถาปัตยกรรมให้เหมาะกับงานของเรา จะทำให้เราสามารถปิดงานได้อย่างรวดเร็ว และมีประสิทธิภาพที่ยอดเยี่ยม ขอให้ทุกคนสนุกกับการเขียนโปรแกรมครับ