Sự khác biệt giữa Amazon SNS và Amazon SQS là gì?


438

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?


Những gì tôi hiểu từ nhận xét của bạn được mô tả trong dòng chảy sau đây .. nó có đúng không? Nhà xuất bản -> SNS -> SQL (giữ tin nhắn trong hàng đợi) -> Người đăng ký (hiện ngoại tuyến)
friendyogi


@friendyogi bạn có nghĩa là SQS chứ không phải SQL?
elena

Câu trả lời:


624

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.


3
Vì vậy, về cơ bản, để thực hiện một cái gì đó như tin nhắn thông báo đẩy, nên sử dụng SNS và SQS, vì vậy các lần đẩy với sn sẽ được xếp hàng cho đến khi người dùng chỉ lấy chúng từ hàng đợi? Có thể tạo một hàng đợi cho mỗi người dùng?
Nick Ginanto

2
Vâng. Bạn có thể có nhiều người đăng ký như bạn muốn cho SNS. Bạn có thể có thông báo gửi đến nhiều hàng đợi.
Srikanth

Xin lỗi, tôi thấy câu hỏi này đã cũ nhưng tôi đang tự hỏi về SQS nó có biết và lưu trữ tin nhắn ngoại tuyến không? Vì APNS không lưu trữ tin nhắn ngoại tuyến, chỉ có tin nhắn mới nhất. Nó có biết khi nào các thiết bị IOS ngoại tuyến và lưu trữ các tin nhắn ngoại tuyến ngay lập tức không? Và gửi nó ra sau khi các thiết bị trở lại trực tuyến?
Giăng

2
@NickGinanto Hàng đợi cho mỗi người dùng có thể không phải là những gì bạn muốn. Bạn có thể muốn một hàng đợi cho mỗi dịch vụ xử lý các tin nhắn cụ thể của người dùng. Sơ đồ này có thể giúp: aws.amazon.com/bloss/aws/ Từ
Trenton

2
Có lẽ nên lưu ý rằng vào giữa năm 2018, SQS có thể kích hoạt lambdas và do đó gần giống với pubsub trong trường hợp đó.
cyberwombat

238

Đây là một so sánh của hai:

Loại thực thể

  • SQS: Hàng đợi (Tương tự như JMS)
  • SNS: Chủ đề (Hệ thống quán rượu / phụ)

Tiêu thụ tin nhắn

  • SQS: Cơ chế kéo - Người tiêu dùng thăm dò ý kiến ​​và kéo tin nhắn từ SQS
  • SNS: Cơ chế đẩy - SNS Đẩy tin nhắn đến người tiêu dùng

Ca sử dụng

  • SQS: Tách 2 ứng dụng và cho phép xử lý không đồng bộ song song
  • SNS: Fanout - Xử lý cùng một tin nhắn theo nhiều cách

Kiên trì

  • SQS: Tin nhắn được duy trì trong một khoảng thời gian (có thể định cấu hình) nếu không có người tiêu dùng nào
  • SNS: Không kiên trì. Bất cứ người tiêu dùng nào có mặt tại thời điểm tin nhắn đến đều nhận được tin nhắn và tin nhắn sẽ bị xóa. Nếu không có người tiêu dùng có sẵn thì tin nhắn sẽ bị mất.

Loại người tiêu dùng

  • SQS: Tất cả người tiêu dùng được cho là giống hệt nhau và do đó xử lý các tin nhắn theo cùng một cách chính xác
  • SNS: Người tiêu dùng có thể xử lý tin nhắn theo nhiều cách khác nhau

Ứng dụng mẫu

  • SQS: Khung công việc: Các công việc được gửi tới SQS và người tiêu dùng ở đầu kia có thể xử lý các công việc không đồng bộ. Nếu tần suất công việc tăng, số lượng người tiêu dùng đơn giản có thể được tăng lên để đạt được thông lượng tốt hơn.
  • SNS: Xử lý ảnh. Nếu ai đó tải hình ảnh lên S3 thì hãy watermark hình ảnh đó, tạo hình thu nhỏ và gửi email Cảm ơn. Trong trường hợp đó, S3 có thể xuất bản thông báo cho Chủ đề SNS với 3 người tiêu dùng nghe nó. Người thứ nhất làm mờ hình ảnh, người thứ hai tạo hình thu nhỏ và người thứ ba gửi email Cảm ơn. Tất cả đều nhận được cùng một thông điệp (URL hình ảnh) và xử lý song song.

1
nếu không có người tiêu dùng nào thì có cơ chế thử lại, thậm chí giá trị mặc định là 10 lần thử lại.
Arpit Solanki

Đẹp chi tiết bài. Chúng tôi có các thông điệp khác nhau cho những người tiêu dùng khác nhau - Chúng tôi nên làm gì - sử dụng SNS và xác định các chủ đề khác nhau hoặc sử dụng SQS và xác định các hàng đợi khác nhau? Một chủ đề / hàng đợi mặc dù có thể có một hoặc nhiều người tiêu dùng.
Andy Dufresne

Nếu yêu cầu của bạn là quá nhiều / hàng đợi của bạn nên có nhiều hơn một người tiêu dùng, tôi cho rằng bạn đang nói rằng cùng một thông điệp sẽ được phát cho nhiều người tiêu dùng ... Và nếu giả định này của tôi là chính xác thì sử dụng SNS là lựa chọn duy nhất có sẵn cho bạn
Arafat Nalkhande

Tôi không nghĩ rằng "SQS: Tất cả người tiêu dùng được cho là giống hệt nhau và do đó xử lý các thông điệp theo cùng một cách chính xác" điều này là đúng. Tôi đã sử dụng SQS trong đó hai dịch vụ AWS khác nhau đang nhận từ hàng đợi SQS và xử lý tin nhắn theo cách riêng của họ (logic ứng dụng khác nhau trong các dịch vụ khác nhau đó). Tui bỏ lỡ điều gì vậy?
nad

@nad Tôi sẽ cần hiểu trường hợp sử dụng của bạn nhưng với tôi, không có nghĩa là 2 người tiêu dùng SQS đang xử lý tin nhắn theo những cách không giống nhau. Đó là trường hợp sử dụng cho SNS
Arafat Nalkhande

31

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


29

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.

  1. 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 .

  2. " 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 .

  3. 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 đó.


29

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:

  • nhiều người đăng ký là một yêu cầu
  • gửi SMS / E-mail ra khỏi hộp rất tiện dụng

Sử dụng SQS nếu:

  • chỉ cần một người đăng ký
  • đợt là quan trọng

4

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/


SQS không thể gửi tin nhắn đến nhiều hệ thống vì nó không loại bỏ các tin nhắn. Có, nhiều người thăm dò ý kiến ​​có thể lấy tin nhắn từ nó, nhưng nếu một trong những người tiêu dùng xóa tin nhắn thì những người đăng ký khác sẽ không thể sử dụng lại tin nhắn đó một lần nữa. SNS được ưu tiên hơn SQS nếu bạn muốn đạt được mô hình quạt ra. Ngoài ra, nếu 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.
Thales Minussi

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ừ aws.amazon.com/sns/faqs
Krunal Barot

Nếu đó là những gì bạn muốn nói (SNS -> nhiều hàng đợi SQS) thì vui lòng chỉnh sửa câu trả lời của bạn và tôi sẽ vui vẻ xóa downvote của tôi. Cách bạn đặt nó, có vẻ như SQS có thể quạt ra.
Thales Minussi

1
Vâng .. đó là nơi nhầm lẫn. Tôi đã chỉnh sửa nó .. Cảm ơn :)
Krunal Barot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.