What Are Microservices? (ไมโครเซอร์วิสคืออะไร)

อย่างที่ ได้แนะนำไว้ใน Chapter 1 microservices เป็นสถาปัตยกรรมแบบ service-oriented ชนิดหนึ่งที่เน้นเรื่องความสามารถในการ deploy ได้อย่างอิสระ Independent deployability หมายความว่าคุณสามารถเปลี่ยนแปลงไมโครเซอร์วิสตัวหนึ่ง deploy ไมโครเซอร์วิสตัวนั้น และปล่อยฟังก์ชันการทำงานของมันให้ผู้ใช้ปลายทางได้ โดยไม่ต้องให้ไมโครเซอร์วิสตัวอื่นเปลี่ยนแปลงตาม การได้ประโยชน์สูงสุดจากสถาปัตยกรรมไมโครเซอร์วิสหมายถึงการยอมรับแนวคิดนี้ โดยปกติแล้วไมโครเซอร์วิสแต่ละตัวจะถูก deploy เป็น process หนึ่ง โดยสื่อสารกับไมโครเซอร์วิสตัวอื่นผ่านโปรโตคอลเครือข่ายบางรูปแบบ เป็นเรื่องปกติที่จะ deploy หลาย instance ของไมโครเซอร์วิสตัวหนึ่ง อาจเพื่อรองรับสเกลที่มากขึ้น หรือเพื่อปรับปรุงความทนทานด้วยการมีความซ้ำซ้อน (redundancy)

เพื่อ ให้ได้ independent deployability เราต้องมั่นใจว่าเมื่อเปลี่ยนแปลงไมโครเซอร์วิสตัวหนึ่ง เราจะไม่ทำลายปฏิสัมพันธ์กับไมโครเซอร์วิสตัวอื่น สิ่งนี้ต้องการให้อินเทอร์เฟซของเรากับไมโครเซอร์วิสตัวอื่นมั่นคง และการเปลี่ยนแปลงต้องทำในแบบที่เข้ากันได้ย้อนหลัง (backward-compatible) Information hiding ซึ่งผมขยายความไว้ใน Chapter 2 อธิบายแนวทางที่ข้อมูลให้มากที่สุดเท่าที่จะเป็นไปได้ (โค้ด ข้อมูล) ถูกซ่อนไว้เบื้องหลังอินเทอร์เฟซ คุณควรเปิดเผยผ่าน service interface ของคุณเฉพาะสิ่งที่จำเป็นน้อยที่สุดเพื่อตอบสนองผู้บริโภคของคุณ ยิ่งคุณเปิดเผยน้อยเท่าไร ก็ยิ่งง่ายที่จะมั่นใจว่าการเปลี่ยนแปลงที่คุณทำจะเข้ากันได้ย้อนหลัง Information hiding ยังทำให้เราสามารถเปลี่ยนแปลงทางเทคโนโลยีภายในขอบเขตไมโครเซอร์วิสได้โดยไม่กระทบผู้บริโภค

หนึ่ง ในวิธีหลักที่เราใช้เพื่อให้ได้ independent deployability คือการ ซ่อนฐานข้อมูล ถ้าไมโครเซอร์วิสตัวหนึ่งต้องเก็บ state ไว้ในฐานข้อมูล สิ่งนี้ควรถูกซ่อนจากโลกภายนอกทั้งหมด ฐานข้อมูลภายในไม่ควรถูกเปิดเผยโดยตรงให้ผู้บริโภคภายนอกเห็น เพราะสิ่งนี้ทำให้เกิด coupling มากเกินไประหว่างทั้งสองฝ่าย ซึ่งบั่นทอน independent deployability โดยทั่วไป ให้หลีกเลี่ยงสถานการณ์ที่ไมโครเซอร์วิสหลายตัวเข้าถึงฐานข้อมูลเดียวกัน

ไมโครเซอร์วิส ทำงานได้ดีมากกับ domain-driven design (DDD) DDD ให้แนวคิดที่ช่วยให้เราหาขอบเขตไมโครเซอร์วิสของเราได้ โดยสถาปัตยกรรมที่ได้จะสอดคล้องกับ business domain สิ่งนี้มีประโยชน์อย่างมากในสถานการณ์ที่องค์กรกำลังสร้างทีมไอทีที่เน้นธุรกิจมากขึ้น ด้วยทีมที่โฟกัสไปที่ส่วนหนึ่งของ business domain ตอนนี้ทีมนั้นสามารถเป็นเจ้าของไมโครเซอร์วิสที่ตรงกับส่วนนี้ของธุรกิจได้