Apa perbedaan antara Amazon SNS dan Amazon SQS?

438

Saya tidak mengerti kapan saya akan menggunakan SNS versus SQS, dan mengapa mereka selalu digabungkan?

Nick Ginanto
sumber
Apa yang saya mengerti dari komentar Anda dijelaskan dalam aliran berikut .. apakah itu benar? Penerbit -> SNS -> SQL (menahan pesan dalam antrian) -> Pelanggan (saat ini offline)
friendyogi
@ friendyogi maksudmu SQS dan bukan SQL?
Elena

Jawaban:

626

SNS adalah sistem penerbitan-berlangganan terdistribusi . Pesan didorong ke pelanggan saat dan ketika dikirim oleh penerbit ke SNS.

SQS adalah sistem antrian terdistribusi . Pesan TIDAK didorong ke penerima. Penerima harus melakukan polling atau menarik pesan dari SQS . Pesan tidak dapat diterima oleh banyak penerima sekaligus. Setiap penerima dapat menerima pesan, memproses dan menghapusnya. Penerima lain tidak menerima pesan yang sama nanti. Polling secara inheren memperkenalkan beberapa latensi dalam pengiriman pesan di SQS tidak seperti SNS di mana pesan segera didorong ke pelanggan. SNS mendukung beberapa titik akhir seperti email, sms, titik akhir http dan SQS. Jika Anda ingin nomor dan tipe pelanggan yang tidak dikenal menerima pesan, Anda perlu SNS.

Anda tidak harus selalu memasangkan SNS dan SQS. Anda dapat meminta SNS mengirim pesan ke email, sms atau http end point dari SQS. Ada keuntungan untuk menggabungkan SNS dengan SQS. Anda mungkin tidak ingin layanan eksternal membuat koneksi ke host Anda (firewall dapat memblokir semua koneksi masuk ke host Anda dari luar). Titik akhir Anda mungkin saja mati karena volume pesan yang banyak. Email dan SMS mungkin bukan pilihan Anda untuk memproses pesan dengan cepat. Dengan menggabungkan SNS dengan SQS, Anda dapat menerima pesan sesuai keinginan Anda. Ini memungkinkan klien untuk offline, toleran terhadap kegagalan jaringan dan host. Anda juga mencapai pengiriman yang dijamin. Jika Anda mengonfigurasi SNS untuk mengirim pesan ke titik akhir http atau email atau SMS, beberapa kegagalan untuk mengirim pesan dapat menyebabkan pesan dijatuhkan.

SQS terutama digunakan untuk memisahkan aplikasi atau mengintegrasikan aplikasi. Pesan dapat disimpan dalam SQS untuk durasi waktu yang singkat (maks. 14 hari). SNS mendistribusikan beberapa salinan pesan ke beberapa pelanggan. Misalnya, katakanlah Anda ingin mereplikasi data yang dihasilkan oleh aplikasi ke beberapa sistem penyimpanan. Anda dapat menggunakan SNS dan mengirim data ini ke beberapa pelanggan, masing-masing mereplikasi pesan yang diterimanya ke sistem penyimpanan yang berbeda (s3, hard disk pada host, database, dll.).

Srikanth
sumber
3
jadi pada dasarnya, untuk mengimplementasikan sesuatu seperti pesan pemberitahuan push, disarankan untuk menggunakan SNS dan SQS sehingga dorongan dengan sns akan antri sampai pengguna hanya untuk mengambilnya dari antrian? Apakah mungkin membuat antrian per pengguna?
Nick Ginanto
2
Ya. Anda dapat memiliki pelanggan sebanyak yang Anda inginkan untuk SNS. Anda dapat mengirim notifikasi ke beberapa antrian.
Srikanth
Hai maaf, saya melihat pertanyaan ini sudah lama tetapi saya bertanya-tanya tentang SQS apakah ia tahu dan menyimpan pesan offline? Karena APNS tidak menyimpan pesan offline, hanya pesan terbaru. Apakah ia tahu kapan perangkat iOS sedang offline dan langsung menyimpan pesan offline? Dan kirimkan nanti ketika perangkat kembali online?
John
2
@NickGinanto Antrian per pengguna mungkin bukan yang Anda inginkan. Anda mungkin ingin satu antrian untuk setiap layanan yang kemudian menangani pesan khusus pengguna. Diagram ini dapat membantu: aws.amazon.com/blogs/aws/…
Trenton
2
Mungkin perlu dicatat bahwa pada pertengahan 2018 SQS dapat memicu lambdas dan karenanya lebih mirip dengan pubsub dalam kasus itu.
cyberwombat
239

Berikut perbandingan keduanya:

Jenis Entitas

  • SQS: Antrian (Mirip dengan JMS)
  • SNS: Topik (Sistem Pub / Sub)

Konsumsi pesan

  • SQS: Tarik Mekanisme - Konsumen jajak pendapat dan tarik pesan dari SQS
  • SNS: Mekanisme Dorong - SNS Mendorong pesan ke konsumen

Gunakan Kasing

  • SQS: Decoupling 2 aplikasi dan memungkinkan pemrosesan paralel asinkron
  • SNS: Fanout - Memproses pesan yang sama dalam berbagai cara

Kegigihan

  • SQS: Pesan tetap ada selama durasi (dapat dikonfigurasi) jika tidak ada konsumen yang tersedia
  • SNS: Tidak ada kegigihan. Konsumen mana pun yang hadir pada saat kedatangan pesan mendapat pesan dan pesan itu dihapus. Jika tidak ada konsumen yang tersedia maka pesan tersebut hilang.

Jenis Konsumen

  • SQS: Semua konsumen seharusnya identik dan karenanya memproses pesan dengan cara yang sama persis
  • SNS: Konsumen dapat memproses pesan dengan cara yang berbeda

Contoh aplikasi

  • SQS: Kerangka Kerja: Pekerjaan dikirimkan ke SQS dan konsumen di ujung lainnya dapat memproses pekerjaan secara tidak sinkron. Jika frekuensi pekerjaan meningkat, jumlah konsumen dapat ditingkatkan untuk mencapai hasil yang lebih baik.
  • SNS: Pemrosesan gambar. Jika seseorang mengunggah gambar ke S3 lalu menandai gambar itu, membuat thumbnail dan juga mengirim email Terima Kasih. Dalam hal itu S3 dapat mempublikasikan pemberitahuan ke Topik SNS dengan 3 konsumen mendengarkannya. Yang pertama memberi tanda air pada gambar, yang kedua membuat gambar kecil dan yang ketiga mengirimkan email Terima Kasih. Semuanya menerima pesan yang sama (URL gambar) dan melakukan pemrosesan secara paralel.
Arafat Nalkhande
sumber
1
jika tidak ada konsumen yang tersedia maka ada mekanisme coba lagi, bahkan nilai standarnya adalah 10 coba lagi.
Arpit Solanki
Pos terperinci yang bagus. Kami memiliki pesan yang berbeda untuk konsumen yang berbeda - Apa yang harus kami lakukan - menggunakan SNS dan menentukan topik yang berbeda atau menggunakan SQS dan menentukan antrian yang berbeda? Suatu topik / antrian dapat memiliki satu atau lebih konsumen.
Andy Dufresne
Jika kebutuhan Anda adalah bahwa terlalu banyak antrian Anda harus memiliki lebih dari satu konsumen saya berasumsi Anda mengatakan bahwa pesan yang sama harus disiarkan ke banyak konsumen ... Dan jika asumsi saya ini benar maka menggunakan SNS adalah satu-satunya pilihan yang tersedia untuk Anda
Arafat Nalkhande
Saya tidak berpikir "SQS: Semua konsumen seharusnya identik dan karenanya memproses pesan dengan cara yang sama persis" ini benar. Saya telah menggunakan SQS di mana dua layanan AWS yang berbeda mengambil dari antrian SQS dan memproses pesan dengan caranya sendiri (logika aplikasi berbeda dalam layanan yang berbeda). Apakah saya melewatkan sesuatu?
nad
@nad Saya perlu memahami kasus penggunaan Anda tetapi bagi saya tidak masuk akal bahwa 2 konsumen SQS sedang memproses pesan dengan cara yang tidak identik. Itu adalah kasus penggunaan untuk SNS
Arafat Nalkhande
31

Dari aws doc:

Amazon SNS memungkinkan aplikasi untuk mengirim pesan kritis-waktu ke banyak pelanggan melalui mekanisme "push", menghilangkan kebutuhan untuk secara berkala memeriksa atau "polling" untuk pembaruan.

Amazon SQS adalah layanan antrian pesan yang digunakan oleh aplikasi terdistribusi untuk bertukar pesan melalui model polling, dan dapat digunakan untuk memisahkan komponen pengiriman dan penerimaan — tanpa mengharuskan setiap komponen tersedia secara bersamaan.

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

Tommy
sumber
30

Jawaban pada utas ini sedikit kedaluwarsa, jadi saya memutuskan untuk menambahkan dua sen ke dalamnya:

Anda dapat melihat SNS sebagai topik tradisional yang Anda dapat memiliki beberapa Pelanggan. Anda dapat memiliki pelanggan heterogen untuk satu topik SNS yang diberikan, termasuk Lambda dan SQS, misalnya. Anda juga dapat mengirim pesan SMS atau bahkan mengirim surel menggunakan SNS. Satu hal yang perlu dipertimbangkan dalam SNS adalah hanya satu pesan (notifikasi) yang diterima sekaligus, sehingga Anda tidak dapat memanfaatkan batching.

SQS , di sisi lain, tidak lain adalah Antrian, tempat Anda menyimpan pesan dan berlangganan satu konsumen (ya, Anda dapat memiliki N konsumen ke satu antrian SQS, tetapi akan menjadi berantakan dengan sangat cepat dan jauh lebih sulit untuk dikelola mengingat semua konsumen akan perlu membaca pesan setidaknya satu kali, jadi satu yang lebih baik dengan SNS dikombinasikan dengan SQS untuk kasus penggunaan ini, di mana SNS akan mendorong pemberitahuan ke antrian N SQS dan setiap antrian akan memiliki satu pelanggan, hanya) untuk memproses pesan-pesan ini. Pada 28 Juni 2018, AWS Mendukung Lambda Triggers untuk SQS , artinya Anda tidak perlu melakukannya pollinguntuk pesan lagi. Selain itu, Anda dapat mengkonfigurasi DLQ pada antrian SQS sumber Anda untuk mengirim pesan jika terjadi kegagalan. Jika berhasil, pesan dihapus secara otomatis (ini merupakan peningkatan besar lainnya), jadi Anda tidak perlu khawatir tentang pesan yang sudah diproses dibaca lagi jika Anda lupa menghapusnya secara manual. Saya sarankan melihat Lambda Retry Behavioruntuk lebih memahami cara kerjanya. Satu manfaat besar menggunakan SQS adalah memungkinkan pemrosesan batch. Setiap kumpulan dapat berisi hingga 10 pesan, jadi jika 100 pesan tiba sekaligus dalam antrian SQS Anda, maka 10 fungsi Lambda akan muncul (mempertimbangkan perilaku penskalaan otomatis default untuk Lambda) dan mereka akan memproses 100 pesan ini (tetap masuk pikiran ini adalah jalan yang bahagia seperti dalam praktek, beberapa fungsi Lambda bisa berputar membaca kurang dari 10 pesan dalam batch, tetapi Anda mendapatkan ide). Namun, jika Anda memposting 100 pesan yang sama ke SNS, 100 fungsi Lambda akan berputar, tanpa perlu meningkatkan biaya dan menggunakan konkurensi Lambda Anda. Namun, jika Anda masih menjalankan server tradisional (seperti instance EC2), Anda masih perlu melakukan polling untuk pesan dan mengelolanya secara manual.

Anda juga memiliki antrian FIFO SQS , yang menjamin urutan pengiriman pesan. Ini bukan pemicu yang didukung oleh Lambda, jadi ketika memilih jenis Antrian ini, perlu diingat bahwa pemungutan suara masih diperlukan dan juga harus menghapus pesan secara manual.

Meskipun ada beberapa tumpang tindih dalam kasus penggunaannya, baik SQS dan SNS memiliki sorotan sendiri.

Gunakan SNS jika:

  • banyak pelanggan adalah persyaratan
  • mengirim SMS / E-mail ke luar kotak berguna

Gunakan SQS jika:

  • hanya satu pelanggan yang dibutuhkan
  • batching itu penting
Thales Minussi
sumber
29

AWS SNS adalah jaringan pelanggan penerbit, di mana pelanggan dapat berlangganan topik dan akan menerima pesan setiap kali penerbit menerbitkan topik itu.

AWS SQS adalah layanan antrian, yang menyimpan pesan dalam antrian. SQS tidak dapat mengirimkan pesan apa pun, di mana layanan eksternal (lambda, EC2 dll) diperlukan untuk polling SQS dan mengambil pesan dari SQS.

SNS dan SQS dapat digunakan bersama karena berbagai alasan.

  1. Mungkin ada berbagai jenis pelanggan di mana beberapa membutuhkan pengiriman pesan langsung, di mana beberapa akan membutuhkan pesan untuk bertahan, untuk penggunaan nanti melalui polling. Lihat tautan ini .

  2. " Pola Fanout ." Ini untuk pemrosesan pesan yang tidak sinkron. Ketika sebuah pesan dipublikasikan ke SNS, ia dapat mendistribusikannya ke beberapa antrian SQS secara paralel. Ini sangat bagus ketika memuat thumbnail dalam aplikasi secara paralel, ketika gambar sedang diterbitkan. Lihat tautan ini .

  3. Penyimpanan persisten . Ketika layanan yang akan memproses pesan tidak dapat diandalkan. Dalam kasus seperti ini, jika SNS mendorong pemberitahuan ke Layanan, dan layanan itu tidak tersedia, maka pemberitahuan itu akan hilang. Karena itu kita dapat menggunakan SQS sebagai penyimpanan persisten dan kemudian memprosesnya setelah itu.

Keet Sugathadasa
sumber
4

Secara sederhana, SNS - mengirim pesan ke pelanggan menggunakan mekanisme push dan tidak perlu menarik. SQS - ini adalah layanan antrian pesan yang digunakan oleh aplikasi terdistribusi untuk bertukar pesan melalui model polling, dan dapat digunakan untuk memisahkan komponen pengiriman dan penerimaan.

Pola umum adalah menggunakan SNS untuk mempublikasikan pesan ke antrian SQS Amazon untuk mengirim pesan dengan andal ke satu atau banyak komponen sistem secara tidak sinkron. Referensi dari https://aws.amazon.com/sns/faqs/

Krunal Barot
sumber
SQS tidak dapat mengirim pesan ke banyak sistem karena tidak menyebar pesan. Ya, banyak polling dapat menarik pesan darinya, tetapi jika salah satu konsumen menghapus pesan maka pelanggan lain tidak akan dapat lagi menggunakan pesan yang sama. SNS lebih disukai daripada SQS jika Anda ingin mencapai pola fan out. Juga, jika visibilityTimeoutdiatur, maka tidak ada sistem lain akan dapat mengkonsumsi pesan begitu sedang diproses oleh sistem lain.
Thales Minussi
Pola umum adalah menggunakan SNS untuk mempublikasikan pesan ke antrian SQS Amazon untuk mengirim pesan dengan andal ke satu atau banyak komponen sistem secara tidak sinkron. Referensi dari aws.amazon.com/sns/faqs
Krunal Barot
Jika itu yang Anda maksudkan (SNS -> beberapa antrian SQS) maka silakan edit jawaban Anda dan saya akan dengan senang hati menghapus downvote saya. Cara Anda mengatakannya, sepertinya SQS bisa menyebar.
Thales Minussi
1
Ya .. di situlah kebingungan itu. Saya telah mengeditnya .. Terima kasih :)
Krunal Barot