Đi đến nội dung chính
VI
Trang chủ / Bài viết / Thiết kế hàng đợi chịu tải, công bằng và dễ phục hồi
22 thg 6, 2026 · Z-SOFT Admin · 10 phút đọc

Thiết kế hàng đợi chịu tải, công bằng và dễ phục hồi

Thiết kế hàng đợi có giới hạn, phân chia công bằng theo khách hàng và phục hồi an toàn sau khi quá tải.

Xem tất cả bài viết

Ý chính: Hàng đợi chỉ hấp thụ được các đợt tăng tải ngắn. Nếu nhận việc không giới hạn, nó chỉ biến quá tải thành thời gian chờ dài hơn.

Thuật ngữ trong bài: Queue: hàng đợi công việc; backpressure: giảm nhận việc khi xử lý không kịp; dead-letter queue: nơi giữ các công việc đã thử nhiều lần nhưng vẫn lỗi.

Bài toán thực tế

Tăng số tiến trình theo độ dài hàng đợi có thể làm quá tải cơ sở dữ liệu hoặc dịch vụ bên thứ ba. Một khách hàng nhập dữ liệu số lượng lớn cũng có thể chiếm hết năng lực xử lý nếu hệ thống không có hạn mức công bằng.

Số lượng tác vụ trong hàng đợi không phản ánh đầy đủ tác động tới khách hàng: mười email khác hoàn toàn mười tác vụ mã hóa video. Tín hiệu hữu ích hơn là thời gian chờ của tác vụ cũ nhất theo từng nhóm dịch vụ.

Tăng worker có thể làm hàng đợi ngắn lại nhưng khiến cơ sở dữ liệu hoặc nhà cung cấp bên ngoài quá tải. Mỗi nhóm tác vụ cần giới hạn xử lý đồng thời dựa trên năng lực thật của hệ thống phía sau.

Thiết kế và triển khai

  1. Phân loại tác vụ theo mục tiêu độ trễ, chi phí xử lý và khách hàng trước khi đưa vào hàng đợi.
  2. Mỗi tác vụ cần khóa chống xử lý trùng, giới hạn thử lại và chính sách rõ khi đã thử hết số lần.
  3. Mở rộng theo thời gian chờ của tác vụ cũ nhất, nhưng không vượt giới hạn của cơ sở dữ liệu và dịch vụ bên ngoài.

Mã minh họa: Xử lý tác vụ an toàn khi broker giao trùng

job = broker.receive(visibilityTimeout = 60s)
if inbox.exists(job.id): ACK
with dependencyLimiter.acquire(job.kind):
  result = handle(job.payload)
  transaction(inbox.insert(job.id), save(result))
ACK

Thời gian giữ quyền xử lý phải dài hơn thời gian chạy thông thường; tác vụ dài cần gửi tín hiệu duy trì để gia hạn.

Rủi ro cần tính trước

  • Quyền xử lý hết hạn khi worker vẫn đang chạy, khiến cùng một tác vụ được thực thi đồng thời hai lần.
  • Bão thử lại xuất hiện khi dịch vụ phụ thuộc mới chỉ phục hồi một phần.
  • Hàng đợi lỗi tăng âm thầm và biến thành mất dữ liệu nếu không có cảnh báo cùng người phụ trách.

Nên theo dõi gì?

Tín hiệuĐiều tín hiệu cho biết
Thời gian chờ của tác vụ cũ nhất theo nhómĐo trực tiếp khả năng đáp ứng mục tiêu độ trễ.
Số lần thử và nguyên nhân lỗiCho biết thử lại đang giúp phục hồi hay chỉ nhân một lỗi vĩnh viễn.
Số tác vụ đang xử lý theo khách hàngPhát hiện một khách hàng đang chiếm phần lớn năng lực dùng chung.

Đưa vào production từng bước

Đo thời gian chờ và nguyên nhân thử lại trước khi thay đổi số worker. Tách một loại tác vụ rủi ro sang nhóm riêng, áp dụng giới hạn ở chế độ quan sát, rồi mới bật bắt buộc cho một nhóm khách hàng nhỏ và diễn tập phát lại từ hàng đợi lỗi.

Điều cần nhớ

Hàng đợi trong production là một cơ chế kiểm soát năng lực, không phải vùng đệm vô hạn để nhận mọi công việc.

HỢP TÁC CÙNG Z-SOFT

Mỗi quyết định công nghệ hôm nay đều ảnh hưởng đến nhiều năm sau.

Trao đổi với đội ngũ Z-SOFT để đánh giá hiện trạng, xác định mục tiêu và lựa chọn kiến trúc phù hợp với định hướng phát triển của doanh nghiệp.

Đặt lịch tư vấn