จากการคุยเรื่องการนำแนวคิด Microservices
มาใช้ในการออกแบบและพัฒนาระบบงาน
มี issue ต่าง ๆ ที่คุยกันว่า
จำเป็นต้องทำความเข้าใจ และคิดวิธีการจัดการหรือแก้ไขปัญหาต่าง ๆ เหล่านั้น
เพื่อให้สามารถยังคงประโยชน์ของ Microservices ไว้
จึงทำการสรุปไว้นิดหน่อย
เรื่องที่ 1 การจัดการข้อมูลใน database
ตามแนวคิดแล้วนั้น แต่ละ service ต้องแยก database หรือที่จัดเก็บข้อมูล
ไม่มีการ share ระหว่าง service
ทำให้แต่ละ service เป็นอิสระแก่กัน
แต่ปัญหาที่ตามมาคือ
ถ้ามี service ที่ต้องใช้ข้อมูลเดียวกันแล้ว จะจัดการอย่างไร ?
ถ้ามีการเปลี่ยนแปลงข้อมูลใน service หนึ่ง
และ service อื่น ๆ จะได้รับข้อมูลนี้อย่างไร ?
จัดการความถูกต้องของข้อมูลอย่างไร ?
โดยวิธีการยังต้องทำให้แต่ละ service ต้องเป็นอิสระต่อไปนะ
การนำเอาแนวคิด messaging มาช่วยน่าจะดีขึ้นนะ !!
เรื่องที่ 2 การ composition services
แต่ละ service นั้นบ่อยครั้งต้องทำงานร่วมกัน
ดังนั้นเราจะจัดการอย่างไร ?
แน่นอนว่า แต่ละ service ยังคงเป็นอิสระแก่กัน
การทำงานแบบเดิม ๆ เช่น synchronous หรือเรียกต่อ ๆ กันไป
และรอรับ response ไม่น่าจะรอด !!
น่าจะมีวิธีอื่นที่ดีกว่าไหม ? เช่น
- ให้ผู้ใช้งานทำการร้อย flow การทำงานของแต่ละ service เอง
- นำแนวคิดของ Event sourcing มาช่วย
เรื่องที่ 3 Dependency hell !!
เป้าหมายของ Microservices นั้น
ต้องการให้แต่ละ service สามารถ deploy และ release ได้แบบอิสระ
ไม่ยืมจมูกคนอื่นหายใจ
ดังนั้นถ้าในแต่ละ service มี dependency เยอะ
ผลที่ตามมาคือ ประโยชน์ของ Microservices จะหมดไป !!
สิ่งที่ต้องคุยกันคือ
ในระบบงานมีการทำหรือสร้างพวก service dependency graph ขึ้นมาหรือไม่
เพื่อทำให้เรารู้ว่า dependency เป็นอย่างไรบ้าง ?
ดังนั้นในการจัดการควรต้องมองเรื่องของ versioning
รวมไปถึงเรื่องของ backward และ forward compatibility
โดยรวมแล้วนั้นเป้าหมายของ Microservices เพื่อแยกการทำงานแต่ละส่วนออกจากกัน
ให้แต่ละส่วนทำงานเป็นอิสระแก่กัน
ส่งผลให้การจัดการและดูแลง่ายขึ้น
ส่งผลให้การ deploy และ scaling ได้ง่ายขึ้น
แต่ก็แลกมาด้วยสิ่งต่าง ๆ จากข้างต้นที่ต้องจัดการ
เพื่อตอบคำถามต่าง ๆ ให้ได้ เช่น
- จะทำการจัดการข้อมูลที่ share กันระหว่าง service อย่างไร ?
- แต่ละ service จะปรับปรุง API หรือ interface อย่างไร โดยยังคงความเป็นอิสระของแต่ละ service ?
- ทำการจัดการเรื่อง security อย่างไร ?
- แต่ละ service จะทำงานร่วมกันอย่างไร ?
ถ้าเราตอบได้และมีวิธีการรองรับ
ก็น่าจะทำให้เราเบาใจได้ว่า
งานงอกจะน้อยลง
และยังคงประโยชน์ของ Microservices อยู่