จากเอกสาร Microservices Anti-Patterns: A Taxonomy นั้น
ทำการสรุปเกี่ยวกับ Anti-patterns หรือแนวทางที่แย่ ๆ สำหรับ Microservices
ออกมาประมาณ 20 patterns ที่มักจะพบเจอ
มาดูกันว่ามี pattern อะไรบ้าง
เพื่อที่จะไม่ผิดกันอีก !!
จากเอกสารแบ่งเป็น 2 กลุ่มใหญ่ ๆ คือ
- Technical
- Organization
กลุ่มแรก Technical ประกอบไปด้วย
การทำงานภายในของแต่ละ service ที่จะมีปัญหา เช่น
- API versioning
- Hard code สิ่งต่าง ๆ ใน code เช่น endpoint, ip และ port เป็นต้น
- Service ใหญ่เกินไป
- การจัดการ logging
- แบ่ง service ผิด
- ขาดระบบ monitoring ที่ดี ตรงนี้น่าจะเรื่องของ Observability
- การ share ที่จัดเก็บข้อมูล
- การ share library ต่าง ๆ
- ออกแบบ endpoint แบบทำได้ทุกอย่าง ไม่ยอมออกแบบให้ทำงานแบบเฉพาะเจาะจง
ในเรื่องของการติดต่อสื่อสารระหว่าง service ก็เยอะเลย
- ที่เจอบ่อย ๆ เช่นกันคือ Cyclic dependecy คือการเรียกวนไปมา เกิดสปาเกตตี้ระดับ service ได้ง่าย
- มีการใช้ ESB (Enterprise Service Bus) เพื่อ share ข้อมูลและติดต่อกัน ซึ่งเป็นมาตั้งแต่ SOA แล้ว !!
- ไม่ใช้ API gateway
- เรื่องของ timeout น่าจะเป็นเรื่องของพวก resilience pattern นั่นเอง ตัวที่ได้รับความนิยมคือ circuit breaker
- มี protocol ในการติดต่อสื่อสารมากจนเกินไป
- ขาดความรู้และเครื่องมือที่เหมาะสม
- ใช้เทคโนโลยีที่ใหม่เกินไป หรือ ยังขาดความรู้ความเข้าใจต่อสิ่งนั้น ๆ เห็นเขาว่าดีก็เลยนำมาใช้
กลุ่มสอง Organization ประกอบไปด้วย
แนวคิด Microservice นั้น ไม่ใช่เพียงเรื่องของ architecture เท่านั้น
แต่ยังเกี่ยวข้องกับองค์กรอีกด้วย
ถ้าองค์กรไม่ปรับก็จะยิ่งส่งผลเสียเช่นกัน
มาดูว่า pattern อะไรบ้างที่ทำให้เกิดปัญหา
- ยังคงใช้โครงสร้างเดิม ๆ ที่ก่อให้เกิดปัญหา แต่ก็ยังทำแบบเดิมเพียงแต่เอา Microservice มาใช้ ผลที่ได้อาจจะแย่กว่าเดิมไปอีก อยากแก้ไขปัญหา แต่ยังใช้ process เดิม ๆ ที่ก่อให้เกิดปัญหาก่อนหน้านี้
- เรื่องของ Ownership ส่วนใหญ่จะเป็นแบบ strong ownership คือ ดูแลของใครของมัน ไม่สนใจภาพรวมของ product
- เป้าหมายคือ Microservice แทนที่ควรจะเน้นที่การแก้ไขหรือปรับปรุงระบบให้ดีขึ้นมากกว่า
- คิดว่า Microservice จะแก้ไขปัญหาทุกอย่าง ซึ่งผิดมาก ๆ
- รีบทำจนเกินไป เทียบได้กับ ยังเดินไม่ได้ แต่อยากจะบินแล้ว
- ขาดการทดสอบที่ดี หรือสภาวะแวดล้อมของการทดสอบไม่น่าเชื่อถือ
- ทีมหนึ่ง ๆ ดูแล service จำนวนมาก
น่าจะเป็นประโยชน์ต่อการนำไปใช้งานต่อไป