sketch-microservice
เพิ่งมีโอกาสแลกเปลี่ยนแนวคิดเรื่อง Microservice กันนิดหน่อย
ซึ่งเป็นเรื่องที่น่าสนใจมาก ๆ
โดยสิ่งที่ชอบคือ การกลับไปดูแนวคิดพื้นฐานของ Microservice
ว่ามันได้รับแรงบันดาลใจมาจากอะไรบ้าง ?
ซึ่งประกอบไปด้วย

  1. แนวคิดจาก Object-Oriented Programming
  2. แนวคิดจาก Conway’s Law
  3. แนวคิดจาก Unix design philosophy

มาดูในรายละเอียดกันนิดหน่อย

1. แนวคิดที่สำคัญมาก ๆ ของ Object-Oriented Programming คือ messaging

เป็นสิ่งที่ใช้ในการติดต่อสื่อสารระหว่างระบบ
ถ้าเป็น Class ก็คือการรับส่งข้อมูลระหว่าง method นั่นเอง
โดยข้อความที่ใช้สื่อสารกันนั้น
ไม่สามารถแก้ไขได้ หรือ ทำการแก้ไขก็จะไม่กระทบต่อระบบ
แต่ละระบบจะซ่อนสถานะของการทำงานเอาไว้
นั่นหมายความว่า
แต่ละระบบจะทำงานแยกจากกันชัดเจนไม่ผูกหรือขึ้นอยู่แก่กัน
หรือในแต่ละ process จะแยกทำงานกันอย่างอิสระนั่นเอง

ทำให้ Microservice นั้นทำงานแยกจากกันเป็นอิสระ
แม้ว่าจะอยู่ในเครื่อง server เดียวกันก็ตาม
แต่ละ service ก็แยกการทำงานออกจากกันชัดเจน
แต่ถ้าต้องการติดต่อกันก็ให้ผ่าน HTTP resource API
นั่นทำให้ service ไม่ผูกติดกันมากจนเกินไป
อีกทั้งทำให้การ deploy ระบบงานง่ายขึ้นอีกด้วย

2. Conway’s Law

ถ้าโครงสร้างขององค์กร หรือ การติดต่อสื่อสารขององค์กรเป็นอย่างไร
ระบบก็ถูกออกแบบและสร้างขึ้นมาตามนั้น !!
Microservice ก็เช่นเดียวกัน

โดย Microservice ที่ดี ควรจะถูกสร้างขึ้นมา
เพื่อแก้ไขปัญหาทางด้าน business
รวมทั้งเป็นสิ่งที่มีคุณค่าและคุ้มค่าต่อการลงทุนลงแรง
และในแต่ละทีมควรจะ

  • มีความสามารถที่หลากหลาย
  • ทำงานแบบ Cross-functional team
  • Autonomous

3. Unix design philosophy

แนวคิดหนึ่งที่เป็นหัวใจเลยก็คือ

Make each program do one thing well

เป็นที่มาของคำว่า Micro ใน Microservice นั่นเอง

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

Reference Website
http://martinfowler.com/articles/microservices.html
http://blogs.ugidotnet.org/luKa/archive/2015/05/10/the-3-inspiring-principles-of-microservices.aspx