What to Split First? (ควรแยกอะไรก่อน)
เมื่อ คุณเข้าใจอย่างแน่ชัดแล้วว่า ทำไม คุณถึงคิดว่า microservices เป็นความคิดที่ดี คุณสามารถใช้ความเข้าใจนี้เพื่อช่วยจัดลำดับความสำคัญว่าควรสร้าง microservice ตัวไหนก่อน อยากจะ scale แอปพลิเคชันเหรอ ฟังก์ชันการทำงานที่ปัจจุบันจำกัดความสามารถของระบบในการรับ load จะอยู่ในลำดับต้น ๆ ของรายการ อยากปรับปรุงเวลาในการออกสู่ตลาดเหรอ ลองดูความผันผวนของระบบเพื่อระบุส่วนของฟังก์ชันการทำงานที่เปลี่ยนแปลงบ่อยที่สุด แล้วดูว่ามันเหมาะจะเป็น microservices หรือไม่ คุณสามารถใช้เครื่องมือ static analysis อย่าง CodeScene เพื่อค้นหาส่วนที่ผันผวนของ codebase ของคุณได้อย่างรวดเร็ว คุณสามารถดูตัวอย่างมุมมองจาก CodeScene ได้ใน Figure 3-1 ซึ่งเราจะเห็น hotspot ในโปรเจกต์ open source อย่าง Apache Zookeeper
แต่คุณก็ต้องพิจารณาด้วยว่าการแบ่งย่อยแบบไหนที่เป็นไปได้จริง ฟังก์ชันการทำงานบางอย่างอาจฝังลึกอยู่ในแอปพลิเคชัน monolithic ที่มีอยู่มากจนเป็นไปไม่ได้ที่จะแกะมันออกมา หรือบางทีฟังก์ชันการทำงานที่กำลังพูดถึงอาจสำคัญต่อแอปพลิเคชันมากจนการเปลี่ยนแปลงใด ๆ ถูกมองว่ามีความเสี่ยงสูง ในทางกลับกัน ฟังก์ชันการทำงานที่คุณต้องการย้ายอาจพึ่งพาตัวเองได้อยู่แล้วในระดับหนึ่ง ทำให้การดึงออกดูตรงไปตรงมามาก
Figure 3-1. มุมมอง hotspot ใน CodeScene ที่ช่วยระบุส่วนต่าง ๆ ของ codebase ที่เปลี่ยนแปลงบ่อย
โดยพื้นฐานแล้ว การตัดสินใจว่าฟังก์ชันการทำงานไหนควรแยกเป็น microservice จะลงเอยด้วยการหาสมดุลระหว่างสองแรงนี้ นั่นคือความง่ายในการดึงออกเทียบกับประโยชน์ของการดึง microservice นั้นออกมาตั้งแต่แรก
คำแนะนำของผมสำหรับ microservice สองสามตัวแรกคือให้เลือกสิ่งที่เอนเอียงไปทางฝั่ง "ง่าย" ของสเปกตรัมมากกว่าหน่อย นั่นคือ microservice ที่เราคิดว่ามีผลกระทบในแง่ของการบรรลุเป้าหมาย end-to-end ของเราแน่นอน แต่ก็เป็นสิ่งที่เราจะมองว่าเป็นผลไม้ที่เก็บง่าย เรื่องนี้สำคัญมากสำหรับการเปลี่ยนผ่านแบบนี้ โดยเฉพาะอย่างยิ่งเมื่อมันอาจใช้เวลาหลายเดือนหรือหลายปี ในการสร้างความรู้สึกถึงโมเมนตัมตั้งแต่เนิ่น ๆ ดังนั้นคุณต้องมีชัยชนะเร็ว ๆ ติดตัวไว้บ้าง
ในทางกลับกัน ถ้าคุณพยายามดึง microservice ที่คุณคิดว่าง่ายที่สุดออกมาแล้วทำไม่สำเร็จ ก็อาจคุ้มค่าที่จะพิจารณาใหม่ว่า microservices เหมาะกับคุณและองค์กรของคุณจริง ๆ หรือไม่
เมื่อมีความสำเร็จสักสองสามครั้งและบทเรียนบางอย่าง คุณจะอยู่ในตำแหน่งที่ดีกว่ามากในการรับมือกับการดึงส่วนที่ซับซ้อนกว่า ซึ่งอาจดำเนินการอยู่ในพื้นที่ที่สำคัญกว่าของฟังก์ชันการทำงานด้วย