Amazon SNS और Amazon SQS में क्या अंतर है?


438

मुझे समझ नहीं आ रहा है कि मैं SNS बनाम SQS का उपयोग कब करूंगा, और वे हमेशा एक साथ युग्मित क्यों होते हैं?


आपकी टिप्पणी से मुझे जो समझ में आया है, वह निम्नलिखित प्रवाह में वर्णित है .. क्या यह सही है? प्रकाशक -> एसएनएस -> एसक्यूएल (कतार में संदेशों को पकड़ते हुए) -> सब्सक्राइबर (वर्तमान में ऑफ़लाइन)
मित्रयोग


@ मैत्रीयोगी का अर्थ है एसक्यूएस और एसक्यूएल नहीं?
एलैना

जवाबों:


624

एसएनएस एक वितरित प्रकाशित-सदस्यता प्रणाली है। जब भी प्रकाशकों द्वारा एसएनएस को भेजा जाता है, तो संदेश ग्राहकों को धकेल दिए जाते हैं।

SQS वितरित किया जाता है कतार प्रणाली। संदेश प्राप्तकर्ताओं को नहीं धकेले जाते हैं। प्राप्तकर्ताओं को SQS के संदेशों को पराग करना या खींचना होता है । एक ही समय में कई रिसीवर द्वारा संदेश प्राप्त नहीं किया जा सकता है। कोई भी रिसीवर एक संदेश प्राप्त कर सकता है, प्रक्रिया कर सकता है और उसे हटा सकता है। अन्य रिसीवरों को बाद में एक ही संदेश नहीं मिलता है। मतदान स्वाभाविक रूप से एसएनएस के विपरीत एसक्यूएस में संदेश वितरण में कुछ विलंबता का परिचय देता है जहां संदेश तुरंत ग्राहकों को धकेल दिए जाते हैं। SNS कई अंतिम बिंदुओं जैसे ईमेल, sms, http एंड पॉइंट और SQS का समर्थन करता है। यदि आप संदेश प्राप्त करने के लिए अज्ञात संख्या और ग्राहकों के प्रकार चाहते हैं, तो आपको SNS की आवश्यकता है।

आपको एसएनएस और एसक्यूएस को हमेशा जोड़े रखने की जरूरत नहीं है। आप SQ के अलावा SNS को ईमेल, एसएमएस या http एंड पॉइंट पर संदेश भेज सकते हैं। एसक्यूएस के साथ एसएनएस को युग्मित करने के फायदे हैं। आप अपने मेजबानों से संबंध बनाने के लिए एक बाहरी सेवा नहीं चाहते हैं (फ़ायरवॉल बाहर से आपके मेजबान के लिए आने वाले सभी कनेक्शनों को अवरुद्ध कर सकता है)। संदेशों की भारी मात्रा के कारण आपका अंतिम बिंदु बस मर सकता है। ईमेल और एसएमएस शायद आपके संदेश को जल्दी से संसाधित करने का विकल्प नहीं है। एसएनएस के साथ एसएनएस को युग्मित करके, आप अपनी गति से संदेश प्राप्त कर सकते हैं। यह क्लाइंट को ऑफलाइन, नेटवर्क के प्रति सहिष्णु और मेजबान विफलताओं की अनुमति देता है। आप गारंटीकृत डिलीवरी भी प्राप्त करते हैं। यदि आप किसी http अंतिम बिंदु या ईमेल या एसएमएस पर संदेश भेजने के लिए SNS को कॉन्फ़िगर करते हैं, तो संदेश भेजने में कई विफलताएं संदेश को गिरा सकती हैं।

SQS का उपयोग मुख्य रूप से अनुप्रयोगों को डिकूप करने या अनुप्रयोगों को एकीकृत करने के लिए किया जाता है। संदेश कम अवधि (अधिकतम 14 दिन) के लिए SQS में संग्रहीत किए जा सकते हैं। SNS कई ग्राहकों को संदेश की कई प्रतियां वितरित करता है। उदाहरण के लिए, आप कई स्टोरेज सिस्टम के लिए एप्लिकेशन द्वारा उत्पन्न डेटा को दोहराने के लिए कहना चाहते हैं। आप SNS का उपयोग कर सकते हैं और इस डेटा को कई सब्सक्राइबर्स को भेज सकते हैं, प्रत्येक प्रत्येक संदेश को विभिन्न स्टोरेज सिस्टम (s3, आपके होस्ट, डेटाबेस आदि पर हार्ड डिस्क) को प्राप्त करता है।


3
मूल रूप से, पुश नोटिफिकेशन संदेशों जैसी किसी चीज़ को लागू करने के लिए, SNS और SQS का उपयोग करने की सिफारिश की जाती है, इसलिए साँपों के साथ धक्का तब तक कतारबद्ध हो जाएगा जब तक कि उपयोगकर्ता केवल उन्हें कतार से पुनः प्राप्त न कर ले? क्या प्रति उपयोगकर्ता एक कतार बनाना संभव है?
निक गिंटानो

2
हाँ। आपके पास SNS के लिए जितने चाहें उतने ग्राहक हो सकते हैं। आपके पास कई कतारों को भेजे गए नोटिफिकेशन हो सकते हैं।
श्रीकांत

क्षमा करें, मैं देख रहा हूं कि यह प्रश्न पुराना है, लेकिन मैं सोच रहा हूं कि SQS क्या यह जानता है और ऑफ़लाइन संदेशों को संग्रहीत करता है? क्योंकि APNS ऑफ़लाइन संदेशों को संग्रहीत नहीं करता है, केवल नवीनतम संदेश। क्या यह पता होगा कि आईओएस डिवाइस ऑफ़लाइन हैं और ऑफ़लाइन संदेशों को सीधे स्टोर करते हैं? और बाद में इसे बाहर भेजें जब डिवाइस ऑनलाइन वापस आ जाएं?
जॉन

2
@NickGinanto प्रति उपयोगकर्ता कतार शायद वह नहीं है जो आप चाहते हैं। आप शायद प्रत्येक सेवा के लिए एक कतार चाहते हैं जो तब उपयोगकर्ता-विशिष्ट संदेशों को संभालती है। यह आरेख मदद कर सकता है: aws.amazon.com/blogs/aws/…
ट्रेंटन

2
यह शायद ध्यान दिया जाना चाहिए कि 2018 के मध्य तक एसक्यूएस लैम्ब्डा को ट्रिगर कर सकता है और इसलिए उस मामले में पबसुब के समान अधिक है।
साइबर वॉम्बैट

238

यहाँ दो की तुलना है:

इकाई प्रकार

  • SQS: कतार (JMS के समान)
  • SNS: विषय (पब / उप प्रणाली)

संदेश की खपत

  • SQS: पुल मैकेनिज्म - उपभोक्ता सर्वेक्षण और SQS से संदेश खींचते हैं
  • SNS: पुश मैकेनिज्म - SNS उपभोक्ताओं को संदेश पुश करता है

उदाहरण

  • SQS: 2 अनुप्रयोगों को कम करना और समानांतर अतुल्यकालिक प्रसंस्करण की अनुमति देना
  • SNS: फैनआउट - एक ही संदेश को कई तरीकों से संसाधित करना

हठ

  • SQS: यदि कोई उपभोक्ता उपलब्ध नहीं है, तो संदेश कुछ (विन्यास योग्य) अवधि के लिए बने रहते हैं
  • एसएनएस: कोई दृढ़ता नहीं। संदेश आने के समय जो भी उपभोक्ता मौजूद होता है उसे संदेश मिल जाता है और संदेश हटा दिया जाता है। यदि कोई उपभोक्ता उपलब्ध नहीं है तो संदेश खो जाता है।

उपभोक्ता प्रकार

  • SQS: सभी उपभोक्ताओं को समान माना जाता है और इसलिए संदेशों को ठीक उसी तरह से संसाधित करता है
  • एसएनएस: उपभोक्ता संदेशों को विभिन्न तरीकों से संसाधित कर सकते हैं

नमूना अनुप्रयोगों

  • SQS: नौकरियां ढांचा: नौकरियां SQS को सौंपी जाती हैं और दूसरे छोर पर उपभोक्ताओं को असिंक्रोनस तरीके से नौकरियों की प्रक्रिया कर सकते हैं। यदि नौकरी की आवृत्ति बढ़ जाती है, तो उपभोक्ताओं की संख्या बेहतर थ्रूपुट प्राप्त करने के लिए बढ़ सकती है।
  • एसएनएस: छवि प्रसंस्करण। यदि कोई व्यक्ति S3 में कोई छवि अपलोड करता है तो उस छवि को वॉटरमार्क करें, एक थंबनेल बनाएं और थैंक यू ईमेल भी भेजें। उस स्थिति में S3 एक SNS विषय के लिए सूचना प्रकाशित कर सकता है जिसमें 3 उपभोक्ता इसे सुन रहे हैं। 1 एक वॉटरमार्क छवि, दूसरा एक थंबनेल बनाता है और तीसरा एक थैंक यू ईमेल भेजता है। वे सभी एक ही संदेश (छवि URL) प्राप्त करते हैं और समानांतर में अपना प्रसंस्करण करते हैं।

1
यदि कोई उपभोक्ता उपलब्ध नहीं है तो एक रिट्री मैकेनिज्म है, यहां तक ​​कि डिफॉल्ट वैल्यू भी 10 है।
अर्पित सोलंकी

अच्छी विस्तृत पोस्ट। हमारे पास विभिन्न उपभोक्ताओं के लिए अलग-अलग संदेश हैं - हमें क्या करना चाहिए - एसएनएस का उपयोग करें और विभिन्न विषयों को परिभाषित करें या एसक्यूएस का उपयोग करें और विभिन्न कतारों को परिभाषित करें? एक विषय / कतार में एक या अधिक उपभोक्ता हो सकते हैं।
एंडी डफ्रेसने

यदि आपकी आवश्यकता यह है कि आपके बहुत से / कतार में एक से अधिक उपभोक्ता होने चाहिए, तो मेरा मानना ​​है कि आप कह रहे हैं कि एक ही संदेश कई उपभोक्ताओं के लिए प्रसारित किया जाना चाहिए ... और अगर मेरा यह मानना ​​सही है तो SNS का उपयोग करना एकमात्र विकल्प है आप
अराफात नलखांडे

मुझे नहीं लगता कि "एसक्यूएस: सभी उपभोक्ताओं को समान माना जाता है और इसलिए संदेशों को ठीक उसी तरह से संसाधित करता है" यह सही है। मैंने SQS का उपयोग किया है जहां दो अलग-अलग AWS सेवाएँ SQS कतार से चुन रही हैं और संदेश को अपने तरीके से संसाधित कर रही हैं (उन विभिन्न सेवाओं में अलग-अलग एप्लिकेशन लॉजिक)। क्या मैं कुछ भूल रहा हूँ?
नाद

@ मुझे आपके उपयोग के मामले को समझने की आवश्यकता होगी लेकिन मेरे लिए इसका कोई मतलब नहीं है कि 2 एसक्यूएस उपभोक्ता गैर-समान तरीकों से संदेशों को संसाधित कर रहे हैं। यह SNS के लिए एक उपयोग मामला है
अराफात नलखांडे

31

डॉक्स से:

अमेज़ॅन एसएनएस एक "पुश" तंत्र के माध्यम से कई ग्राहकों को समय-महत्वपूर्ण संदेश भेजने की अनुमति देता है, अपडेट के लिए समय-समय पर जांच या "पोल" की आवश्यकता को समाप्त करता है।

अमेज़ॅन SQS एक संदेश कतार सेवा है जिसका उपयोग एक मतदान मॉडल के माध्यम से संदेशों का आदान-प्रदान करने के लिए वितरित अनुप्रयोगों द्वारा किया जाता है, और प्रत्येक घटक को समवर्ती उपलब्ध कराने की आवश्यकता के बिना घटकों को भेजने और प्राप्त करने के लिए उपयोग किया जा सकता है।

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


30

इस धागे पर उत्तर थोड़े पुराने हैं, इसलिए मैंने इसमें अपने दो सेंट जोड़ने का फैसला किया है:

आप एसएनएस को एक पारंपरिक विषय के रूप में देख सकते हैं जिसमें आपके कई सदस्य हो सकते हैं। उदाहरण के लिए, आपके पास एक दिए गए SNS विषय के लिए विषम ग्राहक हो सकते हैं, उदाहरण के लिए लैम्ब्डा और SQS। आप SNS का उपयोग करके एसएमएस संदेश या ई-मेल भी बॉक्स से बाहर भेज सकते हैं। एसएनएस में विचार करने के लिए एक बात केवल एक संदेश (सूचना) प्राप्त होती है, इसलिए आप बैचिंग से लाभ नहीं उठा सकते हैं।

दूसरी ओर, SQS , एक कतार के अलावा कुछ भी नहीं है, जहां आप संदेशों को संग्रहीत करते हैं और एक उपभोक्ता की सदस्यता लेते हैं (हाँ, आपके पास एक SQS कतार में N उपभोक्ता हो सकते हैं, लेकिन यह बहुत तेज़ी से गड़बड़ हो जाएगा और सभी उपभोक्ताओं पर विचार करने का प्रबंधन करने के लिए कठिन रास्ता तय करेगा) संदेश को कम से कम एक बार पढ़ने की आवश्यकता है, इसलिए इस उपयोग के मामले के लिए एसक्यूएस के साथ संयुक्त एसएनएस के साथ एक बेहतर है, जहां एसएनएस इन संदेशों को संसाधित करने के लिए एन एसक्यूएस कतारों को सूचना धक्का देगा और हर कतार में एक ग्राहक होगा, केवल)। जून 28, 2018 तक, AWS ने SQS के लिए लैंबडा ट्रिगर का समर्थन किया है , जिसका अर्थ है कि आपको चुनाव नहीं करना हैसंदेशों के लिए अब और इसके अलावा, आप विफलता के मामले में संदेश भेजने के लिए अपने स्रोत SQS कतार पर DLQ कॉन्फ़िगर कर सकते हैं। सफलता के मामले में, संदेश स्वचालित रूप से हटा दिए जाते हैं (यह एक और महान सुधार है), इसलिए आपको पहले से संसाधित संदेशों को फिर से पढ़ने के बारे में चिंता करने की ज़रूरत नहीं है यदि आप उन्हें मैन्युअल रूप से हटाना भूल गए हैं। मैं सुझाव देता हूं कि एक बार देख लें लंबोदर रिट्री बिहेवियरयह समझने के लिए कि यह कैसे काम करता है। SQS का उपयोग करने का एक बड़ा लाभ यह है कि यह बैच प्रसंस्करण को सक्षम करता है। प्रत्येक बैच में 10 संदेश शामिल हो सकते हैं, इसलिए यदि आपकी SQS कतार में एक बार में 100 संदेश आते हैं, तो 10 लैम्ब्डा फ़ंक्शन स्पिन हो जाएंगे (लैम्ब्डा के लिए डिफ़ॉल्ट ऑटो-स्केलिंग व्यवहार को देखते हुए) और वे इन 100 संदेशों को संसाधित करेंगे (में रखें) मन यह अभ्यास के रूप में खुश रास्ता है, कुछ और लैंबडा फ़ंक्शन बैच में 10 संदेशों से कम पढ़ने को स्पिन कर सकते हैं, लेकिन आपको विचार मिलता है)। यदि आपने SNS को ये समान 100 संदेश पोस्ट किए हैं, तो, 100 लैंबडा फ़ंक्शंस खर्च होंगे, अनावश्यक रूप से बढ़ती लागत और अपने लैम्ब्डा कॉन्सैरेसी का उपयोग करना। हालाँकि, यदि आप अभी भी पारंपरिक सर्वर (जैसे EC2 इंस्टेंसेस) चला रहे हैं, तब भी आपको संदेशों के लिए चुनाव करने और उन्हें मैन्युअल रूप से प्रबंधित करने की आवश्यकता होगी।

आपके पास FIFO SQS कतारें भी हैं , जो संदेशों के वितरण क्रम की गारंटी देती हैं। यह लैम्ब्डा द्वारा समर्थित ट्रिगर नहीं है, इस प्रकार इस प्रकार की क्यू चुनते समय, ध्यान रखें कि संदेशों को मैन्युअल रूप से हटाने के लिए मतदान अभी भी आवश्यक है।

भले ही उनके उपयोग के मामलों में कुछ ओवरलैप हो, दोनों SQS और SNS की अपनी स्पॉटलाइट है।

एसएनएस का उपयोग करें यदि:

  • कई ग्राहकों की आवश्यकता है
  • बॉक्स से एसएमएस / ई-मेल भेजना आसान है

SQS का उपयोग करें यदि:

  • केवल एक ग्राहक की जरूरत है
  • बैचिंग जरूरी है

29

AWS SNS एक प्रकाशक सब्सक्राइबर नेटवर्क है, जहाँ सब्सक्राइबर विषयों की सदस्यता ले सकते हैं और जब भी कोई प्रकाशक उस विषय पर प्रकाशित करता है तो उसे संदेश प्राप्त होंगे।

AWS SQS एक कतार सेवा है, जो संदेशों को कतार में संग्रहीत करती है। SQS किसी भी संदेश को वितरित नहीं कर सकता है, जहां SQS को चुनने और SQS के संदेशों को हथियाने के लिए एक बाहरी सेवा (lambda, EC2 आदि) की आवश्यकता होती है।

एसएनएस और एसक्यूएस का उपयोग कई कारणों से एक साथ किया जा सकता है।

  1. विभिन्न प्रकार के ग्राहक हो सकते हैं जहां कुछ को संदेशों की तत्काल डिलीवरी की आवश्यकता होती है, जहां कुछ को मतदान के माध्यम से उपयोग के लिए संदेश को जारी रखने की आवश्यकता होती है। इस लिंक को देखें ।

  2. " फैनआउट पैटर्न ।" यह संदेशों के अतुल्यकालिक प्रसंस्करण के लिए है। जब कोई संदेश SNS में प्रकाशित होता है, तो वह इसे समानांतर में कई SQS कतारों में वितरित कर सकता है। समानांतर में एक आवेदन में थंबनेल लोड करते समय यह बहुत अच्छा हो सकता है, जब छवियों को प्रकाशित किया जा रहा है। इस लिंक को देखें ।

  3. लगातार भंडारण । जब एक सेवा जो एक संदेश को संसाधित करने जा रही है, विश्वसनीय नहीं है। इस तरह के एक मामले में, यदि एसएनएस किसी सेवा को अधिसूचना को आगे बढ़ाता है, और वह सेवा अनुपलब्ध है, तो अधिसूचना खो जाएगी। इसलिए हम SQS को एक स्थिर भंडारण के रूप में उपयोग कर सकते हैं और फिर बाद में इसे संसाधित कर सकते हैं।


4

सरल शब्दों में, SNS - पुश तंत्र का उपयोग करके ग्राहक को संदेश भेजता है और खींचने की आवश्यकता नहीं होती है। SQS - यह एक संदेश कतार सेवा है जिसका उपयोग एक मतदान मॉडल के माध्यम से संदेशों का आदान-प्रदान करने के लिए वितरित अनुप्रयोगों द्वारा किया जाता है, और घटकों को भेजने और प्राप्त करने के लिए उपयोग किया जा सकता है।

एक सामान्य पैटर्न एसएनएस का उपयोग अमेज़ॅन एसक्यूएस कतारों को संदेशों को प्रकाशित करने के लिए एक या कई सिस्टम घटकों को अविश्वसनीय रूप से संदेश भेजने के लिए किया जाता है। Https://aws.amazon.com/sns/faqs/ से संदर्भ


SQS कई प्रणालियों को संदेश नहीं भेज सकता क्योंकि यह संदेशों को प्रशंसक नहीं बनाता है। हां, कई मतदाता इससे संदेश खींच सकते हैं, लेकिन यदि कोई उपभोक्ता संदेश को हटाता है तो अन्य ग्राहक फिर से उसी संदेश का उपभोग नहीं कर पाएंगे। यदि आप एक फैन आउट पैटर्न प्राप्त करना चाहते हैं, तो एसक्यूएस पर एसएनएस को प्राथमिकता दी जाती है। इसके अलावा, यदि visibilityTimeoutसेट किया गया है, तो अन्य सिस्टम द्वारा संसाधित किए जाने के बाद कोई भी अन्य सिस्टम संदेश का उपभोग नहीं कर पाएगा।
थेल्स मिनुसी

एक सामान्य पैटर्न एसएनएस का उपयोग अमेज़ॅन एसक्यूएस कतारों को संदेशों को प्रकाशित करने के लिए एक या कई सिस्टम घटकों को अविश्वसनीय रूप से संदेश भेजने के लिए किया जाता है। संदर्भ aws.amazon.com/sns/faqs
बरोट

यदि आपका यही मतलब है (SNS -> कई SQS कतारें) तो कृपया अपना उत्तर संपादित करें और मैं ख़ुशी-ख़ुशी अपना पद छोड़ दूंगा। जिस तरह से आप इसे लगाते हैं, ऐसा लगता है कि एसक्यूएस प्रशंसक को बाहर कर सकता है।
थेल्स मिनुसी

1
हाँ .. भ्रम की स्थिति थी। मैंने इसे संपादित किया है .. धन्यवाद :)
क्रुणाल बरोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.