Useful Decompositional Patterns (Pattern การแบ่งย่อยที่มีประโยชน์)

มี pattern จำนวนหนึ่งที่มีประโยชน์ในการช่วยแยกระบบที่มีอยู่ออกจากกัน หลายอย่างในนี้ถูกสำรวจอย่างละเอียดในหนังสือของผมเรื่อง Monolith to Microservices ; 1 แทนที่จะพูดซ้ำทั้งหมดตรงนี้ ผมจะแบ่งปันภาพรวมของบางอย่างในนั้นเพื่อให้คุณเห็นว่ามีอะไรเป็นไปได้บ้าง

Strangler Fig Pattern (Strangler Fig Pattern)

เทคนิค ที่ถูกใช้บ่อยครั้งระหว่างการเขียนระบบใหม่คือ strangler fig pattern ซึ่งเป็นคำที่ Martin Fowler เป็นผู้บัญญัติขึ้น ได้แรงบันดาลใจมาจากพืชชนิดหนึ่ง pattern นี้อธิบายถึงกระบวนการห่อหุ้มระบบเก่าด้วยระบบใหม่ไปตามกาลเวลา ทำให้ระบบใหม่ค่อย ๆ เข้าครอบครองฟีเจอร์ของระบบเก่ามากขึ้นเรื่อย ๆ ทีละขั้น

แนวทางดังที่แสดงใน Figure 3-5 นั้นตรงไปตรงมามาก คุณสกัดกั้นการเรียกที่มายังระบบที่มีอยู่ ในกรณีของเราคือแอปพลิเคชัน monolithic ที่มีอยู่ ถ้าการเรียกฟังก์ชันการทำงานส่วนนั้นถูก implement อยู่ในสถาปัตยกรรม microservice ใหม่ของเราแล้ว มันจะถูกส่งต่อไปยัง microservice นั้น ถ้าฟังก์ชันการทำงานนั้นยังถูกให้บริการโดย monolith อยู่ การเรียกก็จะถูกปล่อยให้ดำเนินต่อไปยัง monolith เอง

bms2 0305

Figure 3-5. ภาพรวมของ strangler fig pattern

ความสวยงามของ pattern นี้คือมันมักทำได้โดยไม่ต้องเปลี่ยนแปลงแอปพลิเคชัน monolithic ที่อยู่เบื้องล่างเลย monolith ไม่รับรู้ด้วยซ้ำว่ามันถูก "ห่อหุ้ม" ด้วยระบบใหม่กว่า

Parallel Run (Parallel Run)

เมื่อ เปลี่ยนจากฟังก์ชันการทำงานที่ให้บริการโดยสถาปัตยกรรมแอปพลิเคชันเดิมที่ผ่านการทดสอบและใช้งานมานาน ไปสู่สถาปัตยกรรมแบบ microservice ใหม่เอี่ยม อาจมีความกังวลใจอยู่บ้าง โดยเฉพาะถ้าฟังก์ชันการทำงานที่กำลังย้ายนั้นสำคัญต่อองค์กรของคุณ

วิธีหนึ่งที่จะทำให้แน่ใจว่าฟังก์ชันการทำงานใหม่ทำงานได้ดีโดยไม่เสี่ยงต่อพฤติกรรมของระบบที่มีอยู่คือการใช้ parallel run pattern นั่นคือการรันทั้ง implementation แบบ monolithic ของฟังก์ชันการทำงานและ implementation แบบ microservice ใหม่ควบคู่กัน ให้บริการ request เดียวกัน และเปรียบเทียบผลลัพธ์ เราจะสำรวจ pattern นี้อย่างละเอียดมากขึ้นใน "Parallel Run"

Feature Toggle (Feature Toggle)

Feature toggle เป็นกลไกที่ช่วยให้ฟีเจอร์ถูกเปิดหรือปิดได้ หรือสลับระหว่าง implementation สองแบบของฟังก์ชันการทำงานบางอย่าง Feature toggle เป็น pattern ที่ใช้งานได้ดีในหลายกรณีทั่วไป แต่มันมีประโยชน์เป็นพิเศษในฐานะส่วนหนึ่งของการย้ายระบบไปสู่ microservice

อย่างที่ผมได้อธิบายไว้กับแอปพลิเคชันแบบ strangler fig เรามักจะปล่อยให้ฟังก์ชันการทำงานที่มีอยู่ยังคงอยู่ใน monolith ระหว่างการเปลี่ยนผ่าน และเราจะต้องการความสามารถในการสลับระหว่างเวอร์ชันของฟังก์ชันการทำงาน นั่นคือฟังก์ชันการทำงานใน monolith และใน microservice ใหม่ ด้วยตัวอย่าง strangler fig pattern ที่ใช้ HTTP proxy เราสามารถ implement feature toggle ไว้ที่ proxy layer เพื่อให้มีตัวควบคุมง่าย ๆ ในการสลับระหว่าง implementation ต่าง ๆ ได้

สำหรับการแนะนำ feature toggle ในภาพกว้างมากขึ้น ผมขอแนะนำบทความของ Pete Hodgson เรื่อง "Feature Toggles (aka Feature Flags)" 2