Topology (Topology)
topology พื้นฐานของ service-based architecture เป็นโครงสร้างแบบ macro-layered ที่กระจายตัว ประกอบด้วย user interface ที่ deploy แยกต่างหาก, service ที่ deploy แยก, ทำงานระยะไกล และมี granularity หยาบ (coarse-grained) และ (ถ้าเลือกได้) ฐานข้อมูล monolithic
แม้ว่า Figure 14-1 จะแสดง topology พื้นฐาน ของ style นี้ แต่มันสามารถแตกต่างกันได้มาก รวมถึงการใช้ UI แยกและฐานข้อมูลแยกด้วย บทนี้จะอธิบายรูปแบบต่าง ๆ ของ topology เหล่านี้อย่างละเอียด
service ใน architectural style นี้มักแทน domain หรือ subdomain เฉพาะของระบบ จึงถูกเรียกว่า domain service domain service โดยทั่วไปมี granularity หยาบและแทนฟังก์ชันการทำงานบางส่วนของระบบ (เช่น order fulfillment หรือ order shipping) พวกมันมักเป็นอิสระจากกันและ deploy แยกกัน service มักถูก deploy คล้ายกับแอปพลิเคชัน monolithic ทั่วไป จึงไม่จำเป็นต้อง containerize (แม้ว่าการ deploy domain service ใน container เช่น Docker หรือ Kubernetes ก็เป็นตัวเลือกที่ทำได้เช่นกัน) เมื่อใช้ฐานข้อมูล monolithic เดียว สถาปนิกควรพยายามลดจำนวน domain service ให้น้อยที่สุด (เราแนะนำไม่เกิน 12 ตัว) เพื่อหลีกเลี่ยงปัญหาด้าน change control, scalability และ fault tolerance
Figure 14-1. Topology พื้นฐานของ service-based architectural style
โดยทั่วไป domain service แต่ละตัวจะ deploy เป็น instance เดียว อย่างไรก็ตาม ขึ้นอยู่กับความต้องการด้าน scalability, fault tolerance และ throughput ของระบบ สถาปนิกบางครั้งก็สร้าง instance หลายตัวของ domain service หนึ่งตัว การทำเช่นนี้มักต้องการความสามารถด้าน load balancing บางอย่างระหว่าง UI กับ domain service เพื่อให้ UI ถูกส่งไปยัง service instance ที่พร้อมใช้งานและทำงานปกติ
service ถูกเข้าถึงจาก UI ระยะไกลผ่าน remote access protocol โดยทั่วไปคือ REST ความเป็นไปได้อื่น ๆ ได้แก่ messaging, remote procedure call (RPC), API layer พร้อม proxy หรือ gateway หรือแม้แต่ SOAP อย่างไรก็ตาม ในกรณีส่วนใหญ่ UI จะมี service locator pattern ฝังอยู่ ทำให้สามารถเข้าถึง service ได้โดยตรง service locator pattern ก็สามารถฝังอยู่ใน API Gateway หรือ proxy ได้เช่นกัน
service-based architecture มักใช้ฐานข้อมูล monolithic กลางที่แชร์กัน วิธีนี้ทำให้ service สามารถใช้ SQL query และ join ได้เหมือนกับ traditional monolithic layered architecture ทั่วไป เนื่องจากจำนวน domain service ที่พบใน architectural style นี้มักมีไม่มาก การใช้ database connection จนหมดจึงแทบไม่ใช่ปัญหา อย่างไรก็ตาม การจัดการการเปลี่ยนแปลงฐานข้อมูลอาจเป็นความท้าทายได้ “Data Topologies” อธิบายเทคนิคสำหรับการจัดการและควบคุมการเปลี่ยนแปลงฐานข้อมูลภายใน service-based architecture