- ลดการติดต่อสื่อสารภายใน หรือลด hop ของการทำงานให้เหลือเท่าที่จำเป็น
- ลด data ที่ซ้ำซ้อนลง เพราะว่า ยิ่งมี data ที่ซ้ำซ้อนให้ลงมากเท่าไร การแก้ไขหรือ overhead ในการจัดการก็น้อยลง
- ก่อนที่จะแยก service ออกจากกัน ลองดูก่อนว่า สามารถทำเป็น library ได้ไหม ดังนั้นแทนที่จะทำงานแบบ remote ให้เป็น local ก่อนดีกว่าไหม ตรงนี้น่าคิด
- เรื่องของปัญหา นั่นคือถ้าบาง service มีปัญหา แล้วส่งผลต่อระบบอื่น ๆ มีปัญหาไปด้วย เราเรียกว่า cascade failure ดังนั้นเราต้องจัดการเรื่องนี้ด้วย หรือเรียกว่า isolate failure/error ให้ได้ ยกตัวอย่าง pattern ในการแก้ไขเช่น circuit breaker, bulkhead, timeout และ retry เป็นต้น
- บาง service ถูกใช้งานเยอะ ๆ ก็ทำให้เกิดปัญหาด้วยเช่นกัน ดังนั้นต้องป้องกันอีก ไม่ว่าจะเป็นเรื่องของ backpressure, shard loading ไปจนถึงเรื่องการทำ caching รวมถึงการติดต่อสื่อสารจาก sync มาเป็น async อีก แล้วจะทำการการ scale มันยืดหยุ่นมากยิ่งขึ้น
ดังนั้นในการ design, develop และ deploy
จึงต้องให้ความสำคัญกับเรื่องเหล่านี้เป็นอย่างมาก