0

Kafka: Ứng dụng Kafka trong Event-Driven Architecture - Distributed System - CDC

1. Thách thức của kiến trúc Microservices truyền thống

Trong một hệ thống E-commerce lớn, một hành động đơn giản như "Check out" (tạo đơn hàng) sẽ kéo theo hàng loạt phản ứng dây chuyền từ các dịch vụ khác: kho bãi cần trừ tồn kho, dịch vụ thông báo gửi email, dịch vụ giao hàng xử lý vận chuyển, và các hệ thống phân tích dữ liệu cần cập nhật chỉ số. Việc để các dịch vụ gọi trực tiếp lẫn nhau (Synchronous) dễ dẫn đến sự phụ thuộc chặt chẽ (tight coupling), khó mở rộng và dễ lỗi toàn hệ thống nếu một mắt xích gặp sự cố.

2. Mô hình Event-Driven và những hạn chế ban đầu

Để giải quyết bài toán trên, mô hình Event-Driven (Kiến trúc hướng sự kiện) thường được áp dụng thông qua cơ chế Publish/Subscribe. Tuy nhiên, cách triển khai truyền thống bằng cách để Application trực tiếp phát sinh sự kiện (Event) trong mã nguồn bộc lộ nhiều khuyết điểm:

Gánh nặng logic: Dịch vụ chính phải đảm nhiệm thêm việc phát sự kiện, xử lý gửi lại khi lỗi (retry), đảm bảo không gửi trùng hoặc bỏ sót.

Phụ thuộc mã nguồn: Mọi thay đổi về trạng thái dữ liệu đều yêu cầu viết thêm code để phát sự kiện mới, khiến mã nguồn ngày càng phình to và khó kiểm soát.

Hệ thống cũ (Legacy Systems): Khó can thiệp vào mã nguồn của các bên thứ ba hoặc các hệ thống cũ đã vận hành lâu năm để thêm logic phát sự kiện.

3. Giải pháp Change Data Capture (CDC)

CDC (Change Data Capture) ra đời như một phương pháp tối ưu hơn để ghi nhận sự thay đổi dữ liệu. Thay vì để tầng Application phát sự kiện, CDC sẽ theo dõi trực tiếp các thay đổi đã được commit trong Database (thông qua các file log hệ thống như Binlog của MySQL hay WAL của PostgreSQL).

Nguyên lý hoạt động: Mọi thao tác Insert, Update, Delete đều được Database ghi lại trong log trước khi commit. Công cụ CDC (như Debezium) sẽ đọc các log này, chuyển đổi thành các sự kiện có cấu trúc và đẩy vào hệ thống streaming như Apache Kafka.

Lợi ích: Application chỉ cần tập trung vào việc ghi dữ liệu vào DB. Việc lan truyền sự kiện được giao hoàn toàn cho CDC, giúp giảm tải logic và đảm bảo tính nhất quán tuyệt đối của dữ liệu.

4. Vai trò của Apache Kafka trong kiến trúc CDC

Kafka đóng vai trò là trung tâm truyền tải và lưu trữ dữ liệu bền vững. Nó giống như một "trạm trung chuyển" thông tin khổng lồ:

Nhận các sự kiện từ CDC và lưu trữ một cách phân tán.

Cho phép nhiều Consumer (các dịch vụ khác) cùng truy cập và xử lý dữ liệu một cách độc lập.

Khả năng mở rộng tốt và đảm bảo không bỏ sót bất kỳ thay đổi nào, ngay cả khi các dịch vụ tiêu thụ dữ liệu gặp sự cố tạm thời.

5. Demo triển khai thực tế (Xem tại video)

6. Khả năng chịu lỗi và tính thời gian thực

Một trong những điểm mạnh nhất của mô hình này là tính Real-time và khả năng Resilience:

Dữ liệu được đồng bộ giữa các dịch vụ gần như tức thì.

Nếu một dịch vụ Consumer bị dừng để bảo trì, các sự kiện vẫn được lưu trữ an toàn trên Kafka. Khi dịch vụ hoạt động trở lại, nó sẽ tự động đọc tiếp các sự kiện còn thiếu, đảm bảo dữ liệu luôn được đồng bộ đầy đủ mà không bị thất thoát.

Kết luận: Sự kết hợp giữa Kafka và CDC là giải pháp mạnh mẽ cho các hệ thống phân tán hiện đại, giúp tách biệt hoàn toàn giữa dịch vụ tạo dữ liệu và dịch vụ tiêu thụ dữ liệu, đồng thời giải quyết triệt để bài toán đồng bộ dữ liệu cho các hệ thống phức tạp hoặc hệ thống cũ.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí