hàng đợi tin nhắncác mẫu độ tin cậyhệ thống phân tánkiến trúc đám mâyxử lý lỗicơ sở hạ tầng đám mây
Hàng đợi thư chết so với việc thử lại trong bộ nhớ
Hàng đợi thư chết (Dead Letter Queue - DLQ) và cơ chế thử lại trong bộ nhớ (In-memory Retries) đại diện cho hai cách tiếp cận hoàn toàn khác nhau để xử lý các lỗi xử lý thông điệp trong hệ thống phân tán. DLQ cung cấp khả năng cách ly bền vững các thông điệp gặp sự cố, trong khi cơ chế thử lại trong bộ nhớ mang lại khả năng phục hồi nhẹ nhàng, độ trễ thấp mà không gây ra chi phí lưu trữ dữ liệu.
Điểm nổi bật
Hàng đợi thư chết lưu giữ các thông báo lỗi vô thời hạn, khiến chúng trở nên thiết yếu cho các kịch bản kiểm toán và tuân thủ.
Việc thử lại trong bộ nhớ diễn ra với độ trễ ở mức micro giây, trái ngược với độ trễ trên mili giây đối với các thao tác trong hàng đợi.
DLQ cho phép các nhóm vận hành riêng biệt quản lý các sự cố mà không cần triển khai các thay đổi mã ứng dụng.
Việc liên tục thử lại các phương pháp xử lý trong bộ nhớ có thể gây ra lỗi dây chuyền nếu không được giới hạn bởi các cơ chế ngắt mạch.
Hàng đợi thư chết là gì?
Hàng đợi tin nhắn liên tục ghi lại các tin nhắn bị lỗi để kiểm tra và xử lý lại sau này.
Các tin nhắn đã được chuyển vào hàng đợi tin nhắn lỗi (DLQ) sau khi vượt quá ngưỡng thử lại tối đa, nhưng vẫn giữ nguyên nội dung và siêu dữ liệu của tin nhắn.
Ban đầu được phổ biến bởi các hệ thống nhắn tin doanh nghiệp như IBM MQ và JMS, nay đã trở thành tiêu chuẩn trong AWS SQS, Azure Service Bus và RabbitMQ.
Cho phép phân tích lỗi độc lập mà không làm tắc nghẽn các quy trình xử lý chính, giúp các nhóm có thể khắc phục sự cố và phát lại thông báo.
Thông thường, hệ thống này được tích hợp với các hệ thống giám sát và cảnh báo để thông báo cho người vận hành khi tin nhắn chuyển sang trạng thái "không hoạt động" (dead letter state).
Hỗ trợ các chính sách hết hạn dựa trên thời gian, với AWS SQS DLQs giữ lại tin nhắn tối đa 14 ngày theo mặc định.
Thử lại trong bộ nhớ là gì?
Logic thử lại ngay lập tức được thực thi trong cùng một tiến trình mà không cần lưu trữ thông báo bên ngoài.
Các chính sách thử lại thường sử dụng phương pháp lùi thời gian theo cấp số nhân, với độ trễ tăng gấp đôi giữa các lần thử (ví dụ: 1 giây, 2 giây, 4 giây, 8 giây).
Các framework như Polly (.NET), Resilience4j (Java) và Retry (Python) cung cấp các chiến lược thử lại có thể cấu hình với các mô hình ngắt mạch.
Không tiêu tốn thêm bất kỳ tài nguyên cơ sở hạ tầng nào ngoài bộ nhớ và CPU hiện có của ứng dụng xử lý.
Nếu ứng dụng gặp sự cố giữa chừng trong quá trình thử lại, dẫn đến mất trạng thái thử lại và có thể cả ngữ cảnh hoạt động ban đầu, thì quá trình sẽ thất bại hoàn toàn.
Phù hợp nhất cho các sự cố tạm thời như gián đoạn mạng, lỗi kết nối cơ sở dữ liệu và tình trạng dịch vụ không khả dụng tạm thời.
Bảng So Sánh
Tính năng
Hàng đợi thư chết
Thử lại trong bộ nhớ
Sự kiên trì
Lưu trữ tin nhắn bền vững trong hàng đợi riêng biệt
Có tính chất tạm thời, chỉ tồn tại trong bộ nhớ ứng dụng.
Khôi phục lỗi
Ứng dụng vẫn hoạt động bình thường sau khi gặp sự cố và khởi động lại.
Mất dữ liệu nếu quá trình kết thúc trong quá trình thử lại.
Chi phí cơ sở hạ tầng
Chi phí lưu trữ và chuyển tiếp hàng đợi bổ sung
Không cần thêm cơ sở hạ tầng nào khác ngoài ứng dụng.
Khả năng hiển thị hoạt động
Tích hợp sẵn các chỉ số, cảnh báo và khả năng phát lại.
Yêu cầu ghi nhật ký và giám sát tùy chỉnh
Tác động độ trễ
Độ trễ cao hơn do các thao tác trong hàng đợi.
Độ trễ tối thiểu, thực thi lại ngay lập tức
Trường hợp sử dụng phù hợp
Các quy trình công việc quan trọng yêu cầu xử lý được đảm bảo
Các hoạt động không quan trọng với các sự cố tạm thời
Thứ tự tin nhắn
Có thể duy trì hoặc phá vỡ trật tự ban đầu.
Duy trì trình tự trong quy trình một cách tự nhiên.
Hợp tác nhóm
Cho phép nhóm sở hữu riêng biệt cho việc sửa lỗi và phát lại.
Liên kết chặt chẽ với việc triển khai ứng dụng.
So sánh chi tiết
Đảm bảo độ tin cậy và độ bền
Hàng đợi thư chết (DLQ) phát huy hiệu quả tối đa khi bạn tuyệt đối không được phép mất bất kỳ tin nhắn nào. Một khi tin nhắn đã vào DLQ, nó sẽ ở đó cho đến khi có người xử lý nó một cách rõ ràng, ngay cả khi toàn bộ dịch vụ của bạn khởi động lại. Ngược lại, việc thử lại trong bộ nhớ sẽ biến mất nếu pod của bạn bị lỗi hoặc tiến trình bị dừng đột ngột trong quá trình triển khai. Điều đó khiến DLQ trở thành lựa chọn hiển nhiên cho các giao dịch tài chính, cập nhật kho hàng hoặc bất kỳ vấn đề nào liên quan đến tuân thủ quy định.
Đặc tính hiệu năng và độ trễ
Việc thử lại trong bộ nhớ vượt trội hơn hẳn về tốc độ. Không cần truyền dữ liệu qua mạng, không cần gọi API hàng đợi, không có chi phí tuần tự hóa, chỉ cần tạm dừng một chút rồi thử lại. Đối với các hệ thống có thông lượng cao xử lý hàng nghìn tin nhắn mỗi giây, sự khác biệt đó rất đáng kể. Hàng đợi trễ (DLQ) gây ra độ trễ có thể đo được, đặc biệt khi tin nhắn phải vượt qua ranh giới mạng để đến được dịch vụ hàng đợi riêng biệt. Một số nhóm kết hợp cả hai, sử dụng thử lại trong bộ nhớ để khắc phục nhanh các sự cố tạm thời và DLQ như một lớp bảo vệ cuối cùng.
Độ phức tạp vận hành và gỡ lỗi
Hàng đợi thư chết (DLQ) tạo ra một ranh giới hoạt động rõ ràng. Kỹ sư trực ca sẽ nhận được thông báo, kiểm tra hàng đợi thư chết, khắc phục lỗi cơ bản và phát lại tin nhắn. Đó là một quy trình làm việc dễ hiểu. Việc thử lại trong bộ nhớ chôn vùi các lỗi trong nhật ký ứng dụng, thường yêu cầu tổng hợp nhật ký và bảng điều khiển tùy chỉnh để biết được các lần thử lại đang diễn ra. Khi số lần thử lại cạn kiệt, đó là cơn ác mộng của bộ giải quyết lỗi, đặc biệt là trong kiến trúc microservices, nơi lỗi có thể lan truyền xuống các dịch vụ khác trước khi bất kỳ ai nhận ra.
Cân nhắc về chi phí ở quy mô lớn
Các dịch vụ hàng đợi đám mây tính phí theo yêu cầu và theo tin nhắn được lưu trữ. Một hàng đợi tin nhắn chết (DLQ) bận rộn với hàng triệu tin nhắn có thể ảnh hưởng đáng kể đến hóa đơn của bạn, đặc biệt nếu chính sách lưu giữ tin nhắn khá hào phóng. Việc thử lại trong bộ nhớ về cơ bản là miễn phí từ góc độ cơ sở hạ tầng, mặc dù chúng tiêu tốn bộ nhớ và có thể làm tắc nghẽn các luồng khác nếu số lần thử lại không được giới hạn. Đối với các công ty khởi nghiệp nhạy cảm về chi phí, điều này thường khiến họ nghiêng về phương pháp sử dụng bộ nhớ cho đến khi doanh thu đủ để bù đắp cho chi phí bảo mật cao hơn.
Tích hợp với kiến trúc hiện đại
Kiến trúc hướng sự kiện và các hàm không máy chủ đã làm cho hàng đợi thư chết (DLQ) trở nên quan trọng hơn bao giờ hết. AWS Lambda, Azure Functions và Google Cloud Functions đều hỗ trợ cấu hình thư chết một cách tự nhiên. Việc thử lại trong bộ nhớ phù hợp hơn với các máy chủ ứng dụng truyền thống và các quy trình chạy dài. Sự trỗi dậy của Kubernetes và điện toán tạm thời thực sự đã làm phức tạp các chiến lược trong bộ nhớ, các container có thể bị chấm dứt mà không có nhiều cảnh báo, làm cho DLQ ngày càng hấp dẫn ngay cả đối với các nhóm trước đây đã tránh sử dụng chúng.
Ưu & Nhược điểm
Hàng đợi thư chết
Ưu điểm
+Đảm bảo độ bền của thông điệp
+Chuyển giao vận hành rõ ràng
+Tích hợp đám mây gốc
+Hỗ trợ phát lại và kiểm toán.
+Cô lập tác động của lỗi
Đã lưu
−Chi phí cơ sở hạ tầng bổ sung
−Độ trễ đầu cuối cao hơn
−Cần có cơ chế phát lại
−Có thể tích lũy các tin nhắn cũ.
−Kiến trúc phức tạp hơn
Thử lại trong bộ nhớ
Ưu điểm
+Độ trễ cực thấp
+Không cần thêm cơ sở hạ tầng
+Dễ dàng triển khai ban đầu
+Chi phí vận hành tối thiểu
+Phản hồi lỗi nhanh chóng
Đã lưu
−Mất dữ liệu do lỗi xử lý.
−Ẩn khỏi hoạt động
−Có thể gây ra hiện tượng thử lại liên tục.
−Liên kết chặt chẽ với vòng đời ứng dụng
−Khó gỡ lỗi hơn khi đã xử lý xong.
Những hiểu lầm phổ biến
Huyền thoại
Hàng đợi thư chết giúp loại bỏ nhu cầu về bất kỳ logic thử lại nào trong các ứng dụng.
Thực tế
Hàng đợi tin nhắn chết (DLQ) là nơi lưu trữ sau khi hết số lần thử lại, chứ không phải là sự thay thế cho logic thử lại. Hầu hết các hệ thống vẫn thực hiện thử lại ngay lập tức hoặc trì hoãn trước khi coi một tin nhắn là đã chết. Nếu không có các lần thử lại trung gian, mọi sự cố tạm thời sẽ ngay lập tức làm đầy DLQ của bạn.
Huyền thoại
Việc thử lại trong bộ nhớ luôn nhanh hơn và do đó tốt hơn cho hiệu năng.
Thực tế
Mặc dù việc thử lại từng lần riêng lẻ nhanh hơn, nhưng việc thử lại không giới hạn trong bộ nhớ có thể làm quá tải các nhóm luồng và làm giảm hiệu suất tổng thể của hệ thống. Lợi thế về hiệu suất sẽ nhanh chóng biến mất khi các đợt thử lại liên tiếp kích hoạt cơ chế ngắt mạch hoặc làm quá tải các dịch vụ phía sau.
Huyền thoại
Các tin nhắn trong hàng đợi tin nhắn lỗi sẽ được tự động xử lý sau đó.
Thực tế
DLQ (Deadly Runtime Group) là nơi lưu trữ thụ động, không có gì xảy ra với những tin nhắn đó cho đến khi có sự can thiệp rõ ràng của con người hoặc hệ thống tự động. Nhiều nhóm đã phát hiện ra những tin nhắn cũ hàng tháng trời nằm im trong DLQ vì không ai xây dựng hệ thống xử lý lại tin nhắn.
Huyền thoại
Bạn phải lựa chọn duy nhất giữa hàng đợi tin nhắn lỗi (DLQ) và phương pháp thử lại trong bộ nhớ.
Thực tế
Các mô hình này bổ sung cho nhau một cách tuyệt vời. Các hệ thống có khả năng phục hồi cao nhất sử dụng cơ chế thử lại trong bộ nhớ với độ trễ theo cấp số nhân để phục hồi nhanh chóng, sau đó chuyển sang hàng đợi lỗi (DLQ) sau khi đạt đến một ngưỡng hợp lý. Cách tiếp cận nhiều lớp này bao gồm cả các chế độ lỗi tạm thời và lỗi dai dẳng.
Huyền thoại
Việc thử lại trong bộ nhớ không phù hợp với các hệ thống phân tán.
Thực tế
Mặc dù kém mạnh mẽ hơn so với hàng đợi lỗi (DLQ), việc thử lại trong bộ nhớ vẫn phổ biến và phù hợp trong các hệ thống phân tán đối với các thao tác không quan trọng và có tính chất bất biến. Mấu chốt là phải lựa chọn chiến lược thử lại phù hợp với hậu quả thực tế của việc thất bại đối với hoạt động kinh doanh, chứ không phải cho rằng một mô hình duy nhất phù hợp với tất cả.
Huyền thoại
Hàng đợi thư chết giúp ngăn ngừa mất mát tin nhắn trong trường hợp hệ thống gặp sự cố.
Thực tế
Hàng đợi tin nhắn lỗi (DLQ) chỉ hữu ích cho các tin nhắn đã được hệ thống xếp hàng chấp nhận. Nếu tin nhắn không bao giờ đến được hàng đợi chính do sự cố mạng hoặc lỗi của nhà sản xuất, DLQ không thể tự động khôi phục nó. Độ tin cậy từ đầu đến cuối cũng yêu cầu tính bền vững ở phía nhà sản xuất.
Các câu hỏi thường gặp
Điều gì cụ thể khiến một tin nhắn bị chuyển vào hàng đợi thư chết?
Thông thường, tin nhắn sẽ được chuyển vào hàng đợi tin nhắn lỗi (DLQ) sau khi đã thực hiện hết các lần thử lại được cấu hình, điều này có thể do vượt quá số lần nhận tối đa trong SQS, việc gửi không thành công trên nhiều người nhận hoặc bị mã ứng dụng từ chối một cách rõ ràng. Cơ chế kích hoạt chính xác khác nhau tùy thuộc vào nền tảng; AWS SQS sử dụng chính sách chuyển hướng chỉ định số lần nhận tối đa, trong khi Azure Service Bus theo dõi số lần gửi thành công. Khi vượt quá ngưỡng đó, cơ sở hạ tầng nhắn tin sẽ tự động di chuyển hoặc sao chép tin nhắn vào hàng đợi tin nhắn lỗi tương ứng.
Cơ chế thử lại trong bộ nhớ xử lý việc khởi động lại hoặc sự cố của tiến trình như thế nào?
Chúng không làm được điều đó, và đó là hạn chế cơ bản của chúng. Bất kỳ trạng thái thử lại nào cũng chỉ tồn tại trong bộ nhớ heap của tiến trình đang chạy. Nếu ứng dụng gặp sự cố, bị tắt trong quá trình triển khai hoặc container được lên lịch lại, tất cả các lần thử lại đang chờ xử lý và ngữ cảnh của chúng sẽ biến mất. Đối với các thao tác phải tồn tại sau những sự kiện như vậy, bạn cần các cơ chế thử lại liên tục, cho dù đó là DLQ, hàng đợi công việc được hỗ trợ bởi cơ sở dữ liệu hoặc các hệ thống tác vụ phân tán như Celery hoặc Hangfire.
Liệu có thể kết hợp hàng đợi thư chết (dead letter queues) với cơ chế thử lại trong bộ nhớ (in-memory retries) trong cùng một hệ thống không?
Hoàn toàn đúng, và đây thực sự là một phương pháp tối ưu cho nhiều nhóm. Mô hình điển hình bao gồm việc thử lại trong bộ nhớ với cơ chế lùi thời gian theo cấp số nhân để phục hồi tức thì trong các sự cố tạm thời, ví dụ như ba lần thử trong vài giây. Nếu những lần thử đó thất bại, thông báo hoặc thao tác sẽ được đưa vào hàng đợi có hỗ trợ DLQ để xử lý lâu dài. Điều này mang lại tốc độ của việc thử lại trong bộ nhớ cho các sự cố ngắn hạn và sự an toàn của DLQ cho các vấn đề kéo dài.
Bạn nên thiết lập chế độ giám sát nào cho hàng đợi thư chết?
Tối thiểu, hãy cấu hình cảnh báo về độ sâu hàng đợi, tuổi của tin nhắn cũ nhất và tốc độ tin nhắn đến. Sự tăng đột biến về số lượng tin nhắn trong hàng đợi tin nhắn lỗi (DLQ) thường cho thấy một lỗi được triển khai. Cảnh báo về tuổi tin nhắn giúp phát hiện các trường hợp không có chức năng phát lại. Nhiều nhóm cũng theo dõi tỷ lệ tin nhắn trong hàng đợi DLQ so với tin nhắn được xử lý thành công như một chỉ báo về tình trạng hệ thống. CloudWatch, Azure Monitor hoặc Datadog đều có thể hiển thị các chỉ số này thông qua tích hợp với trình nhắn tin.
Liệu có giải pháp thay thế nào cho cả hàng đợi tin nhắn chết (DLQ) và cơ chế thử lại trong bộ nhớ không?
Một số mô hình giải quyết các nhu cầu tương tự. Mô hình Outbox lưu trữ các sự kiện theo dạng giao dịch cùng với dữ liệu nghiệp vụ, đảm bảo tính nguyên tử. Mô hình Saga quản lý các giao dịch phân tán kéo dài với các hành động bù trừ. Hàng đợi công việc dựa trên cơ sở dữ liệu như Sidekiq hoặc pg-boss cung cấp khả năng lưu trữ mà không cần các message broker chuyên dụng. Event sourcing tái tạo trạng thái từ nhật ký chỉ ghi thêm, làm cho ngữ nghĩa thử lại khác biệt. Lựa chọn phù hợp phụ thuộc vào yêu cầu về tính nhất quán và cơ sở hạ tầng hiện có của bạn.
Làm thế nào để phát lại an toàn các tin nhắn từ hàng đợi tin nhắn bị lỗi?
Không bao giờ phát lại trực tiếp vào hàng đợi gốc mà không kiểm tra, đó là công thức dẫn đến vòng lặp vô hạn nếu nguyên nhân gốc rễ vẫn còn tồn tại. Thay vào đó, hãy chuyển các tin nhắn DLQ sang một môi trường phân tích riêng biệt, kiểm tra các mẫu đại diện để xác định mô hình lỗi, khắc phục sự cố cơ bản, sau đó phát lại có chọn lọc theo lô với sự giám sát. AWS cung cấp các tính năng phát lại DLQ, và các công cụ như Amazon EventBridge Pipes có thể tự động hóa quy trình phát lại có điều kiện.
Chính sách thử lại tốt cho việc thử lại trong bộ nhớ là gì?
Phương pháp giảm độ trễ theo cấp số mũ kết hợp với độ trễ ngẫu nhiên (jitter) là tiêu chuẩn vàng. Nếu không có jitter, việc thử lại đồng bộ từ nhiều máy khách có thể tạo ra vấn đề "đám đông sấm sét" gây khó khăn cho việc phục hồi dịch vụ. Giới hạn độ trễ tối đa để ngăn chặn tình trạng chờ đợi không giới hạn và luôn đặt số lần thử lại tối đa. Cân nhắc sử dụng các bộ ngắt mạch (circuit breaker) để dừng hoàn toàn việc thử lại khi tỷ lệ lỗi vượt quá ngưỡng, cho phép các dịch vụ phía sau có thời gian phục hồi thay vì gây áp lực lên chúng khi chúng đang gặp sự cố.
Liệu các hàm serverless có hoạt động tốt với cơ chế thử lại trong bộ nhớ không?
Không hẳn vậy. Lambda và các hàm tương tự được thiết kế để không có trạng thái và có thời gian tồn tại ngắn. Thời gian thực thi tối đa mười lăm phút có nghĩa là cửa sổ thử lại trong bộ nhớ của bạn bị hạn chế. Quan trọng hơn, nếu Lambda thất bại, toàn bộ ngữ cảnh thực thi sẽ biến mất. Kiến trúc serverless rất ưa chuộng trạng thái được tách biệt, khiến cho DLQ hoặc các hàm bước với logic thử lại tích hợp sẵn phù hợp hơn nhiều so với các phương pháp xử lý trong bộ nhớ.
Các vấn đề liên quan đến thứ tự tin nhắn khác nhau như thế nào giữa các phương pháp này?
Hàng đợi tin nhắn lỗi (DLQ) có thể làm phức tạp việc đảm bảo thứ tự. Nếu hàng đợi chính của bạn là FIFO (vào trước ra trước), việc di chuyển tin nhắn đến và từ DLQ có thể làm gián đoạn trình tự trừ khi nền tảng đó đặc biệt duy trì thứ tự. Việc thử lại trong bộ nhớ của một người tiêu dùng duy nhất sẽ tự nhiên duy trì thứ tự cho các tin nhắn của người tiêu dùng đó, mặc dù nhiều người tiêu dùng vẫn xử lý song song. Một số hệ thống sử dụng số thứ tự hoặc thứ tự ở cấp ứng dụng để khôi phục trình tự chính xác sau bất kỳ cơ chế thử lại nào.
Những vấn đề bảo mật nào cần lưu ý đối với hàng đợi thư chết?
Hàng đợi tin nhắn lỗi (DLQ) chứa cùng dữ liệu nhạy cảm như hàng đợi tin nhắn chính, đôi khi còn nhiều hơn vì chúng bao gồm cả ngữ cảnh lỗi. Hãy áp dụng mã hóa, kiểm soát truy cập và ghi nhật ký kiểm toán giống hệt nhau. Cẩn thận với các cơ chế phát lại, việc xử lý lại các tin nhắn cũ có thể gây ra các tác dụng phụ không mong muốn nếu các hệ thống phía sau không có tính bất biến. Một số ngành công nghiệp được quản lý chặt chẽ yêu cầu quy trình phê duyệt rõ ràng trước khi có thể truy cập hoặc phát lại tin nhắn DLQ.
Khi nào bạn nên hoàn toàn tránh việc thử lại trong bộ nhớ?
Hãy bỏ qua chúng khi quá trình xử lý có tác dụng phụ không mang tính bất biến, việc tính phí thẻ tín dụng hai lần do thử lại là thảm họa. Tránh sử dụng chúng khi ngữ nghĩa "chỉ một lần" quan trọng và bạn thiếu tính năng loại bỏ dữ liệu trùng lặp. Đừng dựa vào chúng cho các hoạt động chạy dài mà quá trình có thể không tồn tại đủ lâu để hoàn thành các lần thử lại. Và đừng sử dụng chúng khi các nhóm vận hành cần nắm được các mẫu lỗi mà không cần triển khai các thay đổi mã.
Chi phí so sánh như thế nào ở quy mô doanh nghiệp?
Một thiết lập AWS điển hình với hàng đợi tiêu chuẩn SQS và DLQ có thể tốn vài đô la cho mỗi triệu tin nhắn, cộng thêm chi phí lưu trữ cho các tin nhắn được giữ lại. Đối với một hệ thống xử lý hàng tỷ tin nhắn mỗi tháng, chi phí này trở nên đáng kể. Việc thử lại trong bộ nhớ chuyển chi phí sang điện toán, mà bạn đã phải trả tiền rồi. Tuy nhiên, việc thử lại liên tục có thể làm tăng đột biến CPU và bộ nhớ, có khả năng yêu cầu kích thước máy chủ lớn hơn. Hầu hết các phân tích tổng chi phí sở hữu đều ưu tiên sử dụng bộ nhớ cho các tác vụ có khối lượng lớn nhưng độ quan trọng thấp và sử dụng DLQ cho các quy trình công việc thiết yếu có khối lượng thấp hơn.
Phán quyết
Hãy chọn hàng đợi thư chết (dead letter queue - DLQ) khi việc mất mát tin nhắn là không thể chấp nhận được và các nhóm vận hành cần có ranh giới lỗi rõ ràng để quản lý. Chọn phương pháp thử lại trong bộ nhớ (in-memory retries) khi tốc độ là yếu tố quan trọng nhất, sự đơn giản của cơ sở hạ tầng được đánh giá cao và các lỗi chỉ là tạm thời chứ không phải mang tính hệ thống. Nhiều hệ thống đã hoàn thiện thực tế kết hợp cả hai, sử dụng phương pháp thử lại trong bộ nhớ để phục hồi ngay lập tức và DLQ như một biện pháp dự phòng cuối cùng.