Tác vụ nền
Hàng đợi công việc phía sau việc nạp tài liệu, đồng bộ SharePoint và đồng bộ gateway — có những hàng đợi nào, bảng của chúng nằm đâu, và lần chạy thất bại được thử lại ra sao.
Những việc portal hoãn lại thay vì làm ngay trong một yêu cầu sẽ chạy trên một hàng đợi nằm trong chính Postgres của portal, qua thư viện pg-boss. Không có dịch vụ hàng đợi riêng nào phải triển khai.
Quy tắc chính
- Hàng đợi nằm trong Postgres. Bảng của nó ở trong schema riêng
pgboss. - Hàng đợi độc quyền chạy một tác vụ cho mỗi khóa. Hai lượt chạy không bao giờ cùng làm trên một thư mục hay một phòng ban.
- Lần chạy thất bại được thử lại sau một khoảng chờ tăng gấp đôi, tới mức trần do bản triển khai đặt.
- Tác vụ dùng hết số lần thử sẽ vào hàng đợi dead letter, và mục nó đang xử lý được đánh dấu thất bại ở nơi người dùng nhìn thấy.
Các hàng đợi
| Hàng đợi | Mang gì | Chính sách |
|---|---|---|
knowledge.ingest | Một tài liệu cần trích xuất, đọc, chia đoạn và lập chỉ mục — xem Quy trình xử lý tri thức | Tiêu chuẩn, nên nhiều tài liệu chạy cùng lúc |
knowledge.ingest.sweep | Không mang gì; cron kích hoạt nó để xếp hàng các tài liệu đang chờ mà đã lâu không có gì ghi vào | Độc quyền |
knowledge.sync | Một nguồn SharePoint cần kéo về — xem Đồng bộ SharePoint | Độc quyền theo từng nguồn |
knowledge.sync.sweep | Không mang gì; cron kích hoạt nó | Độc quyền, nên một lượt chạy chậm không bao giờ bị chồng |
agent.turn.sweep | Không mang gì; cron kích hoạt nó để kết thúc các lượt vẫn chạy quá mức trần — xem Vòng đời của một lượt | Độc quyền |
gateway.department.sync | Một phòng ban cần đồng bộ team LiteLLM của nó | Độc quyền theo từng phòng ban |
gateway.department.sync.sweep | Không mang gì; cron kích hoạt nó để xếp hàng mọi phòng ban đang hoạt động | Độc quyền |
Hàng đợi độc quyền chỉ nhận một tác vụ cho mỗi singleton key, dù đang chờ hay đang chạy. Đó là điều giữ cho hai lượt chạy không cùng đụng vào một thư mục. Hàng đợi tiêu chuẩn chạy cùng lúc bao nhiêu tác vụ tuỳ theo số worker cho phép.
Vòng đời một tác vụ
- Đang chờ — một yêu cầu, một cron hoặc một tác vụ khác thêm nó vào.
- Đang chạy — một worker nhận nó.
- Thử lại — handler ném lỗi thì một lần chạy thất bại. Hàng đợi thử lại sau một khoảng chờ tăng gấp đôi mỗi lần, tới mức trần số lần thử do bản triển khai cấu hình.
- Dead letter — tác vụ dùng hết số lần thử sẽ vào hàng đợi dead letter, và thứ nó đang xử lý được đánh dấu thất bại ở nơi người dùng đọc được.
Lần chạy vượt quá thời hạn của nó sẽ bị thu hồi và thử lại. Đó là cách khôi phục khi một worker chết giữa chừng, mà không cần lượt dọn riêng.
Bảng nằm ở đâu
Thư viện sở hữu mọi bảng trong một schema riêng, pgboss, do bản triển khai tạo — xem danh sách kiểm tra sẵn sàng.
- Dựng và nâng cấp các bảng đó cần quyền định nghĩa dữ liệu (DDL), nên việc này diễn ra trong bước áp dụng schema, dưới role migration.
- API khởi động thư viện với chế độ migration bị tắt. Role cơ sở dữ liệu của API không có quyền định nghĩa dữ liệu ở bất cứ đâu, và sự tách biệt này giữ nguyên điều đó.
- Danh sách schema riêng của portal không nêu
pgboss, nên việc đẩy schema đã khai báo của portal không dựng cũng không xoá phần nào của nó.
Worker
- Mỗi tiến trình đăng ký một handler cho mỗi hàng đợi khi khởi động, với số lane lấy từ cấu hình.
- Việc điều phối đi qua thông báo (notification) của Postgres thay vì hỏi vòng theo chu kỳ.
- Bản triển khai không cấu hình lane nào sẽ không đăng ký handler nào. Đó là cách một bản sao chỉ phục vụ yêu cầu giữ nguyên vai trò đó.
Vì sao hoạt động như vậy
Vì sao các lượt quét và đồng bộ dùng hàng đợi độc quyền?
Một lượt quét do cron kích hoạt có thể chạy lâu hơn khoảng cách giữa hai lần kích hoạt. Chỉ nhận một tác vụ cho mỗi khóa nghĩa là lượt chạy chậm không bao giờ bị chồng lên chính nó, và hai lượt chạy không bao giờ cùng kéo một thư mục SharePoint hay cùng đồng bộ một phòng ban.
Bên dưới
Các module dùng hàng đợi thế nào
Module xếp việc vào hàng đợi phụ thuộc vào một port, không bao giờ phụ thuộc trực tiếp vào pg-boss. Schema được áp dụng bằng apply-schema dưới role migration; ở môi trường phát triển, init SQL tạo schema pgboss, còn trên AWS thì hạ tầng của chính tài khoản tạo nó.