Tôi không hiểu khi nào tôi sẽ sử dụng SNS so với SQS và tại sao chúng luôn được ghép với nhau?
Tôi không hiểu khi nào tôi sẽ sử dụng SNS so với SQS và tại sao chúng luôn được ghép với nhau?
Câu trả lời:
SNS là một hệ thống đăng ký xuất bản phân tán . Tin nhắn được đẩy đến những người đăng ký và khi chúng được nhà xuất bản gửi đến SNS.
SQS là hệ thống xếp hàng phân tán . Tin nhắn KHÔNG được đẩy đến người nhận. Người nhận phải bỏ phiếu hoặc lấy tin nhắn từ SQS . Tin nhắn không thể được nhận bởi nhiều người nhận cùng một lúc. Bất kỳ một người nhận có thể nhận được một tin nhắn, xử lý và xóa nó. Những người nhận khác không nhận được tin nhắn tương tự sau đó. Bỏ phiếu vốn đã giới thiệu một số độ trễ trong việc gửi tin nhắn trong SQS không giống như SNS nơi tin nhắn được đẩy ngay lập tức đến người đăng ký. SNS hỗ trợ một số điểm cuối như email, sms, điểm cuối http và SQS. Nếu bạn muốn số lượng và loại thuê bao không xác định để nhận tin nhắn, bạn cần SNS.
Bạn không cần phải kết hợp SNS và SQS luôn. Bạn có thể yêu cầu SNS gửi tin nhắn đến email, sms hoặc điểm cuối http ngoài SQS. Có những lợi thế để ghép SNS với SQS. Bạn có thể không muốn một dịch vụ bên ngoài tạo kết nối đến máy chủ của mình (tường lửa có thể chặn tất cả các kết nối đến máy chủ của bạn từ bên ngoài). Điểm cuối của bạn có thể chết vì khối lượng tin nhắn lớn. Email và SMS có thể không phải là sự lựa chọn của bạn để xử lý tin nhắn một cách nhanh chóng. Bằng cách ghép SNS với SQS, bạn có thể nhận được tin nhắn theo tốc độ của mình. Nó cho phép khách hàng ngoại tuyến, chịu được các lỗi mạng và máy chủ. Bạn cũng đạt được giao hàng đảm bảo. Nếu bạn định cấu hình SNS để gửi tin nhắn đến điểm cuối http hoặc email hoặc SMS, một số lỗi gửi tin nhắn có thể khiến tin nhắn bị hủy.
SQS chủ yếu được sử dụng để tách các ứng dụng hoặc tích hợp các ứng dụng. Tin nhắn có thể được lưu trữ trong SQS trong khoảng thời gian ngắn (tối đa 14 ngày). SNS phân phối một số bản sao của tin nhắn cho một số thuê bao. Ví dụ: giả sử bạn muốn sao chép dữ liệu do ứng dụng tạo ra sang một số hệ thống lưu trữ. Bạn có thể sử dụng SNS và gửi dữ liệu này đến nhiều người đăng ký, mỗi lần sao chép các tin nhắn mà họ nhận được đến các hệ thống lưu trữ khác nhau (s3, đĩa cứng trên máy chủ, cơ sở dữ liệu, v.v.) của bạn.
Đây là một so sánh của hai:
Loại thực thể
Tiêu thụ tin nhắn
Ca sử dụng
Kiên trì
Loại người tiêu dùng
Ứng dụng mẫu
Từ tài liệu aws:
Amazon SNS cho phép các ứng dụng gửi các tin nhắn quan trọng về thời gian tới nhiều người đăng ký thông qua cơ chế đẩy đẩy trên mạng, loại bỏ sự cần thiết phải kiểm tra định kỳ hoặc thăm dò ý kiến về các bản cập nhật.
Amazon SQS là dịch vụ xếp hàng tin nhắn được sử dụng bởi các ứng dụng phân tán để trao đổi tin nhắn thông qua mô hình bỏ phiếu và có thể được sử dụng để tách riêng các thành phần gửi và nhận mà không yêu cầu mỗi thành phần phải có sẵn.
http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
AWS SNS là mạng thuê bao của nhà xuất bản, nơi người đăng ký có thể đăng ký chủ đề và sẽ nhận được tin nhắn bất cứ khi nào nhà xuất bản xuất bản chủ đề đó.
AWS SQS là một dịch vụ xếp hàng, lưu trữ các tin nhắn trong hàng đợi. SQS không thể gửi bất kỳ tin nhắn nào, trong đó cần có dịch vụ bên ngoài (lambda, EC2, v.v.) để thăm dò SQS và lấy tin nhắn từ SQS.
SNS và SQS có thể được sử dụng cùng nhau vì nhiều lý do.
Có thể có nhiều loại thuê bao khác nhau, trong đó một số người cần gửi tin nhắn ngay lập tức, trong đó một số sẽ yêu cầu tin nhắn tồn tại, để sử dụng sau thông qua bỏ phiếu. Xem liên kết này .
" Mẫu Fanout ." Điều này là để xử lý tin nhắn không đồng bộ. Khi một tin nhắn được xuất bản lên SNS, nó có thể phân phối nó đến nhiều hàng đợi SQS song song. Điều này có thể tuyệt vời khi tải hình thu nhỏ trong một ứng dụng song song, khi hình ảnh được công bố. Xem liên kết này .
Lưu trữ liên tục . Khi một dịch vụ sẽ xử lý một tin nhắn không đáng tin cậy. Trong trường hợp như thế này, nếu SNS đẩy thông báo đến Dịch vụ và dịch vụ đó không khả dụng, thì thông báo sẽ bị mất. Do đó, chúng ta có thể sử dụng SQS như một bộ lưu trữ liên tục và sau đó xử lý nó sau đó.
Các câu trả lời trên chủ đề này hơi lỗi thời, vì vậy tôi đã quyết định thêm hai xu của mình vào đó:
Bạn có thể xem SNS như một chủ đề truyền thống mà bạn có thể có nhiều Người đăng ký. Bạn có thể có những người đăng ký không đồng nhất cho một chủ đề SNS nhất định, bao gồm Lambda và SQS, chẳng hạn. Bạn cũng có thể gửi tin nhắn SMS hoặc thậm chí e-mail ra khỏi hộp bằng SNS. Một điều cần xem xét trong SNS là chỉ một tin nhắn (thông báo) được nhận cùng một lúc, do đó bạn không thể tận dụng lợi thế từ việc tạo khối.
Mặt khác, SQS không gì khác ngoài Hàng đợi, nơi bạn lưu trữ tin nhắn và đăng ký một người tiêu dùng (vâng, bạn có thể có N người tiêu dùng vào một hàng đợi SQS, nhưng sẽ rất khó để quản lý việc xem xét tất cả người tiêu dùng cần đọc tin nhắn ít nhất một lần, vì vậy, tốt hơn hết là SNS kết hợp với SQS cho trường hợp sử dụng này, trong đó SNS sẽ đẩy thông báo đến hàng đợi N SQS và mỗi hàng đợi sẽ chỉ có một người đăng ký) để xử lý các tin nhắn này. Kể từ ngày 28 tháng 6 năm 2018, AWS hỗ trợ Trình kích hoạt Lambda cho SQS , nghĩa là bạn không phải thăm dò ý kiếncho tin nhắn nữa. Hơn nữa, bạn có thể định cấu hình DLQ trên hàng đợi SQS nguồn của mình để gửi tin nhắn đến trong trường hợp thất bại. Trong trường hợp thành công, các tin nhắn sẽ tự động bị xóa (đây là một cải tiến tuyệt vời khác), vì vậy bạn không phải lo lắng về các tin nhắn đã được xử lý được đọc lại trong trường hợp bạn quên xóa chúng theo cách thủ công. Tôi đề nghị hãy xem Lambda Retry Behaviorđể hiểu rõ hơn về cách thức hoạt động của nó. Một lợi ích tuyệt vời của việc sử dụng SQS là nó cho phép xử lý hàng loạt. Mỗi lô có thể chứa tối đa 10 tin nhắn, vì vậy nếu 100 tin nhắn đến cùng một lúc trong hàng đợi SQS của bạn, thì 10 hàm Lambda sẽ quay vòng (xem xét hành vi tự động mở rộng mặc định cho Lambda) và chúng sẽ xử lý 100 tin nhắn này (tiếp tục lưu ý rằng đây là con đường hạnh phúc vì trong thực tế, một vài chức năng Lambda có thể tăng tốc đọc ít hơn 10 tin nhắn trong lô, nhưng bạn hiểu ý). Tuy nhiên, nếu bạn đã đăng 100 tin nhắn này lên SNS, 100 chức năng Lambda sẽ tăng lên, làm tăng chi phí không cần thiết và sử dụng đồng thời Lambda của bạn. Tuy nhiên, nếu bạn vẫn đang chạy các máy chủ truyền thống (như phiên bản EC2), bạn vẫn sẽ cần thăm dò các tin nhắn và quản lý chúng theo cách thủ công.
Bạn cũng có hàng đợi FIFO SQS , đảm bảo thứ tự gửi tin nhắn. Đây không phải là trình kích hoạt được hỗ trợ bởi Lambda, do đó, khi chọn loại Hàng đợi này, hãy nhớ rằng việc bỏ phiếu vẫn cần thiết cũng như phải xóa các tin nhắn theo cách thủ công.
Mặc dù có một số trùng lặp trong các trường hợp sử dụng của họ, cả SQS và SNS đều có điểm sáng riêng.
Sử dụng SNS nếu:
Sử dụng SQS nếu:
Nói một cách đơn giản, SNS - gửi tin nhắn đến thuê bao bằng cơ chế đẩy và không cần kéo. SQS - đó là một dịch vụ hàng đợi tin nhắn được sử dụng bởi các ứng dụng phân tán để trao đổi tin nhắn thông qua mô hình bỏ phiếu và có thể được sử dụng để tách rời các thành phần gửi và nhận.
Một mô hình phổ biến là sử dụng SNS để xuất bản tin nhắn lên hàng đợi SQS của Amazon để gửi tin nhắn đến một hoặc nhiều thành phần hệ thống một cách không đồng bộ. Tham khảo từ https://aws.amazon.com/sns/faqs/
visibilityTimeout
được đặt, hơn không có hệ thống nào khác có thể sử dụng tin nhắn một khi nó được xử lý bởi hệ thống khác.