Cách thiết kế hàng đợi tác vụ nền cho sản phẩm

Hàng đợi tác vụ nền cần trạng thái rõ, retry có giới hạn, idempotency, mức ưu tiên và tiêu chí theo dõi để xử lý công việc kéo dài mà không tạo dữ liệu trùng.

30/10/2026 8 phút đọc
Các capsule tác vụ xếp hàng trên đường dẫn kính, một capsule cam đi qua cổng ưu tiên.
Trên trang này ↓

Một tình huống giả định: người dùng tải tệp dữ liệu lên rồi đóng trình duyệt. Việc kiểm tra từng dòng và ghi dữ liệu kéo dài. Nếu máy chủ cố hoàn tất trong cùng yêu cầu, người dùng có thể gặp timeout, bấm lại và tạo thêm một lần nhập giống hệt.

Khi nào sản phẩm cần hàng đợi tác vụ nền?

Queue phù hợp khi công việc kéo dài, phụ thuộc hệ thống ngoài hoặc tải tăng theo đợt. Nhập dữ liệu, tạo báo cáo, gửi email hàng loạt và xử lý AI thường có đặc điểm này. Yêu cầu từ giao diện chỉ cần xác nhận đã tiếp nhận, cấp mã tác vụ và cho biết nơi xem tiến độ.

Chốt ranh giới giữa yêu cầu và tác vụ nền

Xử lý ngay trong yêu cầu

Kiểm tra quyền, định dạng đầu vào, giới hạn tệp và điều kiện có được phép tạo tác vụ. Lỗi rõ ở bước này phải trả về ngay.

Chuyển sang tác vụ nền

Ghi nhận tác vụ, giữ tham chiếu tới đầu vào, cấp mã theo dõi và đưa thông điệp vào queue. Worker nhận phần xử lý có thể kéo dài.

Không nên đưa mọi thao tác vào queue. Kiểm tra trường bắt buộc thường nên hoàn tất ngay. Chỉ tách xử lý khi lợi ích lớn hơn số trạng thái, đường lỗi và trách nhiệm vận hành phát sinh.

Trạng thái tác vụ phải đủ để vận hành

Hai nhãn “đang chạy” và “lỗi” không đủ để điều tra sự cố. Một mô hình có thể gồm: đã tiếp nhận, đang chờ, đang xử lý, chờ thử lại, hoàn tất, cần can thiệp và đã hủy. Mỗi trạng thái phải có điều kiện vào, điều kiện ra và bên chịu trách nhiệm.

Trạng thái nghiệp vụ cần tách khỏi trạng thái kỹ thuật. Báo cáo có thể đã tạo xong nhưng email thông báo chưa gửi được. Nếu gộp cả hai thành “thất bại”, đội hỗ trợ khó biết nên tạo lại báo cáo hay chỉ gửi thông báo. Hãy chốt mô hình này trước theo hướng dẫn về thiết kế trạng thái công việc trước khi tự động hóa.

Bốn trạm tiếp nhận, chờ, xử lý và hoàn tất của một tác vụ nền trên hệ đường dẫn kính tím.
Mỗi trạm biểu diễn một trạng thái có điều kiện vào, điều kiện ra và đầu ra cần theo dõi.

Quy trình xử lý một tác vụ nền

  1. Bước 1: Kiểm tra và ghi nhận

    Xác minh quyền, đầu vào và khóa chống trùng trước khi tạo bản ghi tác vụ.

  2. Bước 2: Đưa thông điệp vào queue

    Thông điệp chỉ mang định danh và dữ liệu cần thiết. Dữ liệu lớn hoặc nhạy cảm nên nằm trong nơi lưu phù hợp.

  3. Bước 3: Worker giữ quyền xử lý

    Worker đánh dấu đang xử lý, gia hạn quyền giữ nếu cần và ghi tiến độ tại các mốc có ý nghĩa.

  4. Bước 4: Chốt kết quả hoặc đường lỗi

    Kết quả được lưu trước khi xác nhận thông điệp. Lỗi tạm thời chờ retry, lỗi cần quyết định được chuyển cho người phụ trách.

Retry và idempotency phải đi cùng nhau

Thông điệp có thể được giao lại khi worker mất kết nối sau lúc ghi dữ liệu nhưng trước khi xác nhận. Hệ thống phải giả định một tác vụ có thể chạy hơn một lần. Khóa idempotency cần đại diện cho cùng ý định nghiệp vụ, chẳng hạn cùng lần nhập tệp, thay vì mã ngẫu nhiên mới cho mỗi lần bấm.

Retry chỉ dành cho lỗi có khả năng tự hết, như timeout hoặc dịch vụ tạm thời không sẵn sàng. Đầu vào sai, thiếu quyền hoặc vượt quy tắc nghiệp vụ không nên thử lặp vô hạn. Bài thiết kế retry và idempotency trình bày sâu hơn cách phân loại lỗi và chống tác động trùng.

Một capsule tác vụ màu cam được tách khỏi luồng chính vào khay kiểm tra, trong khi các tác vụ khác tiếp tục đi qua cổng.
Tác vụ vượt giới hạn retry cần rời luồng chính để điều tra hoặc xử lý có kiểm soát.

Ưu tiên theo ảnh hưởng, không theo tên khách hàng

Một hàng đợi duy nhất khiến tác vụ nặng chặn việc cần phản hồi sớm. Đội nên phân nhóm theo ảnh hưởng: việc tương tác với người dùng, việc theo lịch và việc khối lượng lớn. Chưa cần mở nhiều queue ngay, nhưng phải ngăn một nhóm chiếm toàn bộ worker.

Tiêu chí Câu hỏi cần chốt Hành động thiết kế
Ảnh hưởng người dùng Có ai đang chờ kết quả trực tiếp? Dành năng lực xử lý và giới hạn thời gian chờ phù hợp.
Chi phí tác vụ Tác vụ có giữ worker hoặc gọi dịch vụ tốn chi phí lâu không? Giới hạn đồng thời và tách khỏi việc ngắn nếu cần.
Thời hạn nghiệp vụ Kết quả có cần trước một mốc đã cam kết? Lưu hạn xử lý, cảnh báo sớm và quy định cách ưu tiên lại.
Phụ thuộc Tác vụ sau có bắt buộc chờ tác vụ trước không? Biểu diễn quan hệ rõ, không dựa vào thứ tự đến queue.

Theo dõi để biết hàng đợi đang kẹt ở đâu

Đếm số thông điệp là chưa đủ. Đội cần biết thời gian chờ của tác vụ cũ nhất, thời gian xử lý, số lần retry, nhóm lỗi, số việc cần can thiệp và tình trạng worker. Mỗi log nên mang mã tác vụ và mã yêu cầu để nối thao tác với kết quả.

Cảnh báo phải gắn với hành động. Hàng đợi tăng do một đợt nhập dữ liệu khác với worker dừng hoàn toàn. Trường hợp đầu có thể cần thêm năng lực tạm thời. Trường hợp sau cần kiểm tra, dừng nhận việc hoặc chuyển sang phương án dự phòng.

Điều kiện nghiệm thu trước khi mở rộng

Đừng nghiệm thu bằng một lần chạy thành công. Hãy dùng bộ tình huống có đầu vào và kết quả mong đợi rõ, gồm gửi trùng, worker dừng giữa chừng, phụ thuộc timeout, tác vụ bị hủy và tải đến theo đợt. Không cần đặt con số giả định chung cho mọi sản phẩm. Ngưỡng thời gian chờ, số lần retry và năng lực xử lý phải được chọn từ cam kết người dùng, chi phí và tải thực tế của chính sản phẩm.

  • Yêu cầu trả về mã tác vụ và người dùng xem được trạng thái sau khi rời trang.
  • Cùng một ý định gửi lại không tạo thêm dữ liệu, email hoặc chi phí ngoài dự kiến.
  • Lỗi được phân thành retry được, thất bại dứt điểm và cần người can thiệp.
  • Tác vụ ưu tiên thấp không làm cạn năng lực dành cho việc người dùng đang chờ.
  • Đội hỗ trợ truy được đầu vào, các lần xử lý, kết quả và lý do dừng bằng mã tác vụ.
  • Có cách hủy, chạy lại có kiểm soát và xử lý phần dữ liệu đã phát sinh.

Nếu đội đang chuẩn bị tính năng nhập dữ liệu, báo cáo, email hàng loạt hoặc xử lý AI, dịch vụ của Auranium có thể hỗ trợ chốt trạng thái, ranh giới hệ thống, test case và điều kiện đưa vào vận hành. Queue cần làm cho công việc kéo dài có thể kiểm soát và giải thích được.

Đọc tiếp

Bài viết liên quan

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

Rà soát luồng tác vụ nền trước khi triển khai

Auranium giúp đội sản phẩm xác định ranh giới đồng bộ và bất đồng bộ, mô hình trạng thái, retry, idempotency, mức ưu tiên và tiêu chí nghiệm thu cho quy trình có API, dữ liệu hoặc AI.

  • Lập bản đồ tác vụ kéo dài và điểm người dùng cần nhận phản hồi
  • Chốt trạng thái, quy tắc chống trùng và đường xử lý lỗi
  • Thiết kế test case cho tải tăng, gián đoạn và thao tác gửi lại
Trao đổi với Auranium
Bắt đầu hành trình của bạn

Nói chuyện với chúng tôi

Chúng tôi sẽ lắng nghe, đặt đúng câu hỏi, và nói thật nếu chúng tôi không phải lựa chọn tốt nhất cho bạn.

Số điện thoại

(+84) 094 4686 093

Zalo

(+84) 094 4686 093

Thời gian làm việc

Mon-Sat (08:00 - 21:00)