Amazon SNS ve Amazon SQS arasındaki fark nedir?


438

SNS'yi SQS'ye karşı ne zaman kullanacağımı anlamıyorum ve neden hep birlikte çalışıyorlar?


Yorumunuzdan anladığım şu akışta açıklanıyor .. doğru mu? Yayıncı -> SNS -> SQL (mesajları kuyrukta tutarak) -> Abone (şu anda çevrimdışı)
friendyogi


@friendyogi SQL değil SQS mi demek istediniz?
elena

Yanıtlar:


624

SNS dağıtılmış bir yayınlama-abone olma sistemidir. Mesajlar edilir itti onlar SNS için yayıncılar tarafından gönderildiğinde olarak abonelere ve.

SQS dağıtılmış kuyruk sistemidir. Mesajlar alıcılara SÜRÜLMEZ. Alıcılar SQS'den gelen mesajları yoklamalı veya almalıdır . Mesajlar aynı anda birden fazla alıcı tarafından alınamaz. Herhangi bir alıcı bir mesaj alabilir, işleyebilir ve silebilir. Diğer alıcılar daha sonra aynı mesajı almaz. Yoklama, mesajların hemen abonelere iletildiği SNS'den farklı olarak SQS'de mesaj tesliminde bazı gecikmeler ortaya çıkarır. SNS, e-posta, sms, http bitiş noktası ve SQS gibi çeşitli bitiş noktalarını destekler. Bilinmeyen sayıda ve türde abonenin ileti almasını istiyorsanız, SNS'ye ihtiyacınız vardır.

Her zaman SNS ve SQS'yi birleştirmek zorunda değilsiniz. SNS'in SQS dışında e-posta, sms veya http bitiş noktasına mesaj göndermesini sağlayabilirsiniz. SNS'yi SQS ile birleştirmenin avantajları vardır. Harici bir hizmetin ana bilgisayarlarınıza bağlantı yapmasını istemeyebilirsiniz (güvenlik duvarı ana makinenize gelen tüm bağlantıları dışarıdan engelleyebilir). Bitiş noktanız sadece yoğun mesajlar yüzünden ölebilir. E-posta ve SMS, mesajları hızlı bir şekilde işleme koyma seçiminiz olmayabilir. SNS'yi SQS ile birleştirerek, mesajlarınızı istediğiniz hızda alabilirsiniz. İstemcilerin çevrimdışı olmalarını, ağ ve ana bilgisayar hatalarına karşı toleranslı olmalarını sağlar. Ayrıca garantili teslimat da elde edersiniz. SNS'yi bir http bitiş noktasına veya e-postaya veya SMS'e mesaj gönderecek şekilde yapılandırırsanız, mesaj gönderme işleminde birkaç başarısızlık mesajın düşmesine neden olabilir.

SQS esas olarak uygulamaları ayrıştırmak veya uygulamaları entegre etmek için kullanılır. Mesajlar SQS'de kısa bir süre (en fazla 14 gün) saklanabilir. SNS mesajın birkaç kopyasını birkaç aboneye dağıtır. Örneğin, bir uygulama tarafından oluşturulan verileri çeşitli depolama sistemlerine çoğaltmak istediğinizi varsayalım. SNS'yi kullanabilir ve bu verileri, her biri aldığı iletileri farklı depolama sistemlerine (s3, ana makinenizdeki sabit disk, veritabanı vb.) Çoğaltarak birden çok aboneye gönderebilirsiniz.


3
temelde, push bildirim mesajları gibi bir şey uygulamak için, SNS ve SQS kullanılması tavsiye edilir, böylece kullanıcı sadece kuyruktan almak için sns ile push kuyruğa alınır? Kullanıcı başına kuyruk oluşturmak mümkün müdür?
Nick Ginanto

2
Evet. SNS için istediğiniz kadar aboneniz olabilir. Birden fazla kuyruğa gönderilen bildirimleriniz olabilir.
Srikanth

Merhaba üzgünüm, bu sorunun eski olduğunu görüyorum ama çevrimdışı mesajları biliyor ve saklıyor mu SQS merak ediyorum? APNS çevrimdışı mesajları saklamadığından yalnızca en yeni mesajı saklar. IOS cihazlarının ne zaman çevrimdışı olduğunu ve çevrimdışı mesajları hemen sakladığını biliyor muydu? Cihazlar tekrar çevrimiçi olduğunda gönderilsin mi?
John

2
@NickGinanto Kullanıcı başına kuyruk muhtemelen istediğiniz şey değildir. Muhtemelen her hizmet için kullanıcıya özel iletileri işleyen bir kuyruk istersiniz. Bu diyagram yardımcı olabilir: aws.amazon.com/blogs/aws/…
Trenton

2
Muhtemelen 2018 ortasından itibaren SQS'nin lambdaları tetikleyebileceği ve bu durumda bir pubsub'a daha yakın olduğu belirtilmelidir.
cyberwombat

238

İşte ikisinin bir karşılaştırması:

Varlık Türü

  • SQS: Sıra (JMS'ye benzer)
  • SNS: Konu (Pub / Sub sistemi)

Mesaj tüketimi

  • SQS: Çekme Mekanizması - Tüketiciler SQS'den bilgi alır ve alır
  • SNS: İtme Mekanizması - SNS Mesajları tüketicilere iletir

Kullanım Durumu

  • SQS: 2 uygulamanın ayrıştırılması ve paralel asenkron işlemeye izin verilmesi
  • SNS: Fanout - Aynı iletiyi birden çok şekilde işleme

süreklilik

  • SQS: Herhangi bir tüketici yoksa mesajlar (yapılandırılabilir) bir süre devam eder
  • SNS: Kalıcılık yok. Mesaj geldiğinde hangi tüketici mevcutsa mesajı alır ve mesaj silinir. Kullanılabilir tüketici yoksa mesaj kaybolur.

Tüketici Türü

  • SQS: Tüm tüketiciler aynı olmalı ve böylece mesajları aynı şekilde işleyecekler.
  • SNS: Tüketiciler mesajları farklı şekillerde işleyebilir

Örnek uygulamalar

  • SQS: İşler çerçevesi: İşler SQS'ye gönderilir ve diğer uçtaki tüketiciler işleri eşzamansız olarak işleyebilir. İş sıklığı artarsa, daha iyi verim elde etmek için tüketici sayısı arttırılabilir.
  • SNS: Görüntü işleme. Birisi S3'e bir resim yüklerse, o resmi filigran haline getirirse, bir küçük resim oluşturun ve ayrıca bir Teşekkür E-postası gönderin. Bu durumda S3, bir SNS Konusunda 3 tüketiciyi dinleyerek bildirim yayınlayabilir. Birincisi görüntüyü filigranlar, ikincisi bir küçük resim oluşturur ve üçüncüsü Teşekkürler e-postası gönderir. Hepsi aynı mesajı (resim URL'si) alır ve işlemlerini paralel olarak yapar.

1
hiçbir tüketici mevcut değilse, bir yeniden deneme mekanizması vardır, varsayılan değer bile 10 yeniden denemedir.
Arpit Solanki

Güzel detaylı yazı. Farklı tüketiciler için farklı mesajlarımız var - Ne yapmalıyız - SNS kullanın ve farklı konular tanımlayın veya SQS kullanın ve farklı kuyruklar tanımlayın? Bir konunun / kuyruğun bir veya daha fazla tüketicisi olabilir.
Andy Dufresne

Eğer gereksiniminiz çok yönlülüğünüzün / sıranızın birden fazla tüketiciye sahip olması gerektiğinde, aynı mesajın birden fazla müşteriye yayınlanması gerektiğini söylüyorum ... Ve bu benim varsayımım doğruysa SNS kullanmak, Eğer
Arafat Nalkhande

Ben "SQS: Tüm tüketiciler aynı olması gerekiyordu ve bu nedenle mesajları aynı şekilde işlemek" olduğunu düşünmüyorum bu doğru. İki farklı AWS hizmetinin SQS kuyruğundan aldığı ve mesajı kendi yollarıyla işlediği SQS'yi kullandım (bu farklı servislerdeki farklı uygulama mantığı). Bir şey mi kaçırıyorum?
nad

@nad Kullanım durumunuzu anlamam gerekecek, ancak bana göre 2 SQS tüketicisinin mesajları özdeş olmayan yollarla işlemesi mantıklı değil. Bu SNS için bir kullanım durumudur
Arafat Nalkhande

31

Aws doktorundan:

Amazon SNS, uygulamaların "push" mekanizmasıyla birden fazla aboneye zaman açısından kritik mesajlar göndermesine izin vererek güncellemeleri periyodik olarak kontrol etme veya "yoklama" ihtiyacını ortadan kaldırır.

Amazon SQS, bir yoklama modeli aracılığıyla mesaj alışverişi yapmak için dağıtılmış uygulamalar tarafından kullanılan bir mesaj kuyruğu hizmetidir ve her bir bileşenin aynı anda kullanılabilir olmasını gerektirmeden bileşenleri gönderip almak için kullanılabilir.

http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html


30

Bu konudaki cevaplar biraz modası geçmiş, bu yüzden iki sentimi eklemeye karar verdim:

SNS'yi birden fazla Aboneye sahip olabileceğiniz geleneksel bir konu olarak görebilirsiniz . Örneğin Lambda ve SQS gibi bir SNS konusu için heterojen aboneleriniz olabilir. SNS'yi kullanarak SMS mesajları hatta e-posta gönderebilirsiniz. SNS'de dikkate alınması gereken bir şey, bir kerede yalnızca bir mesajın (bildirim) alınmasıdır, bu nedenle toplu işten yararlanamazsınız.

Öte yandan SQS , mesajları depoladığınız ve bir tüketiciye abone olduğunuz bir Kuyruktan başka bir şey değildir (evet, N tüketiciyi bir SQS kuyruğuna sahip olabilirsiniz, ancak tüm tüketicilerin dikkate alacağı çok hızlı bir şekilde dağınık ve yönetimi zorlaşır mesajı en az bir kez okumalısınız, bu yüzden SNS N SQS kuyruklarına bildirimleri gönderecek ve her kuyruğun sadece bir aboneye sahip olacağı bu kullanım durumu için SNS ile birlikte SNS ile daha iyi durumdadır. 28 Haziran 2018'den itibaren AWS, SQS için Lambda Tetikleyicileri Destekler , yani anket yapmak zorunda değilsinizartık mesajlar için. Ayrıca, hata durumunda mesaj göndermek için kaynak SQS kuyruğunuzda bir DLQ yapılandırabilirsiniz. Başarılı olması durumunda mesajlar otomatik olarak silinir (bu başka bir büyük gelişmedir), bu yüzden manuel olarak silmeyi unutmanız durumunda zaten işlenmiş mesajların tekrar okunması konusunda endişelenmenize gerek yoktur. Lambda Retry Behavior'a göz atmanızı öneririmnasıl çalıştığını daha iyi anlamak için. SQS kullanmanın en büyük yararı, toplu işlemeye olanak vermesidir. Her parti en fazla 10 mesaj içerebilir, bu nedenle SQS kuyruğunuza 100 mesaj bir kerede ulaşırsa, 10 Lambda işlevi (Lambda için varsayılan otomatik ölçeklendirme davranışı göz önünde bulundurularak) dönecek ve bu 100 mesajı işleyecek ( Bu pratikte olduğu gibi mutlu yol olduğunu unutmayın, birkaç Lambda işlevi toplu işteki 10 iletiden daha az okuma yapabilir, ancak fikri anlayabilirsiniz). Bununla birlikte, aynı 100 mesajı SNS'ye gönderirseniz, 100 Lambda işlevi, gereksiz yere maliyetleri artırarak ve Lambda eşzamanlılığınızı kullanarak dönecektir. Ancak, hala geleneksel sunucular (EC2 örnekleri gibi) çalıştırıyorsanız, iletiler için anket oluşturmanız ve bunları manuel olarak yönetmeniz gerekir.

Ayrıca iletilerin teslim sırasını garanti eden FIFO SQS kuyruklarınız da vardır . Bu Lambda tarafından desteklenen bir tetikleyici değildir, bu nedenle bu tür Kuyruğu seçerken, mesajların elle silinmesinin yanı sıra yoklamanın hala gerekli olduğunu unutmayın.

Kullanım durumlarında bazı çakışmalar olsa da, hem SQS hem de SNS'nin kendi spot ışıkları var.

Kullanım SNS ise:

  • birden fazla abone bir gereksinimdir
  • kutudan SMS / E-posta göndermek kullanışlı

Kullanım SQS eğer:

  • sadece bir abone gerekir
  • harmanlama önemlidir

29

AWS SNS , abonelerin konulara abone olabileceği ve bir yayıncı bu konuda her yayınladığında mesaj alacak bir yayıncı abone ağıdır.

AWS SQS , mesajları kuyrukta saklayan bir kuyruk hizmetidir. SQS, SQS'yi yoklamak ve SQS'den mesaj almak için harici bir hizmetin (lambda, EC2 vb.) Gerekli olduğu hiçbir iletiyi iletemez.

SNS ve SQS birçok nedenden dolayı birlikte kullanılabilir.

  1. Bazılarının mesajların derhal teslim edilmesine ihtiyaç duydukları, bazılarının mesajın devam etmesini gerektirdiği farklı türlerde aboneler yoklama yoluyla daha sonra kullanmak için olabilir. Bu bağlantıya bakın .

  2. " Fanout Deseni ." Bu, mesajların eşzamansız işlenmesi içindir. Bir mesaj SNS'de yayınlandığında, mesajı paralel olarak birden fazla SQS kuyruğuna dağıtabilir. Bu, görüntüler yayınlanırken paralel olarak bir uygulamaya küçük resimler yüklerken harika olabilir. Bu bağlantıya bakın .

  3. Kalıcı depolama . İletiyi işleyecek bir hizmet güvenilir olmadığında. Böyle bir durumda, SNS bir Hizmete bildirim gönderirse ve bu hizmet kullanılamazsa, bildirim kaybolur. Bu nedenle SQS'yi kalıcı bir depolama olarak kullanabilir ve daha sonra işleyebiliriz.


4

Basit bir deyişle, SNS - itme mekanizması kullanarak ve çekmeye gerek kalmadan aboneye mesaj gönderir. SQS - bir yoklama modeli aracılığıyla mesaj alışverişi yapmak için dağıtılmış uygulamalar tarafından kullanılan bir mesaj kuyruğu hizmetidir ve gönderme ve alma bileşenlerini ayırmak için kullanılabilir.

Yaygın bir kalıp, SNS'yi bir veya daha fazla sistem bileşenine eşzamansız olarak güvenilir bir şekilde mesaj göndermek için Amazon SQS kuyruklarında mesaj yayınlamak için kullanmaktır. Https://aws.amazon.com/sns/faqs/ adresinden referans


SQS , mesajları dışarı atmadığı için birçok sisteme mesaj gönderemez . Evet, birçok anketçiden mesaj alabilir, ancak tüketicilerden biri mesajı silerse, diğer aboneler aynı mesajı tekrar kullanamaz. Bir fan çıkış modeli elde etmek istiyorsanız SQS yerine SNS tercih edilir. Ayrıca, visibilityTimeoutayarlanırsa, başka bir sistem tarafından işlendikten sonra başka hiçbir sistem iletiyi tüketemez.
Thales Minussi

Yaygın bir kalıp, SNS'yi bir veya daha fazla sistem bileşenine eşzamansız olarak güvenilir bir şekilde mesaj göndermek için Amazon SQS kuyruklarında mesaj yayınlamak için kullanmaktır. Aws.amazon.com/sns/faqs adresinden
Barot

Demek istediğin buysa (SNS -> birden fazla SQS kuyruğu), lütfen cevabını düzenle ve ben aşağı notumu mutlu bir şekilde kaldıracağım. Söylediğiniz gibi, SQS'nin havaya uçabileceği gibi görünüyor.
Thales Minussi

1
Evet .. karışıklığın olduğu yer burası. Ben düzenledim .. Teşekkürler :)
Krunal Barot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.