Governance (การกำกับดูแล)

กฎเกณฑ์และเทคนิคการกำกับดูแลส่วนใหญ่ใน microservices มุ่งแก้ปัญหาความเสี่ยงทั่วไปที่เรากล่าวถึงในหัวข้อก่อนหน้า การกำกับดูแลในสถาปัตยกรรม microservices ส่วนใหญ่เกี่ยวกับการป้องกันไม่ให้โครงสร้างเสื่อมสภาพ (structural decay)

สิ่งแรกและสำคัญที่สุด สถาปนิกควรใช้การกำกับดูแลเพื่อตรวจสอบและควบคุมปริมาณ static และ dynamic coupling ระหว่าง service จำได้ไหมจาก Chapter 7 ว่า static coupling เกิดขึ้นเมื่อ microservice แชร์ custom หรือ third-party library ร่วมกัน รวมถึงในรูปแบบสัญญา (contract) เมื่อ service ต้องสื่อสารกัน สัญญาเหล่านี้สำคัญมากเป็นพิเศษ แม้สถาปนิกจะใช้โปรโตคอลการสื่อสารแบบ asynchronous เพื่อ decouple service กัน ทางไดนามิก ได้ แต่พวกมันก็อาจยังคงถูก couple แบบ static ผ่านสัญญาที่ใช้ระหว่างกันอยู่ดี (ไม่ว่าจะสื่อสารแบบไหนก็ตาม)

software bill of materials, deployment script และเครื่องมือจัดการ dependency ช่วยให้สถาปนิกเข้าใจและกำกับดูแล จำนวน artifact ที่แชร์กันระหว่าง service ได้ดีขึ้น แม้เราจะไม่สามารถระบุได้ชัดเจนว่า static coupling มากแค่ไหนถึงจะ มากเกินไป แต่เราแนะนำให้พยายามลด coupling ระหว่าง service ให้น้อยที่สุด

การกำกับดูแล dynamic coupling ยากกว่าการกำกับดูแล static coupling มาก การเก็บ metric ที่เหมาะสมต้องใช้ความคิดสร้างสรรค์ และความสม่ำเสมอ เทคนิคการกำกับดูแลที่พบบ่อยอย่างหนึ่งคือใช้ log เพื่อระบุการเรียกไปยัง service อื่น เมื่อ service เรียกไปยัง service ภายในหรือ third-party service เหล่านั้นจะบันทึกการโต้ตอบพร้อมข้อมูลว่า service ไหนถูกเรียก ใช้โปรโตคอลอะไร และอื่น ๆ สถาปนิกสามารถวิเคราะห์ข้อมูลนี้ผ่าน fitness function เพื่อเข้าใจระดับ dynamic coupling ทั่วทั้ง microservices ecosystem ได้ดีขึ้น อย่างไรก็ตาม แนวทางนี้ต้องอาศัยการกำกับดูแลที่เข้มงวดเพื่อให้มั่นใจว่า แต่ละ service เปิดเผยข้อมูลนี้ผ่าน logging อย่างสอดคล้องกัน custom library (เช่นไฟล์ JAR หรือ DLL) เป็นวิธีหนึ่ง ในการมี API ที่สอดคล้องกันซึ่งทุก service สามารถ bind เข้าไปตอน compile time เพื่อให้แน่ใจว่า logging สอดคล้องกัน

อีกวิธีหนึ่งในการเก็บ dynamic coupling metric ใน microservices คือผ่าน registry entry เมื่อ instance แรกของ service เริ่มทำงาน service นั้นจะลงทะเบียนการเรียกระหว่าง service ของมันผ่านสัญญาบางอย่าง (เช่น JSON) ไปยัง custom configuration service หรือ configuration server อย่าง Apache ZooKeeper สถาปนิกสามารถ query configuration server เพื่อดูแผนที่การเรียกระหว่าง service ทั้งหมดทั่วทั้ง microservices ecosystem ซึ่งพวกเขาสามารถนำไปใช้กำกับดูแลและควบคุมปริมาณการสื่อสารระหว่าง service ได้