อ่านหนังสือเจอเรื่องของ Distributed Monolith !!
มักจะมาจากระบบ Monolith ที่มีขนาดใหญ่และซับซ้อน
ก็เลยไปดูว่า มันเป็นมาอย่างไร
เมื่อรู้และเข้าใจ ก็ถึงบางอ้อกันเลยทีเดียว
เพราะว่าเจอเยอะมาก ๆ

มาดูเรื่องราวกันหน่อย
เริ่มจากระบบงานมีการทำงานต่าง ๆ ด้วยกัน มี database เดียวกัน
จากนั้นทำการแยกออกเป็น class หรือ file การทำงานตามหน้าที่รับผิดชอบ
เช่น

  • Entity หรือ model สำหรับติดต่อกับ database
  • Service สำหรับส่วนของ business logic

แต่ละ Entity จะเชื่อมต่อหรือมีความสัมพันธ์กันแบบโยงไปทั่ว
ส่วนของ service ก็ใช้งาน Entity และเรียกใช้งาน service อื่น ๆ ด้วยเช่นกัน
เป็นการเรียกใช้แบบเรียกผ่าน method ต่าง ๆ นั่นเอง

เมื่อเวลาผ่านไป เราพบว่าการดูแลรักษาและพัฒนายากมาก ๆ

เราจึงพยายามหาวิธีการแก้ไขปัญหา
วิธีการที่มักจะใช้คือ การแยกการทำงานออกมาเป็นส่วนย่อย ๆ
ซึ่งก็คิดง่าย ๆ คือ เรามี Entity และ Service อยู่แล้ว
ยกตัวอย่างเช่น
UserService, OrderService และ ProductService และอื่น ๆ อีกมากมาย

ดังนั้นเราจึงทำการแยก class/file ต่าง ๆ เหล่านี้ออกมาเป็น service เล็ก ๆ
แต่ service เหล่านั้นยังต้องเรียกใช้งาน service หรือ entity อื่น ๆ อีก
ดังนั้นจึงต้องเรียกใช้งาน
จากเดิมที่เป็นเรียกผ่าน method
ก็เปลี่ยนมาเป็นผ่าน network (remote call) เช่น HTTP protocol เป็นต้น

ซึ่งแบบนี้เราจะเรียกว่า Distributed Monolith
คำถามคือ มันดีกว่าเดิมอย่างไรนะ ?

จากนั้นถ้ามีบาง service ถูกใช้เยอะ ๆ
เราก็จะสร้าง core service ขึ้นมา เพื่อ reuse นั่นเอง
ทำให้กลายเป็น service ที่ติดคอ
หรือสร้างปัญหาต่อไปอีกไหมนะ ?

และเราก็ทำแบบนี้ซ้ำแล้วซ้ำเล่า
แล้วก็บอกว่า ยิ่งทำยิ่งสร้างปัญหา
เอาวิธีการใด ๆ มาใช้ก็ไม่ได้หรอกนะ
ถ้าเรายังไม่ปรับไม่เปลี่ยนวิธีการคิด !!