Incremental Migration (การย้ายระบบแบบค่อยเป็นค่อยไป)

ถ้าคุณเขียนระบบใหม่ทั้งหมดแบบ big-bang สิ่งเดียวที่คุณรับประกันได้คือ big bang นั่นแหละ

Martin Fowler

ถ้า คุณมาถึงจุดที่ตัดสินใจแล้วว่าการแยกระบบ monolithic ที่มีอยู่ของคุณออกจากกันเป็นสิ่งที่ถูกต้องที่ควรทำ ผมขอแนะนำอย่างยิ่งให้คุณค่อย ๆ ทลาย monolith ทีละนิด ดึงออกมาทีละส่วน แนวทางแบบค่อยเป็นค่อยไปจะช่วยให้คุณเรียนรู้เกี่ยวกับ microservices ไปพร้อม ๆ กัน และยังจำกัดผลกระทบเมื่อคุณทำอะไรผิดพลาด (และคุณจะทำผิดพลาดแน่นอน!) ลองนึกถึง monolith ของเราเป็นก้อนหินอ่อน เราสามารถระเบิดมันทั้งก้อนได้ แต่นั่นแทบไม่เคยจบลงด้วยดี มันสมเหตุสมผลกว่ามากที่จะค่อย ๆ สกัดมันออกทีละนิด

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

การแบ่งสิ่งต่าง ๆ ออกเป็นชิ้นเล็ก ๆ ยังช่วยให้คุณระบุชัยชนะเร็ว ๆ (quick win) และเรียนรู้จากมันได้ด้วย สิ่งนี้ช่วยทำให้ก้าวต่อไปง่ายขึ้นและช่วยสร้างโมเมนตัม การแยก microservices ออกมาทีละตัวยังทำให้คุณได้ปลดล็อกคุณค่าที่มันมอบให้ทีละขั้นด้วย แทนที่จะต้องรอการ deploy แบบ big bang

ทั้งหมดนี้นำไปสู่สิ่งที่กลายเป็นคำแนะนำประจำของผมสำหรับคนที่กำลังพิจารณา microservices นั่นคือ ถ้าคุณคิดว่า microservices เป็นความคิดที่ดี ให้เริ่มจากจุดเล็ก ๆ เลือกฟังก์ชันการทำงานสักหนึ่งหรือสองด้าน implement มันเป็น microservices นำมัน deploy ขึ้น production แล้วจึงย้อนกลับมาไตร่ตรองว่า microservices ใหม่ที่คุณสร้างขึ้นนั้นช่วยให้คุณเข้าใกล้เป้าหมายปลายทางของคุณมากขึ้นหรือไม่

Warning (คำเตือน)

คุณจะไม่มีทางเข้าใจความน่ากลัว ความเจ็บปวด และความทุกข์ทรมานที่แท้จริงที่สถาปัตยกรรม microservice สามารถนำมาให้ได้ จนกว่าคุณจะรันอยู่บน production