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