บทช่วยสอนไมโครเซอร์วิส: คืออะไร Archiการสอนและตัวอย่าง
⚡ สรุปอย่างชาญฉลาด
ไมโครเซอร์วิส (Microservices) คือรูปแบบสถาปัตยกรรมที่เน้นการให้บริการ โดยแอปพลิเคชันจะถูกสร้างขึ้นเป็นชุดของหน่วยบริการขนาดเล็กที่ทำงานอย่างอิสระ เอกสารนี้จะอธิบายความแตกต่างระหว่างสถาปัตยกรรมแบบโมโนลิธ (Monolithic) และไมโครเซอร์วิส ความท้าทาย การเปรียบเทียบกับ SOA เครื่องมือที่นิยมใช้ และแนวปฏิบัติที่ดีที่สุด
ไมโครเซอร์วิส คืออะไร?
Microservices เป็นรูปแบบสถาปัตยกรรมที่เน้นบริการ โดยที่แอปพลิเคชันถูกสร้างขึ้นเป็นชุดของหน่วยบริการอิสระที่เล็กที่สุดต่างๆ วิศวกรรมซอฟต์แวร์ แนวทางที่มุ่งเน้นการแยกแอปพลิเคชันออกเป็นโมดูลฟังก์ชันเดียวที่มีอินเทอร์เฟซที่กำหนดไว้อย่างชัดเจน โมดูลเหล่านี้สามารถนำไปใช้งานและดำเนินการได้อย่างอิสระโดยทีมงานขนาดเล็กที่เป็นเจ้าของวงจรชีวิตทั้งหมดของบริการ
คำว่า “ไมโคร” หมายถึงขนาดของไมโครเซอร์วิส ซึ่งต้องสามารถจัดการได้โดยทีมพัฒนาเพียงทีมเดียว (5 ถึง 10 คน) ในวิธีการนี้ แอปพลิเคชันขนาดใหญ่จะถูกแบ่งออกเป็นหน่วยย่อยที่เล็กที่สุดและทำงานได้อย่างอิสระ
เสาหินคืออะไร Archiเทคเจอร์?
อธิบายง่ายๆ ก็คือ สถาปัตยกรรมแบบโมโนลิธ (Monolithic architecture) เปรียบเสมือนภาชนะขนาดใหญ่ที่รวบรวมส่วนประกอบซอฟต์แวร์ทั้งหมดของแอปพลิเคชันไว้ในแพ็กเกจเดียว ลองมาพิจารณาตัวอย่างของร้านค้าออนไลน์ในบริบทของสถาปัตยกรรมแบบโมโนลิธกัน
เป็นเสาหิน Archiการสอนแอปพลิเคชันอีคอมเมิร์ซ
ในแอปพลิเคชันอีคอมเมิร์ซ มีคุณสมบัติมาตรฐานบางอย่าง เช่น การค้นหา Revการดูและให้คะแนน และการชำระเงิน คุณสมบัติเหล่านี้ลูกค้าสามารถเข้าถึงได้ผ่านเบราว์เซอร์หรือแอป เมื่อนักพัฒนาเว็บไซต์อีคอมเมิร์ซปรับใช้แอปพลิเคชัน มันจะเป็นหน่วยแบบโมโนลิธเดียว โค้ดสำหรับคุณสมบัติต่างๆ เช่น การค้นหา Revการดูและให้คะแนน รวมถึงการชำระเงิน อยู่บนเซิร์ฟเวอร์เดียวกัน หากต้องการขยายขนาดแอปพลิเคชัน คุณจำเป็นต้องเรียกใช้งานแอปพลิเคชันเหล่านี้หลายอินสแตนซ์ (หลายเซิร์ฟเวอร์)
ไมโครเซอร์วิสคืออะไร Archiเทคเจอร์?
ไมโครเซอร์วิส Archiเทคเจอร์ เป็นรูปแบบการพัฒนาสถาปัตยกรรมที่อนุญาตให้สร้างแอปพลิเคชันเป็นชุดของบริการอิสระขนาดเล็กที่พัฒนาขึ้นสำหรับโดเมนธุรกิจ เป็นรูปแบบหนึ่งของสถาปัตยกรรมรูปแบบโครงสร้างที่ช่วยจัดเรียงแอปพลิเคชันเป็นชุดบริการที่เชื่อมโยงกันอย่างหลวมๆ ไมโครเซอร์วิส Architecture ประกอบด้วยบริการที่ละเอียดและโปรโตคอลแบบน้ำหนักเบา
ลองพิจารณาตัวอย่างแอปพลิเคชันอีคอมเมิร์ซที่พัฒนาด้วยสถาปัตยกรรมไมโครเซอร์วิส ในตัวอย่างสถาปัตยกรรมไมโครเซอร์วิสนี้ ไมโครเซอร์วิสแต่ละตัวจะมุ่งเน้นไปที่ความสามารถทางธุรกิจเพียงอย่างเดียว เช่น การค้นหา การให้คะแนน และ... Revview และ payment ต่างก็มีอินสแตนซ์ (เซิร์ฟเวอร์) ของตนเอง และสื่อสารกัน
Microservices Archiเทคเจอร์
ในเสาหิน Archiในสถาปัตยกรรมแบบเดิม ส่วนประกอบทั้งหมดจะรวมกันเป็นโมดูลเดียว แต่ในสถาปัตยกรรมไมโครเซอร์วิส Archiในโครงสร้างแบบไมโครเซอร์วิส ระบบจะกระจายออกเป็นโมดูลย่อย (ไมโครเซอร์วิส) ซึ่งสื่อสารกัน ดังแสดงในตัวอย่างไมโครเซอร์วิสข้างต้น
การสื่อสารระหว่างไมโครเซอร์วิสเป็นการสื่อสารไร้สัญชาติซึ่งคำขอและการตอบสนองแต่ละคู่มีความเป็นอิสระ ดังนั้นไมโครเซอร์วิสจึงสามารถสื่อสารได้อย่างง่ายดาย ในไมโครเซอร์วิส Archiโครงสร้างข้อมูลเป็นแบบกระจายศูนย์ โดยแต่ละไมโครเซอร์วิสจะมีแหล่งเก็บข้อมูลแยกต่างหาก
ไมโครเซอร์วิสกับเสาหิน Archiเทคเจอร์
| Microservices | เป็นเสาหิน Archiเทคเจอร์ |
|---|---|
| ทุกหน่วยของแอปพลิเคชันทั้งหมดควรมีขนาดเล็กที่สุด และควรจะสามารถบรรลุเป้าหมายทางธุรกิจที่เฉพาะเจาะจงได้ | ใช้โค้ดฐานเดียวสำหรับทุกเป้าหมายทางธุรกิจ |
| การเริ่มต้นใช้งานบริการค่อนข้างรวดเร็ว | การเริ่มต้นใช้งานบริการใช้เวลานานขึ้น |
| การแยกปัญหาทำได้ง่าย แม้ว่าบริการหนึ่งจะหยุดทำงาน บริการอื่นๆ ก็ยังคงทำงานต่อไปได้ | การแยกสาเหตุของปัญหานั้นทำได้ยาก หากฟังก์ชันใดฟังก์ชันหนึ่งทำงานผิดปกติ ระบบทั้งหมดก็จะล่มไปด้วย เพื่อแก้ไขปัญหานี้ แอปพลิเคชันจะต้องถูกสร้างใหม่ ทดสอบใหม่ และติดตั้งใช้งานใหม่ |
| ไมโครเซอร์วิสทั้งหมดควรมีการเชื่อมโยงแบบหลวมๆ เพื่อให้การเปลี่ยนแปลงที่เกิดขึ้นในไมโครเซอร์วิสหนึ่งไม่ส่งผลกระทบต่อไมโครเซอร์วิสอื่นๆ | สถาปัตยกรรมแบบโมโนลิธิกนั้นมีการเชื่อมโยงกันอย่างแน่นหนา การเปลี่ยนแปลงในโมดูลหนึ่งของโค้ดจะส่งผลกระทบต่อโมดูลอื่นๆ |
| ธุรกิจต่างๆ สามารถจัดสรรทรัพยากรเพิ่มเติมให้กับบริการที่สร้างผลตอบแทนจากการลงทุน (ROI) ที่สูงกว่าได้ | เนื่องจากบริการต่างๆ ไม่ได้แยกออกจากกัน การจัดสรรทรัพยากรเฉพาะรายบุคคลจึงเป็นไปไม่ได้ |
| ควรจัดสรรทรัพยากรฮาร์ดแวร์เพิ่มเติมให้กับบริการที่ใช้งานบ่อย ในตัวอย่างอีคอมเมิร์ซข้างต้น ผู้ใช้ตรวจสอบรายการสินค้าและค้นหามากกว่าการชำระเงิน ดังนั้นจึงควรจัดสรรทรัพยากรเพิ่มเติมให้กับไมโครเซอร์วิสสำหรับการค้นหาและแสดงรายการสินค้า | การปรับขนาดแอปพลิเคชันเป็นสิ่งที่ท้าทายและสิ้นเปลืองอีกด้วย |
| ไมโครเซอร์วิสจะมีความสม่ำเสมอและพร้อมใช้งานอยู่เสมอ | เครื่องมือพัฒนาซอฟต์แวร์จะทำงานหนักเกินไป เนื่องจากกระบวนการต้องเริ่มต้นใหม่ตั้งแต่ต้น |
| ข้อมูลถูกรวมศูนย์ ทำให้ไมโครเซอร์วิสแต่ละตัวสามารถเลือกใช้โมเดลข้อมูลที่เหมาะสมที่สุดสำหรับความต้องการของตนได้ | ข้อมูลถูกรวมศูนย์ |
| ทีมขนาดเล็กที่เน้นเฉพาะเรื่อง การพัฒนาแบบคู่ขนานและรวดเร็วยิ่งขึ้น | จำเป็นต้องมีทีมงานขนาดใหญ่และความพยายามในการบริหารจัดการทีมอย่างมาก |
| การเปลี่ยนแปลงโมเดลข้อมูลของไมโครเซอร์วิสหนึ่งจะไม่ส่งผลกระทบต่อไมโครเซอร์วิสอื่นๆ | การเปลี่ยนแปลงรูปแบบข้อมูลส่งผลกระทบต่อฐานข้อมูลทั้งหมด |
| ทำงานร่วมกับไมโครเซอร์วิสอื่นๆ โดยใช้ส่วนต่อประสานที่กำหนดไว้อย่างชัดเจน | ไม่สามารถใช้ได้. |
| ไมโครเซอร์วิสทำงานบนหลักการที่เน้นที่ผลิตภัณฑ์ ไม่ใช่โครงการ | ให้ความสำคัญกับโครงการโดยรวม |
| ไม่มีการพึ่งพาข้ามระหว่างฐานโค้ด คุณสามารถใช้เทคโนโลยีที่แตกต่างกันสำหรับไมโครเซอร์วิสที่แตกต่างกันได้ | ฟังก์ชันหรือโปรแกรมหนึ่งขึ้นอยู่กับฟังก์ชันหรือโปรแกรมอื่น |
ความท้าทายด้านไมโครเซอร์วิส
- ไมโครเซอร์วิสต้องพึ่งพาซึ่งกันและกัน และจะต้องสื่อสารกัน
- เมื่อเปรียบเทียบกับระบบเสาหิน มีบริการตรวจสอบที่พัฒนาขึ้นโดยใช้ระบบที่แตกต่างกัน การเขียนโปรแกรมภาษา.
- เนื่องจากเป็นระบบแบบกระจาย จึงเป็นโมเดลที่มีความซับซ้อนในตัว
- บริการต่างๆ จะมีกลไกการทำงานแยกกัน ส่งผลให้ต้องใช้หน่วยความจำจำนวนมากสำหรับข้อมูลที่ไม่มีโครงสร้าง
- การบริหารจัดการที่มีประสิทธิภาพและการทำงานเป็นทีมเป็นสิ่งจำเป็นในการป้องกันปัญหาที่ลุกลามเป็นวงกว้าง
- การจำลองปัญหาจะเป็นเรื่องยาก เมื่อปัญหานั้นหายไปในเวอร์ชันหนึ่ง แต่กลับมาปรากฏในเวอร์ชันล่าสุด
- การใช้งานแบบแยกอิสระนั้นซับซ้อนขึ้นเมื่อใช้ไมโครเซอร์วิส
- สถาปัตยกรรมไมโครเซอร์วิสทำให้มีภาระการดำเนินงานมากมาย
- การจัดการแอปพลิเคชันจะทำได้ยากขึ้นเมื่อมีการเพิ่มบริการใหม่ ๆ เข้าสู่ระบบ
- จำเป็นต้องใช้ผู้เชี่ยวชาญที่มีทักษะหลากหลายสาขาเพื่อสนับสนุนไมโครเซอร์วิสที่กระจายตัวอย่างไม่เป็นเนื้อเดียวกัน
- ไมโครเซอร์วิสมีค่าใช้จ่ายสูง เนื่องจากคุณจำเป็นต้องรักษาพื้นที่เซิร์ฟเวอร์ที่แตกต่างกันสำหรับงานทางธุรกิจที่แตกต่างกัน
SOA กับไมโครเซอร์วิส
บริการ SOA จะถูกดูแลรักษาภายในองค์กรโดยรีจิสทรี ซึ่งทำหน้าที่เหมือนรายการในไดเร็กทอรี แอปพลิเคชันจำเป็นต้องค้นหาบริการในรีจิสทรีและเรียกใช้บริการ กล่าวอีกนัยหนึ่งคือ SOA ก็เหมือนกับวงออเคสตราที่ศิลปินแต่ละคนใช้เครื่องดนตรีของตนแสดง โดยมีผู้กำกับเพลงคอยให้คำแนะนำแก่ทุกคน
ในทางกลับกัน ไมโครเซอร์วิสเป็นรูปแบบหนึ่งของสถาปัตยกรรมเชิงบริการ (Service-Oriented Architecture หรือ SOA) โดยที่แอปพลิเคชันถูกสร้างขึ้นเป็นชุดของบริการขนาดเล็กต่างๆ แทนที่จะเป็นซอฟต์แวร์หรือแอปพลิเคชันเดียว ไมโครเซอร์วิสเปรียบเสมือนคณะนักเต้นที่แต่ละคนมีความเป็นอิสระและรู้ว่าตนเองต้องทำอะไร ดังนั้นหากพวกเขาทำผิดพลาดในบางท่า พวกเขาก็รู้วิธีที่จะกลับมาสู่ลำดับที่ถูกต้อง นี่คือการเปรียบเทียบโดยละเอียดระหว่าง SOA และไมโครเซอร์วิส
| พารามิเตอร์ | SOA | Microservices |
|---|---|---|
| ประเภทการออกแบบ | ใน SOA ส่วนประกอบซอฟต์แวร์จะถูกเปิดเผยสู่โลกภายนอกเพื่อใช้ในรูปแบบของบริการ | Micro Service เป็นส่วนหนึ่งของ SOA เป็นการดำเนินการตาม SOA |
| การอยู่ที่ | หน่วยธุรกิจขึ้นอยู่กับ | พวกเขาเป็นอิสระจากกัน |
| ขนาดของซอฟต์แวร์ | ขนาดไฟล์ซอฟต์แวร์ใหญ่กว่าซอฟต์แวร์ทั่วไปทุกชนิด | ขนาดของซอฟต์แวร์ในสถาปัตยกรรมไมโครเซอร์วิสจะมีขนาดเล็กเสมอ |
| กองเทคโนโลยี | สแต็คเทคโนโลยีต่ำกว่าเมื่อเทียบกับ Microservice | สแต็กเทคโนโลยีไมโครเซอร์วิสอาจมีขนาดใหญ่มาก |
| ลักษณะของแอปพลิเคชัน | มีลักษณะเป็นเนื้อเดียวกันทั้งก้อน | เป็นเทคโนโลยี Full Stack |
| อิสระและมุ่งเน้น | แอปพลิเคชัน SOA ถูกสร้างขึ้นเพื่อทำงานทางธุรกิจหลายอย่าง | พวกเขาถูกสร้างขึ้นเพื่อดำเนินงานทางธุรกิจเดียว |
| การใช้งาน | กระบวนการติดตั้งใช้งานนั้นใช้เวลานาน | การปรับใช้ทำได้ตรงไปตรงมาและใช้เวลาน้อยลง |
| ลดค่าใช้จ่าย | คุ้มค่ากว่า | Less คุ้มค่า |
| scalability | Less เมื่อเทียบกับไมโครเซอร์วิส | ปรับขนาดได้สูง |
| ตรรกะทางธุรกิจ | ส่วนประกอบตรรกะทางธุรกิจจะถูกจัดเก็บไว้ภายในโดเมนบริการเดียว โดยใช้โปรโตคอลการสื่อสารแบบง่าย (HTTP กับ XML หรือ JSON) และ API ที่ขับเคลื่อนด้วย SDK/ไคลเอ็นต์ | ตรรกะทางธุรกิจสามารถกระจายอยู่ข้ามโดเมนได้ โดยมีเลเยอร์คล้าย Service Bus ระดับองค์กรคั่นระหว่างบริการต่างๆ (มิดเดิลแวร์) |
เครื่องมือไมโครเซอร์วิส
1) Wiremock: การทดสอบไมโครเซอร์วิส
WireMock เป็นไลบรารีที่ยืดหยุ่นสำหรับการสร้าง stub และ mocking เว็บเซอร์วิส สามารถกำหนดค่าการตอบสนองที่ส่งคืนโดย HTTP API เมื่อได้รับคำขอเฉพาะ นอกจากนี้ยังใช้สำหรับการทดสอบ Microservices อีกด้วย
ดาวน์โหลดลิงค์: http://wiremock.org/
2) นักเทียบท่า
Docker เป็นโครงการโอเพนซอร์สที่ช่วยให้เราสร้าง ปรับใช้ และเรียกใช้แอปพลิเคชันโดยใช้คอนเทนเนอร์ โดยการใช้คอนเทนเนอร์ นักพัฒนาสามารถเรียกใช้แอปพลิเคชันได้ในรูปแบบแพ็กเกจเดียว ทำให้คุณสามารถจัดส่งไลบรารีและส่วนประกอบอื่นๆ ที่จำเป็นในแพ็กเกจเดียวได้
ดาวน์โหลดลิงค์: https://www.docker.com/
3) ฮิสตริก
Hystrix เป็นระบบที่ทนต่อความผิดพลาด Java เครื่องมือนี้ออกแบบมาเพื่อแยกจุดเข้าถึงบริการ ระบบ และไลบรารีของบุคคลที่สามจากระยะไกลในสภาพแวดล้อมแบบกระจายศูนย์ เช่น ไมโครเซอร์วิส ช่วยปรับปรุงระบบโดยรวมโดยการแยกบริการที่ล้มเหลวและป้องกันผลกระทบต่อเนื่องจากการล้มเหลว
ดาวน์โหลดลิงค์: https://github.com/Netflix/Hystrix
แนวทางปฏิบัติที่ดีที่สุดของไมโครเซอร์วิส Archiเทคเจอร์
- แยกจัดเก็บข้อมูลสำหรับแต่ละไมโครเซอร์วิส
- รักษาระดับความสมบูรณ์ของโค้ดให้ใกล้เคียงกัน
- แยกการสร้างสำหรับแต่ละไมโครเซอร์วิส
- ควรปฏิบัติต่อเซิร์ฟเวอร์แต่ละตัวเสมือนว่าไม่มีสถานะ (stateless) เสมอ



