How a durable workflow engine works: you might not need a queue
Bài tóm tắt Inngest 2023 2. Tăng trưởng Độ khó: Cơ bản
Inngest · 2023 · 2. Tăng trưởng · Độ khó: Cơ bản — bài gốc
Bài khái niệm của nhà cung cấp workflow engine, có phần quảng bá; mọi nhận định là theo Inngest. Hệ queue thật đằng sau: Inngest 2024, Inngest 2026.
Bối cảnh
Năm 2023 có tranh luận "database có làm queue được không". Theo Inngest, câu hỏi đó lệch trọng tâm: với workflow engine, chi tiết queue không nên là việc của developer.
Ý chính
- Không có workflow engine: viết từng task chạy trong queue, đẩy job, nối job này sang job khác, tự quản trạng thái giữa các bước.
- Có workflow engine: viết một hàm gồm nhiều step; mỗi step được enqueue và thử lại tới khi thành công; kết quả step được ghi nhớ. Ví dụ thu tiền:
sleepUntilngày hoá đơn → thử charge (tối đa 3 lần, cách nhau 24 giờ) → song song cập nhật DB và gửi biên nhận → hết lượt thì khoá tài khoản. - Bên dưới vẫn là queue: hai primitive chung là
step(chạy gần exactly-once) vàsleep, cả hai cần queue. Vòng lặp: tạo run và enqueue với input → engine đọc job, gọi hàm kèm trạng thái hiện tại → SDK bỏ qua step đã xong (memoize) và chạy step tiếp theo → cập nhật trạng thái nguyên tử, enqueue step mới. Hàm giống một generator. - Phần khó (theo bài): workflow không bao giờ kết thúc, backpressure khi run bắt đầu nhanh hơn kết thúc, song song giữa các step. Có engine đẩy độ phức tạp về developer, có engine chỉ chạy đơn luồng.
- Event-driven workflow: hàm chạy khi có event khớp;
cancelOn(tự huỷ khi có event, ví dụ user bị xoá) vàwaitForEvent(chờ event khớp điều kiện, có timeout). Engine phải gộp queue với message broker: mỗi event đồng thời khởi động run mới, xét huỷ, xét tín hiệu chờ; kèm rate limit, debounce, idempotency, gom batch theo hàm. - Queue của Inngest: hai queue cho mỗi hàm; worker shared-nothing lấy việc không cần liên lạc, vẫn ưu tiên job cũ nhất và hoàn tất hàm theo thứ tự.
Bài học cho SWE
- Chuỗi job nối nhau qua queue là một workflow ngầm; đặt nó vào một hàm có step bền giúp đọc, sửa, debug dễ hơn (Event-driven, message queue và Kafka).
- Durable execution không bỏ queue mà giấu nó; khi hệ lớn, các vấn đề của queue (cardinality, fairness, backpressure) quay lại ở tầng engine, như chính Inngest gặp năm 2024.
- Ghép event phải so mọi event với mọi điều kiện chờ: chi phí ghép là bài toán riêng (cùng ý với Atlassian 2026).
Liên quan
- Event-driven, message queue và Kafka
- Cùng công ty: Inngest 2024, Inngest 2026, Inngest 2026, Inngest 2026
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (3)