ในการแบ่งปันเรื่อง Microservices design และ develop นั้น
มักจะแนะนำเสมอว่า เริ่มจาก modular ให้มันดี ๆ ก่อน (process เดียวกัน)
เริ่มด้วยการแบ่งการทำงานต่าง ๆ เป็น module หรือกลุ่มการทำงานก่อน
จากนั้นดูการติดต่อสื่อสารระหว่าง module ว่าเป็นอย่างไร ?
มันทำให้แต่ละ module ผูกมัดกันมากไปหรือไม่ ? (Tight coupling)
ดังนั้นในการทำ workshop จึงแนะนำหนึ่งแนวทางในการจัดการ module
และการติดต่อระหว่าง mnodule แบบไม่ผูกมัดกันมากนัก (Loose coupling)
เพื่อลดผลกระทบจากการแก้ไขใน module ต่าง ๆ ลง
หนึ่งในวิธีการที่แนะนำคือ นำแนวคิดของ Event-based เข้ามาช่วยงาน
หรือ Mediator pattern จาก design pattern นั่นเอง
แสดงดังรูป
อธิบายการทำงานคร่าว ๆ เป็นดังนี้
- เมื่อ module A ทำงานเรียบร้อยแล้ว ปกติจะต้องเป็นฝั่งที่เรียกใช้งาน module B เองต่อไป แต่ในแนวทางนี้ไม่ใช่
- module A ทำการสร้าง event ขึ้นมาจากนั้น publish ออกไป
- ทาง module B จะทำการสร้าง event handler สำหรับคอยรับ event type ที่ต้องการ
- เมื่อมี event ที่ต้องการเกิดขึ้นมา ทาง module B ก็จะทำงานต่อไปเองแบบอัตโนมัติ ทำให้ทั้งสอง module ไม่ผูกมัดกันมากนัก
- โดยทั้งสอง module ทำงานใน process เดียวกัน ดังนั้น event ก็จะอยู่ภายในนั่นเอง
- อีกอย่าง แนวคิดนี้มันก็เอื้อต่อการแยกในอนาคตอีกด้วย !!
ตัวอย่างของการพัฒนาจะมีดังนี้
- ใน Spring Boot มี EventPublisher
- ใน .Net มี MediatR
- ใน go มี Go-MediatR
ลองนำไปเล่นกันดูครับ เป็นอีกหนึ่งแนวคิดที่น่าสนใจ
Reference websites