Đã Cập nhật
Điều gì sẽ xảy ra nếu dòng chảy bị gián đoạn nửa chừng? Cấu hình các bước phục hồi và nhận diện toàn năng để tiếp tục từ điểm ngắt quãng mà không lặp lại tác dụng phụ bên ngoài.
"Chạy dở dang thì sao" là câu hỏi workflow cấp production bắt buộc phải trả lời. Braidrun đưa ra hai phương án:
- Mặc định: nghỉ an toàn — Đánh dấu execution là INTERRUPTED, đợi bạn xem rõ rồi tự "thử lại" từ một bước giữa chừng.
- Tùy chọn: Tự động tiếp tục chạy — Sau khi bạn khai báo rõ "workflow này chạy tiếp được + những bước nào idempotent", nền tảng tự tiếp tục từ điểm gián đoạn.
Hai loại:
- Phía nền tảng - khởi động lại dịch vụ, phiên bản được thay thế, máy chủ bị lỗi. Chúng tôi cố gắng tránh những điều này nhưng không phải 100%.
- Phía bạn — bạn chủ động "hủy" một execution (dừng ở CANCELLED, không phải INTERRUPTED).
Chỉ loại trước mới vào quy trình "tự chạy tiếp"; execution CANCELLED sẽ không tự chạy.
Hành vi mặc định: nghỉ an toàn
Khi xảy ra ngắt phía nền tảng, nền tảng:
- Đánh dấu trạng thái thực thi là BỊ GIÁN ĐOẠN;
- Lưu giữ kết quả, sản phẩm và nhật ký của tất cả các bước đã hoàn thành;
- Bạn nhận được thông báo tại chỗ (email/Slack cũng sẽ được định cấu hình theo thông báo của bạn);
- Vào trang chi tiết thực thi, bạn có thể "thử lại từ bước thất bại" — nền tảng tái dùng kết quả các step trước.
Mặc định này có sẵn cho tất cả các workflow và không yêu cầu cấu hình. Thích hợp cho:
- Quy trình làm việc chứa các tác dụng phụ bên ngoài (gửi email/trừ tiền/sửa đổi cơ sở dữ liệu)
- Khi production còn chưa chắc "khởi động lại rồi chạy tiếp có an toàn không"
Tùy chọn: Tự động tiếp tục chạy
Nếu quy trình làm việc của bạn là một đường dẫn dữ liệu thuần túy (API chỉ đọc + tạo báo cáo), bạn có thể bật tính năng tiếp tục tự động - sau khi xảy ra gián đoạn, nền tảng sẽ tự động tiếp tục chạy từ điểm gián đoạn mà bạn không cần phải nhấp vào thủ công.
Đã Bật tính năng chọn tham gia hai tầng
Để việc tự động tiếp tục có hiệu lực, bạn cần khai báo cả hai lớp trong YAML:
- cấp độ công việc: Tuyên bố
recovery.autoResumeOnRestart: true - cấp độ bước: Hướng dẫn từng bước để chạy lại an toàn
idempotent: true
Ví Dụ hoàn chỉnh
name: daily-asa-digest
version: "1.0.0"
recovery:
autoResumeOnRestart: true
policy: RESUME_FROM_LAST_INCOMPLETE
maxAutoResumeAttempts: 3
steps:
- id: fetch_asa_data
type: sub_workflow
module: dingyue-module-asa-fetch
idempotent: true # 只读拉取,可重跑
- id: build_excel
type: sub_workflow
module: dingyue-module-excel-report
idempotent: true # 生成文件到产物目录,可重跑
- id: notify_team
type: sub_workflow
module: dingyue-module-slack-deliver
# 不写 idempotent —— 默认 false,发消息不可重跑Ba Phục hồi.policy
| policy | nghĩa là | Phù hợp với cảnh |
|---|---|---|
ABORT | Không tự động khôi phục tương đương với việc quay lại hành vi mặc định. | giai đoạn thử nghiệm |
RESUME_FROM_LAST_INCOMPLETE | Mặc định. Chạy lại từ bước chưa HOÀN THÀNH đầu tiên. | Đường dẫn dữ liệu, tập hợp API chỉ đọc, tính toán thuần túy |
RESUME_FROM_START | Chạy lại toàn bộ quy trình làm việc từ đầu | Các trường hợp trong đó nguồn dữ liệu có thể thay đổi trong thời gian ngừng hoạt động và cần được làm mới |
idempotent Cách đánh dấu
Tiêu chuẩn vàng để xác định xem một bước có bình thường hay không:
"Cùng đầu vào chạy hai lần, có sinh tác dụng phụ không?"
Nếu bạn có thể (gửi tin nhắn bên ngoài, tính tiền, viết đơn đặt hàng), đừng thêm idempotent.
| Thuộc tính bước | idempotent |
|---|---|
| Truy vấn API chỉ đọc (báo cáo kéo, ứng dụng danh sách) | ✓ true |
| Tính toán/chuyển đổi dữ liệu thuần túy | ✓ true |
| Tạo Markdown/Excel vào thư mục sản phẩm | ✓ true(Sản phẩm cũ sẽ bị xóa trước khi chạy lại) |
| Suy luận LLM (công cụ không có tác dụng phụ) | ✓ true(Mã thông báo sẽ được tính toán lại, nhưng an toàn về mặt ngữ nghĩa) |
| Gửi email/Telegram/Slack/Feishu | ✗ false |
| Ghi vào DB bên ngoài/Thay đổi giá thầu quảng cáo/Đặt hàng/Ghi nợ | ✗ false |
| Cuộc gọi đi Webhook | ✗ false(Trừ khi điểm cuối khác loại bỏ rõ ràng các bản sao) |
| manual_approval | ✗ false(Tiếp tục chạy sẽ ping lại người phê duyệt, đây là một trải nghiệm kém) |
Nếu idempotent không được viết thì giá trị mặc định là sai. RESUME_FROM_LAST_INCOMPLETE sẽ hạ cấp xuống ABORT khi gặp bước không bình thường - nó sẽ không tự động chạy, để bạn thực hiện thủ công.
Một số tình huống sẽ không xảy ra trong quá trình tiếp tục tự động
Ngay cả khi bạn định cấu hình khôi phục, các lần thực thi sau sẽ vẫn không tự động chạy:
- Nguồn kích hoạt là Webhook - tải trọng Webhook có thể tối đa một lần và nền tảng không biết liệu thượng nguồn có thử lại hay không.
- Nguồn kích hoạt là Bộ lập lịch - bộ lập lịch sẽ tự kích hoạt lại trong vòng cron tiếp theo.
- Hiện đã dừng ở manual_approval - chờ phê duyệt có nghĩa là ban đầu nó đã bị chặn.
- Tệp định nghĩa workflow đã được sửa đổi trong thời gian ngừng hoạt động - nền tảng đã phát hiện hàm băm không khớp và không chắc liệu phiên bản mới có tương thích hay không.
Thủ công "thử lại từ một bước" (luôn sẵn sàng)
Dù workflow có cấu hình recovery hay không, trang chi tiết thực thi luôn có nút "thử lại từ bước thất bại":
- Mở một lệnh thực thi bị GIÁN ĐOẠN/THẤT BẠI;
- Nhấp vào "Thử lại từ bước này" bên cạnh bước không thành công/bị gián đoạn;
- Kết quả của bước HOÀN THÀNH trước đó sẽ được sử dụng lại; bước này bắt đầu chạy lại.
Kể cả bước này không idempotent, bạn vẫn có thể tự thử lại — vì lúc này chính bạn, với tư cách con người, có ý thức quyết định "đáng chạy lại".
Tiếp tục giới hạn chạy
Để tránh hệ thống khởi động lại cùng một execution thành "vòng lặp chết": mỗi execution tự chạy tiếp tối đa 3 lần. Quá số đó mà vẫn thất bại thì dừng chờ bạn xử lý. Có thể ghi đè trong recovery.maxAutoResumeAttempts (1-20).
Kiểm toán
Các sự kiện kiểm tra sẽ được ghi lại mỗi khi thực hiện tiếp tục tự động:
execution.auto_resume— Tiếp tục chạy thành côngexecution.auto_resume.skipped— Theo quy định, bạn không nên tiếp tục chạy, có lý do
Quản trị viên có thể lọc và xem nhật ký kiểm tra theo hai loại sự kiện này.
Những gợi ý thiết thực
- Đường dẫn dữ liệu thuần túy (ASA hàng ngày, tóm tắt RSS): khôi phục hoàn toàn + bình thường, hãy yên tâm rằng nó sẽ tiếp tục chạy tự động.
- Nếu có tác dụng phụ bên ngoài (khấu trừ, gửi tin nhắn, đặt hàng): không mở auto resume. Làm gián đoạn việc ra quyết định của con người.
- Thêm manual_approval trước các bước có tác dụng phụ quan trọng — phê duyệt tự thân là "điểm chặn tự nhiên" của việc gián đoạn rồi chạy tiếp.
Bước tiếp theo
- Thực hiện giám sát và ghi chép — Cách xem quá trình thực thi ở trạng thái BỊ GIÁN ĐOẠN
- Thực hành tốt nhất — Đề xuất toàn diện cho chú thích/tách/mô-đun hóa bình thường