Integrating EDA with Legacy systems

Posted on:April 21, 2024

Legacy systems ระบบที่อยู่คู่กับองค์กร อาจจะเป็นฟันเฟืองตัวเล็กๆ ที่เรียกว่า monolithic applications ต่อกับ relational database หนึ่งในสมาชิกที่ทำให้องค์กรผ่านยุคของการอยู่รอด ดิ้นรน และเดินทางมาจนถึงยุคของ organizational culture จุดที่เราต้องเริ่มแข่งขันให้ทันคู่แข่ง มองหานวัตกรรม เทคโนโลยีที่ช่วยผลักดันให้องค์กรไปถึง goals

จากหนังสือ Building event-driven microservices ได้พูดถึงวิธีที่เราสามารถ integrate ข้อมูลกับ legacy systems โดยแนวคิดนี้เรียกว่า data liberation

Data Liberation

องค์กรส่วนใหญ่มี applications มากกว่า 1 ที่ on production ไม่ใช่เรื่องแปลกเวลาที่มี new project มักจะมี use cases ที่ต้องการข้อมูลจาก applications เหล่านั่น Data Liberation คือ migration strategy เพื่อให้เราสามารถ get data จาก legacy systems และนำข้อมูลไปใช้กับ Event-driven architecture (EDA) จากหนังสืออธิบายไว้ 3 Patterns ได้แก่ query based, log-based และ outbox table

Query-Based Data Liberation

Query-Based คือ data extraction จะเป็นเพิ่ม API ที่ application layer หรือ run คำสั่ง SQL เพื่อ query ข้อมูลจาก database โดยตัวที่ trigger การทำงานจะเป็น periodic task ตั้งเวลาเป็นช่วงๆ ตามความปรารถนาของนายท่าน เมื่อได้ result objects จะนำข้อมูลที่ได้ publish ไปที่ event bus

Query-Based Data Liberation

Pros:

Cons:

Liberating Data Using Change-Data Capture Logs

ใน database จะมีสิ่งเล็กๆ ที่เรียกว่า data store logs (binary logs in MySQL, write-ahead logs for PostgresSQL, MongoDB’s op log) แนวคิดของ Change-Data Capture (CDC) คือการอ่านข้อมูลจาก logs เราจะ subscribe table ที่สนใจ เมื่อมี create, delete หรือ update จะเกิด log events ของ data changes เราจะนำข้อมูลชุดนี้ส่งต่อไปยัง event bus

Log Based Data Liberation

Pros:

Cons:

Liberating Data Using Outbox Tables

Outbox pattern คือการสร้าง table ขึ้นมาอาจจะชื่อ outbox table เพื่อทำหน้าที่เป็น temporary storage ของ data changes เมื่อมีการ insert, update หรือ delete จะต้องทำการ insert ข้อมูลที่ outbox table เพื่อเอาไว้เป็น outgoing เมื่อส่งข้อมูลไปยัง event bus สำเร็จ เราจะ update หรือลบข้อมูลใน outbox table แนวคิดนี้ทำให้เรามั่นใจได้ว่าการ data changes ทั้งหมดจะถูกส่งไปยัง event bus

Table-Based Data Liberation

Pros:

Cons:

Conclusions

วิธีการเหล่านี้มีความซับซ้อนสูง ยังมีหลากหลายวิธีที่ได้ผลลัพท์คล้ายๆ กัน อยากให้ลอง ttrade-off ข้อดี/ข้อเสีย เรื่องของ effort, maintenance ลองมองจากมุมมองทีม กำลังวัดของเราเอาระบบนี้อยู่ไหม ถ้ามีปัญหาเรามี monitoring หรือ troubleshoot เพื่อแก้ปัญหาได้เร็วแค่ไหนและคำถามสุดท้ายคือ สิ่งที่เรากำลังจะทำตอบ goals ขององค์กรข้อไหน ทั้งจากแว่นตาของ technical และ business

Sample application

The full code for the Change data capture (CDC) can be สนุก on my Github

เผื่อใครสนใจอยากลงเรือ ผมได้ POC: Sample Application โดยใช้ Concept ของ Change data capture (CDC) จำลอง Legacy System ต่อกับ Postgresql และใช้ Debezium เข้าไปอ่าน write-ahead logs เมื่อมี Data Change จะ Publish ข้อมูลไปที่ Kafka และมี Worker คอย Subscribe ทำหน้าที่ยิ่งใหญ่คือการ log ข้อมูลที่ได้ออก console สามารถ pull code แล้วสั่ง docker-compose up -d ได้เลย

Pre-requisites: