Cloudflare Workflows ra mắt tính năng Saga Rollbacks: Tự động hóa xử lý lỗi cho quy trình bền bỉ
Cloudflare vừa giới thiệu tính năng saga rollbacks cho Workflows, cho phép lập trình viên định nghĩa logic bù trừ ngay trong từng bước thực thi, giúp giải quyết vấn đề trạng thái không nhất quán khi...
Cloudflare Workflows cho phép xây dựng các ứng dụng đa bước với khả năng tự động thử lại (retry) và duy trì trạng thái bền bỉ. Tuy nhiên, một thách thức lớn là khi một bước trong quy trình thất bại, các bước trước đó có thể đã hoàn tất, dẫn đến trạng thái dữ liệu không nhất quán hoặc bị phân mảnh.
Để giải quyết vấn đề này, Cloudflare vừa ra mắt tính năng saga rollbacks. Đây là mô hình cho phép lập trình viên khai báo logic bù trừ (compensation logic) ngay trong định nghĩa của từng bước thực thi (step.do()). Nếu quy trình gặp lỗi, các trình xử lý rollback sẽ tự động được kích hoạt theo thứ tự ngược lại so với lúc bắt đầu.
Cơ chế hoạt động của Saga Rollbacks
Mô hình này hoạt động dựa trên nguyên tắc: mỗi hành động cần có một hành động ngược lại tương ứng để hoàn tác. Ví dụ, trong một giao dịch chuyển tiền giữa hai ngân hàng, nếu bước ghi nợ thành công nhưng bước ghi có thất bại, hệ thống cần thực hiện một thao tác bù trừ để hoàn lại tiền vào tài khoản gốc.
Các quy tắc quan trọng cần lưu ý:
- Tính lũy đẳng (Idempotency): Các hàm rollback cần được thiết kế để có thể chạy nhiều lần mà không gây ra tác dụng phụ ngoài ý muốn.
- Thứ tự thực thi: Các trình xử lý rollback sẽ chạy theo thứ tự ngược lại với thời điểm bắt đầu của các bước (reverse step-start order), thay vì thứ tự hoàn thành.
- Điều kiện kích hoạt: Rollback chỉ bắt đầu khi quy trình (Workflow) chuẩn bị thất bại hoàn toàn. Nếu lỗi được xử lý bằng code người dùng và quy trình vẫn tiếp tục, rollback sẽ không được kích hoạt.
Tại sao Cloudflare chọn cách tiếp cận Metadata?
Đội ngũ kỹ thuật của Cloudflare đã cân nhắc nhiều phương án thiết kế API, bao gồm cả kiểu fluent API (chaining) và builder pattern. Tuy nhiên, họ quyết định chọn cách truyền rollback như một phần của đối tượng tùy chọn trong step.do():
step.do(..., { rollback: myRollbackFunction })
Cách tiếp cận này mang lại nhiều ưu điểm:
- Tính tường minh: Logic thực thi và logic bù trừ nằm cùng một nơi, giúp mã nguồn dễ đọc và dễ bảo trì.
- Không gây xung đột với Promise: Tránh được các vấn đề phức tạp liên quan đến cơ chế promise pipelining trong Workers RPC.
- Tận dụng cơ sở hạ tầng sẵn có: Rollback được coi là metadata của một đơn vị công việc bền bỉ (durable unit of work), cho phép tận dụng các tính năng như retry, timeout và ghi log của Workflows.
Về mặt kỹ thuật, khi quy trình gặp lỗi, hệ thống sẽ sử dụng lịch sử thực thi bền bỉ (durable step history) để xác định các bước nào đã chạy và cần hoàn tác. Trong trường hợp hệ thống bị khởi động lại, cơ chế replay sẽ giúp khôi phục các trình xử lý rollback cần thiết mà không cần thực thi lại các tác vụ phía ngoài (external side effects) đã hoàn tất trước đó.
Việc bổ sung saga rollbacks giúp các nhà phát triển xây dựng các quy trình nghiệp vụ phức tạp trên Cloudflare Workers một cách an toàn và tin cậy hơn, giảm thiểu đáng kể công sức quản lý trạng thái thủ công khi có sự cố xảy ra.
Nguồn tham khảo: Cloudflare Blog


No Comment! Be the first one.