Gần hai năm trước, trong bài Dual write, mình có giới thiệu một vài pattern để xử lý dual write và nói rằng có thể sẽ viết kỹ hơn về chúng sau. Hơi lâu một chút, nhưng cuối cùng cũng tới lúc rồi. Nếu chưa đọc bài đó, bạn có thể xem lại để hiểu vấn đề và lý do chỉ đổi thứ tự ghi hay retry trong bộ nhớ vẫn chưa giải quyết được.
Posts for: #Backend
Gom message từ Kafka topic bằng debounced aggregator
Ở Hasaki, khi kho không đủ hàng để đáp ứng một đơn hàng, hệ thống tạo yêu cầu điều chuyển nội bộ để lấy hàng từ địa điểm khác về. Luồng hiện tại publish một Kafka message cho mỗi đơn hàng, và mỗi message lại kích hoạt một yêu cầu điều chuyển riêng.
Vào giờ cao điểm, một kho có thể tạo ra hàng trăm message chỉ trong vài phút. Mỗi message tạo một yêu cầu điều chuyển nhỏ. Đội kho phải xử lý hàng chục yêu cầu lắt nhắt cho cùng một điểm đến, trong khi chỉ cần gom thành một batch là đủ.
Dual write
Khi làm backend, chúng ta thường gặp một cách xử lý dữ liệu như sau: server nhận dữ liệu từ message broker hoặc API, xử lý theo quy tắc nghiệp vụ rồi thêm hoặc cập nhật dữ liệu vào database. Sau đó, server tiếp tục gửi dữ liệu đến server kế tiếp qua message broker hoặc API. Cách xử lý này được gọi là dual write, đôi khi còn gọi là multi-write hoặc sync-write.