Hàng đợi thông báo không gửi được là gì?
Hàng đợi thông báo không gửi được (DLQ) là một loại hàng đợi thông điệp đặc biệt tạm thời lưu trữ các thông điệp mà hệ thống phần mềm không thể xử lý do lỗi. Hàng đợi thông điệp là các thành phần phần mềm hỗ trợ giao tiếp không đồng bộ trong một hệ thống phân tán. Hàng đợi này cho phép bạn gửi thông điệp giữa các dịch vụ phần mềm với số lượng bất kỳ và không yêu cầu người nhận thông điệp luôn trong tình trạng sẵn sàng. Cụ thể, hàng đợi thông báo không gửi được lưu trữ các thông điệp lỗi không có điểm đích hoặc thông điệp mà người nhận dự định không xử lý được.
Tại sao hàng đợi thông báo không gửi được lại quan trọng?
Hàng đợi thông báo không gửi được (DLQ) tồn tại song song với hàng đợi thông điệp thông thường. Chúng hoạt động như kho lưu trữ tạm thời cho các thông điệp lỗi và không thành công. DLQ ngăn hàng đợi nguồn không bị quá tải bởi các thông điệp chưa được xử lý.
Ví dụ: hãy xem xét một phần mềm có hàng đợi thông điệp thông thường và một DLQ. Phần mềm sử dụng hàng đợi thông thường để giữ thông điệp phần mềm dự định gửi đến điểm đích. Nếu người nhận không phản hồi hoặc xử lý các thông điệp được gửi, phần mềm sẽ di chuyển chúng vào hàng đợi thông báo không gửi được.
Có hai nguyên nhân tiềm ẩn khi thông điệp di chuyển vào quy trình DLQ: nội dung của thông điệp lỗi và có sự thay đổi trong hệ thống của người nhận.
Nội dung thông điệp lỗi
Một thông điệp sẽ di chuyển vào DLQ nếu thông điệp được truyền có lỗi. Điều kiện phần cứng, phần mềm và mạng có thể làm hỏng dữ liệu được gửi. Ví dụ: Lỗi phần cứng sẽ làm thay đổi phần nào một số thông tin trong quá trình truyền. Hỏng dữ liệu bất ngờ có thể khiến người nhận từ chối hoặc bỏ qua thông điệp.
Có sự thay đổi trong hệ thống của người nhận
Một thông điệp cũng có thể di chuyển vào DLQ nếu phần mềm nhận đã có những thay đổi mà người gửi không biết. Ví dụ: bạn có thể cập nhật thông tin của khách hàng bằng cách gửi thông điệp cho CUST_ID_005. Tuy nhiên, người nhận có thể không xử lý được thông điệp đến vì khách hàng đã bị xóa khỏi cơ sở dữ liệu của hệ thống.
Lợi ích của hàng đợi thông báo không gửi được là gì?
Tiếp theo, chúng ta thảo luận về những lợi ích của hàng đợi thông báo không gửi được (DLQ).
Giảm chi phí giao tiếp
Hàng đợi thông điệp thông thường hoặc tiêu chuẩn tiếp tục xử lý thông điệp cho đến khi hết hạn thời gian lưu giữ. Điều này giúp đảm bảo xử lý thông điệp liên tục và giảm thiểu nguy cơ hàng đợi của bạn bị chặn.
Tuy nhiên, nếu hệ thống của bạn xử lý hàng nghìn thông điệp, một số lượng lớn thông điệp lỗi sẽ làm tăng chi phí chung của giao tiếp và trở thành gánh nặng cho hệ thống giao tiếp. Thay vì cố gắng xử lý các thông điệp không thành công cho đến khi chúng hết hạn, tốt hơn là di chuyển chúng vào hàng đợi thông báo không gửi được sau một vài lần thử xử lý.
Cải thiện khắc phục sự cố
Nếu bạn di chuyển thông điệp lỗi đến DLQ, điều này cho phép các nhà phát triển tập trung xác định nguyên nhân gây ra lỗi. Họ có thể điều tra lý do tại sao người nhận không thể xử lý thông điệp, khắc phục và thử gửi thông điệp lại.
Ví dụ: một phần mềm ngân hàng có thể gửi hàng nghìn ứng dụng thẻ tín dụng hàng ngày đến hệ thống backend để phê duyệt. Từ đó, hệ thống backend nhận được các ứng dụng nhưng không thể xử lý tất cả chúng vì thông tin không đầy đủ. Thay vì cứ mãi thử thực hiện, phần mềm sẽ di chuyển thông điệp đến DLQ cho đến khi đội ngũ CNTT giải quyết vấn đề. Điều này cho phép hệ thống xử lý và gửi các thông điệp còn lại mà không gặp vấn đề về hiệu năng.
Khi nào nên sử dụng hàng đợi thông báo không gửi được?
Bạn có thể sử dụng hàng đợi thông báo không gửi được (DLQ) nếu hệ thống của bạn gặp các vấn đề sau.
Hàng đợi không được sắp xếp thứ tự
Bạn có thể tận dụng DLQ khi các ứng dụng của bạn không phụ thuộc vào sắp xếp thứ tự. Mặc dù DLQ giúp bạn khắc phục các thao tác truyền thông điệp không chính xác nhưng bạn nên tiếp tục giám sát hàng đợi của mình và gửi lại thông điệp không thành công.
Hàng đợi FIFO
Sắp xếp thứ tự thông điệp rất quan trọng trong hàng đợi vào trước ra trước (FIFO). Mọi thông điệp phải được xử lý trước khi gửi thông điệp tiếp theo. Bạn có thể sử dụng hàng đợi thông báo không gửi được với hàng đợi FIFO, nhưng triển khai DLQ cũng phải là FIFO.
Khi nào không nên sử dụng hàng đợi thông báo không gửi được?
Bạn không nên sử dụng hàng đợi thông báo không gửi được (DLQ) với hàng đợi không được sắp xếp thứ tự khi bạn muốn có thể tiếp tục thử truyền lại thông điệp vô thời hạn. Ví dụ: không sử dụng hàng đợi thông báo không gửi được nếu chương trình của bạn phải chờ một quá trình phụ thuộc chuyển sang trạng thái hoạt động hoặc sẵn sàng.
Tương tự, bạn không nên sử dụng hàng đợi thông báo không gửi được với hàng đợi vào trước ra trước (FIFO) nếu bạn không muốn phá vỡ thứ tự chính xác của thông điệp hoặc thao tác. Ví dụ: không sử dụng hàng đợi thông báo không gửi được với hướng dẫn trong danh sách quyết định chỉnh sửa (EDL) cho bộ chỉnh sửa video. Trong trường hợp này, bằng cách thay đổi thứ tự chỉnh sửa, bạn sẽ thay đổi bối cảnh của các chỉnh sửa tiếp theo.
Hàng đợi thông báo không gửi được hoạt động như thế nào?
Đa phần, hàng đợi thông báo không gửi được (DLQ) hoạt động giống như một hàng đợi thông điệp thông thường. Hàng đợi này lưu trữ các thông điệp lỗi cho đến khi bạn xử lý chúng để điều tra lý do gặp lỗi.
Tiếp theo, chúng ta thảo luận về thiết lập chuyển tiếp cho DLQ và cách thông điệp di chuyển vào và ra khỏi DLQ.
Tạo thiết lập chuyển tiếp
Phần mềm di chuyển thông điệp đến một hàng đợi thông báo không gửi được bằng cách tham khảo thiết lập chuyển tiếp. Thiết lập chuyển tiếp bao gồm các quy tắc xác định thời điểm phần mềm nên di chuyển thông điệp vào hàng đợi thông báo không gửi được. Chủ yếu bằng cách xác định số lần thử lại tối đa, thiết lập chuyển tiếp quy định cách tương tác với nhau giữa hàng đợi nguồn và hàng đợi thông báo không gửi được.
Ví dụ: nếu nhà phát triển của bạn đặt số lần thử lại tối đa là một, hệ thống sẽ di chuyển tất cả các lượt gửi không thành công đến DLQ sau một lần thử. Một số lượt gửi không thành công có thể là do quá tải mạng tạm thời hoặc các vấn đề về phần mềm. Lỗi này sẽ gửi nhiều thông điệp không gửi được đến DLQ. Để đạt được sự cân bằng phù hợp, các nhà phát triển tối ưu hóa số lần thử lại tối đa để đảm bảo phần mềm thực hiện đủ số lần thử lại trước khi di chuyển thông điệp đến DLQ.
Di chuyển thông điệp vào hàng đợi thông báo không gửi được
Các lần gửi giữa người gửi và người nhận có thể không thành công vì nhiều lý do:
- Người nhận không nhận được thông điệp do thông điệp không tồn tại.
- Thông điệp chứa lỗi.
- Thông điệp vượt quá giới hạn độ dài của hàng đợi hoặc thông điệp. Ví dụ: một số người nhận không thể xử lý thông điệp vượt quá kích thước cụ thể.
- Thời gian tồn tại (TTL) của thông điệp đã hết hạn. TTL là giá trị cho biết một gói dữ liệu cụ thể sẽ hợp lệ trên mạng trong bao lâu.
Di chuyển thông điệp ra khỏi hàng đợi thông báo không gửi được
Khi thông điệp di chuyển vào hàng đợi thông báo không gửi được, nhà phát triển sẽ kiểm tra các thông điệp lỗi để xác định nguyên nhân. Thông điệp trong DLQ có thể chứa thông tin chuyên sâu có giá trị để ngăn chặn tình trạng tái diễn các vấn đề tương tự trong tương lai. Sau khi nhà phát triển phân tích và khắc phục các vấn đề, hệ thống sẽ di chuyển các thông điệp ra khỏi DLQ và di chuyển vào hàng đợi nguồn. Thao tác này cho phép người gửi tiếp tục xử lý thông điệp.
AWS có thể hỗ trợ các yêu cầu hàng đợi thông báo không gửi được như thế nào?
Dịch vụ hàng đợi đơn giản của Amazon (Amazon SQS) cung cấp một cách tiếp cận có quy mô linh hoạt để trao đổi thông điệp giữa các hệ thống phân tán trên quy mô lớn. Các nhà phát triển sử dụng Amazon SQS để xây dựng các ứng dụng web đáng tin cậy với hàng đợi tiêu chuẩn được quản lý toàn phần và hàng đợi vào trước ra trước (FIFO).
Dưới đây là những lợi ích khác của Amazon SQS:
- Amazon SQS cho phép các hệ thống tạo ra một số lượng hàng đợi thông điệp không giới hạn
- Các nhà phát triển có thể truyền thông điệp hàng loạt để tiết kiệm chi phí
- Amazon SQS hỗ trợ khóa thông điệp, ngăn nhiều máy tính đồng thời xử lý cùng một thông điệp
Bắt đầu sử dụng Amazon Web Services (AWS) bằng cách tạo tài khoản AWS ngay hôm nay.