Saya tidak mengerti kapan saya akan menggunakan SNS versus SQS, dan mengapa mereka selalu digabungkan?
amazon-web-services
amazon-sqs
amazon-sns
Nick Ginanto
sumber
sumber
Jawaban:
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.).
sumber
Berikut perbandingan keduanya:
Jenis Entitas
Konsumsi pesan
Gunakan Kasing
Kegigihan
Jenis Konsumen
Contoh aplikasi
sumber
Dari aws doc:
http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
sumber
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:
Gunakan SQS jika:
sumber
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.
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 .
" 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 .
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.
sumber
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/
sumber
visibilityTimeout
diatur, maka tidak ada sistem lain akan dapat mengkonsumsi pesan begitu sedang diproses oleh sistem lain.