Amazon SNS และ Amazon SQS ต่างกันอย่างไร


438

ฉันไม่เข้าใจว่าเมื่อใดที่ฉันจะใช้ SNS กับ SQS และทำไมพวกเขาถึงเชื่อมโยงกันเสมอ


สิ่งที่ฉันเข้าใจจากความคิดเห็นของคุณอธิบายไว้ในโฟลว์ต่อไปนี้ถูกต้องไหม? Publisher -> SNS -> SQL (การพักข้อความไว้ในคิว) -> ผู้สมัครสมาชิก (ปัจจุบันออฟไลน์)
friendyogi


@friendyogi คุณหมายถึง SQS และไม่ใช่ SQL ใช่ไหม
elena

คำตอบ:


624

SNSเป็นกระจายเผยแพร่สมัครระบบ ข้อความจะถูกส่งไปยังผู้สมัครสมาชิกและเมื่อพวกเขาถูกส่งโดยผู้เผยแพร่ไปยัง SNS

SQSเป็นระบบกระจายแถวคอย ข้อความจะไม่ถูกส่งไปยังผู้รับ รับต้องสำรวจความคิดเห็นหรือดึงข้อความจากSQS ผู้รับหลายคนไม่สามารถรับข้อความได้ในเวลาเดียวกัน ผู้รับหนึ่งคนสามารถรับข้อความดำเนินการและลบมันได้ ตัวรับอื่นไม่ได้รับข้อความเดียวกันในภายหลัง การสำรวจความคิดเห็นจะแนะนำการหน่วงเวลาบางส่วนในการส่งข้อความใน SQS ซึ่งแตกต่างจาก SNS ซึ่งข้อความจะถูกส่งไปยังสมาชิกทันที SNS รองรับจุดสิ้นสุดหลายจุดเช่นอีเมล, SMS, จุดสิ้นสุด http และ SQS หากคุณต้องการจำนวนสมาชิกและประเภทสมาชิกที่ไม่รู้จักเพื่อรับข้อความ

คุณไม่จำเป็นต้องมีคู่ SNS และ SQS เสมอ คุณสามารถให้ SNS ส่งข้อความไปยังอีเมล, sms หรือจุดสิ้นสุด http นอกเหนือจาก SQS มีข้อได้เปรียบในการมีเพศสัมพันธ์ SNS กับ SQS คุณอาจไม่ต้องการให้บริการภายนอกทำการเชื่อมต่อกับโฮสต์ของคุณ (ไฟร์วอลล์อาจบล็อกการเชื่อมต่อขาเข้าทั้งหมดไปยังโฮสต์ของคุณจากภายนอก) จุดสิ้นสุดของคุณอาจตายเพราะข้อความจำนวนมาก อีเมลและ SMS อาจไม่ใช่ทางเลือกของคุณในการประมวลผลข้อความอย่างรวดเร็ว ด้วยการเชื่อมต่อ SNS กับ SQS คุณสามารถรับข้อความได้ตามที่คุณต้องการ ช่วยให้ไคลเอนต์ออฟไลน์อดทนต่อความล้มเหลวของเครือข่ายและโฮสต์ นอกจากนี้คุณยังรับประกันการส่งมอบ หากคุณกำหนดค่า SNS ให้ส่งข้อความไปยังจุดปลาย http หรืออีเมลหรือ SMS ความล้มเหลวในการส่งข้อความหลายครั้งอาจส่งผลให้ข้อความถูกทิ้ง

SQS ใช้เป็นหลักในการแยกแอปพลิเคชันหรือรวมแอปพลิเคชัน ข้อความสามารถจัดเก็บใน SQS เป็นระยะเวลาสั้น ๆ (สูงสุด 14 วัน) SNS กระจายข้อความจำนวนมากไปยังสมาชิกหลายคน ตัวอย่างเช่นสมมติว่าคุณต้องการทำซ้ำข้อมูลที่สร้างโดยแอปพลิเคชันไปยังระบบจัดเก็บข้อมูลหลายระบบ คุณสามารถใช้ SNS และส่งข้อมูลนี้ไปยังผู้สมัครสมาชิกหลาย ๆ คนแต่ละคนทำซ้ำข้อความที่ได้รับไปยังระบบจัดเก็บข้อมูลที่แตกต่างกัน (s3, ฮาร์ดดิสก์บนโฮสต์ของคุณฐานข้อมูล ฯลฯ )


3
ดังนั้นโดยพื้นฐานแล้วในการใช้ข้อความแจ้งเตือนแบบพุชขอแนะนำให้ใช้ SNS และ SQS ดังนั้นการพุชด้วย sns จะถูกจัดคิวจนกว่าผู้ใช้จะดึงเฉพาะจากคิวเท่านั้น เป็นไปได้ไหมที่จะสร้างคิวต่อผู้ใช้หนึ่งคน?
Nick Ginanto

2
ใช่. คุณสามารถมีสมาชิกได้มากเท่าที่คุณต้องการสำหรับ SNS คุณสามารถส่งการแจ้งเตือนไปยังหลาย ๆ คิวได้
Srikanth

สวัสดีฉันเห็นคำถามนี้เก่า แต่ฉันสงสัยว่า SQS รู้หรือไม่และเก็บข้อความออฟไลน์ เนื่องจาก APNS ไม่ได้จัดเก็บข้อความออฟไลน์ข้อความใหม่ล่าสุดเท่านั้น จะทราบได้ไหมว่าอุปกรณ์ IOS ออฟไลน์และจัดเก็บข้อความออฟไลน์ทันทีหรือไม่ และส่งออกมาในภายหลังเมื่ออุปกรณ์กลับมาออนไลน์หรือไม่
John

2
@NickGinanto Queue ต่อผู้ใช้อาจไม่ใช่สิ่งที่คุณต้องการ คุณอาจต้องการหนึ่งคิวสำหรับแต่ละบริการที่จัดการข้อความเฉพาะผู้ใช้ แผนภาพนี้อาจช่วย: aws.amazon.com/blogs/aws/…
เทรนตัน

2
ควรสังเกตว่าตั้งแต่กลางปี ​​2018 SQS สามารถเปิดลูกแกะได้ดังนั้นจึงคล้ายกับ pubsub มากกว่าในกรณีนั้น
cyberwombat

238

นี่คือการเปรียบเทียบของทั้งสอง:

ประเภทเอนทิตี

  • SQS: คิว (คล้ายกับ JMS)
  • SNS: หัวข้อ (Pub / ระบบย่อย)

การบริโภคข้อความ

  • SQS: กลไกการดึง - ผู้บริโภคสำรวจและดึงข้อความจาก SQS
  • SNS: Push Mechanism - SNS พุชข้อความถึงผู้บริโภค

ใช้ Case

  • SQS: แยกแอปพลิเคชั่น 2 ออกและอนุญาตการประมวลผลแบบอะซิงโครนัสแบบขนาน
  • SNS: Fanout - การประมวลผลข้อความเดียวกันได้หลายวิธี

วิริยะ

  • SQS: ข้อความจะคงอยู่เป็นระยะเวลา (กำหนดค่าได้) หากไม่มีคอนซูมเมอร์
  • SNS: ไม่มีความเพียร ผู้บริโภคใดก็ตามที่อยู่ในเวลาที่ข้อความมาถึงจะได้รับข้อความและข้อความจะถูกลบ หากไม่มีผู้บริโภคพร้อมใช้งานข้อความจะหายไป

ประเภทผู้บริโภค

  • SQS: ผู้บริโภคทุกคนควรจะเหมือนกันดังนั้นจึงดำเนินการกับข้อความในลักษณะเดียวกัน
  • SNS: ผู้บริโภคอาจประมวลผลข้อความในรูปแบบที่แตกต่างกัน

ตัวอย่างการใช้งาน

  • SQS: กรอบงาน: งานที่ถูกส่งไปยัง SQS และผู้บริโภคในตอนท้ายสามารถประมวลผลงานแบบอะซิงโครนัสได้ หากความถี่ของงานเพิ่มขึ้นจำนวนผู้บริโภคก็สามารถเพิ่มขึ้นเพื่อให้ได้ปริมาณงานที่มากขึ้น
  • SNS: การประมวลผลภาพ หากมีคนอัปโหลดภาพไปที่ S3 จากนั้นลายน้ำภาพนั้นให้สร้างภาพขนาดย่อและส่งอีเมลขอบคุณ ในกรณีนั้น S3 สามารถเผยแพร่การแจ้งเตือนไปยัง SNS Topic โดยมีผู้บริโภค 3 คนกำลังฟัง คนที่หนึ่งลายน้ำภาพคนที่สองสร้างภาพขนาดย่อและคนที่สามส่งอีเมลขอบคุณ พวกเขาทั้งหมดได้รับข้อความเดียวกัน (URL รูปภาพ) และทำการประมวลผลแบบขนาน

1
หากไม่มีผู้บริโภคว่างก็จะมีกลไกการลองใหม่แม้ค่าเริ่มต้นคือ 10 ครั้ง
Arpit Solanki

โพสต์รายละเอียดที่ดี เรามีข้อความที่แตกต่างกันสำหรับผู้บริโภคที่แตกต่างกัน - เราควรทำอย่างไร - ใช้ SNS และกำหนดหัวข้อต่าง ๆ หรือใช้ SQS และกำหนดคิวที่แตกต่างกัน? หัวข้อ / คิวอาจมีผู้บริโภคหนึ่งรายขึ้นไป
Andy Dufresne

หากความต้องการของคุณคือว่าเกินไป / คิวของคุณควรมีผู้บริโภคมากกว่าหนึ่งฉันคิดว่าคุณกำลังบอกว่าข้อความเดียวกันควรจะออกอากาศไปยังผู้บริโภคหลายคน ... และถ้าสมมติฐานของฉันนี้ถูกต้องแล้วใช้ SNS เป็นตัวเลือกเดียวสำหรับ คุณ
Arafat Nalkhande

ฉันไม่คิดว่า "SQS: ผู้บริโภคทุกคนควรจะเหมือนกันและดังนั้นจึงดำเนินการกับข้อความด้วยวิธีเดียวกัน" นี่เป็นสิ่งที่ถูกต้อง ฉันใช้ SQS ที่มีบริการ AWS สองแบบที่แตกต่างกันยกมาจากคิว SQS และประมวลผลข้อความด้วยวิธีของตนเอง (ตรรกะแอปพลิเคชันที่แตกต่างกันในบริการต่างๆเหล่านั้น) ฉันพลาดอะไรไปรึเปล่า?
นัด

@nad ฉันจะต้องเข้าใจกรณีการใช้งานของคุณ แต่สำหรับฉันแล้วมันไม่มีเหตุผลที่ผู้บริโภค 2 SQS กำลังประมวลผลข้อความด้วยวิธีที่ไม่เหมือนกัน นั่นเป็นกรณีการใช้งานของ SNS
Arafat Nalkhande

31

จาก aws doc:

Amazon SNS อนุญาตให้แอปพลิเคชันส่งข้อความที่มีความสำคัญต่อเวลาแก่สมาชิกหลายรายผ่านกลไก "พุช" ทำให้ไม่ต้องตรวจสอบหรือ "โพล" เป็นระยะเพื่อรับการอัปเดต

Amazon SQS เป็นบริการคิวข้อความที่ใช้โดยแอปพลิเคชันแบบกระจายเพื่อแลกเปลี่ยนข้อความผ่านแบบโพลและสามารถใช้เพื่อแยกการส่งและรับส่วนประกอบโดยไม่จำเป็นต้องให้แต่ละส่วนประกอบพร้อมกัน

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


30

คำตอบในหัวข้อนี้ล้าสมัยเล็กน้อยดังนั้นฉันจึงตัดสินใจเพิ่มสองเซ็นต์ของฉัน:

คุณสามารถเห็นSNSเป็นหัวข้อดั้งเดิมซึ่งคุณสามารถมีสมาชิกได้หลายคน คุณสามารถมีผู้สมัครสมาชิกที่แตกต่างกันสำหรับหัวข้อ SNS หนึ่งหัวข้อซึ่งรวมถึง Lambda และ SQS นอกจากนี้คุณยังสามารถส่งข้อความ SMS หรือแม้กระทั่งอีเมลออกจากกล่องโดยใช้ SNS สิ่งหนึ่งที่ต้องพิจารณาใน SNS คือได้รับข้อความเดียว (การแจ้งเตือน) ในครั้งเดียวดังนั้นคุณจึงไม่สามารถใช้ประโยชน์จากการแบทช์ได้

ในทางกลับกันSQSไม่มีอะไรนอกจากคิวที่คุณเก็บข้อความและสมัครสมาชิกผู้บริโภครายหนึ่ง (ใช่คุณสามารถมีผู้บริโภค N คนต่อคิว SQS หนึ่งคิว แต่จะยุ่งมากอย่างรวดเร็วและยากกว่าในการจัดการผู้บริโภคทุกคน จำเป็นต้องอ่านข้อความอย่างน้อยหนึ่งครั้งจึงเป็นสิ่งที่ดีกว่าเมื่อใช้ SNS ร่วมกับ SQS สำหรับกรณีการใช้งานนี้โดยที่ SNS จะส่งการแจ้งเตือนไปยังคิว N SQS และทุกคิวจะมีหนึ่งสมาชิกเท่านั้น) เพื่อประมวลผลข้อความเหล่านี้ ตั้งแต่วันที่ 28 มิ.ย. 2018 AWS รองรับแลมบ์ดาทริกเกอร์สำหรับ SQSซึ่งหมายความว่าคุณไม่จำเป็นต้องสำรวจความคิดเห็นสำหรับข้อความอีกต่อไป นอกจากนี้คุณสามารถกำหนดค่า DLQ ในคิว SQS ต้นทางของคุณเพื่อส่งข้อความไปในกรณีที่เกิดความล้มเหลว ในกรณีที่ประสบความสำเร็จข้อความจะถูกลบโดยอัตโนมัติ (นี่เป็นการปรับปรุงที่ยอดเยี่ยมอีกครั้ง) ดังนั้นคุณไม่ต้องกังวลกับข้อความที่ถูกประมวลผลแล้วที่ถูกอ่านอีกครั้งในกรณีที่คุณลืมลบด้วยตนเอง ฉันขอแนะนำให้ดูที่แลมบ์ดาลองพฤติกรรมเพื่อทำความเข้าใจว่ามันทำงานอย่างไร ข้อดีอย่างหนึ่งของการใช้ SQS ก็คือสามารถประมวลผลเป็นกลุ่มได้ แต่ละแบทช์สามารถมีข้อความได้สูงสุด 10 ข้อความดังนั้นหากมี 100 ข้อความมาถึงพร้อมกันในคิว SQS ของคุณฟังก์ชั่นแลมบ์ดา 10 ฟังก์ชั่นจะหมุนขึ้น (พิจารณาพฤติกรรมการปรับขนาดอัตโนมัติเริ่มต้นสำหรับแลมบ์ดา) และประมวลผล 100 ข้อความเหล่านี้ โปรดทราบว่านี่เป็นเส้นทางที่มีความสุขเช่นเดียวกับในทางปฏิบัติฟังก์ชั่นแลมบ์ดาอีกสองสามฟังก์ชั่นที่สามารถหมุนการอ่านน้อยกว่า 10 ข้อความในแบทช์ แต่คุณจะได้รับแนวคิด) หากคุณโพสต์ข้อความ 100 ข้อความเดียวกันไปยัง SNS อย่างไรก็ตามฟังก์ชั่น 100 รายการของแลมบ์ดาจะหมุนเพิ่มขึ้นโดยไม่จำเป็นเพิ่มต้นทุนและใช้งานพร้อมกันของแลมบ์ดา อย่างไรก็ตามหากคุณยังคงใช้เซิร์ฟเวอร์ดั้งเดิม (เช่นอินสแตนซ์ EC2) คุณจะต้องสำรวจความคิดเห็นเพื่อจัดการข้อความด้วยตนเอง

นอกจากนี้คุณยังมีคิว FIFO SQSซึ่งรับประกันการส่งคำสั่งของข้อความ นี่ไม่ใช่ทริกเกอร์ที่สนับสนุนโดย Lambda ดังนั้นเมื่อเลือกคิวประเภทนี้โปรดทราบว่าการเลือกตั้งยังคงมีความจำเป็นรวมถึงต้องลบข้อความด้วยตนเอง

แม้ว่าจะมีการซ้อนทับกันบ้างในกรณีการใช้งานทั้ง SQS และ SNS มีจุดเด่นของตัวเอง

ใช้SNSหาก:

  • สมาชิกหลายคนเป็นข้อกำหนด
  • การส่ง SMS / อีเมลออกจากกล่องนั้นสะดวกมาก

ใช้SQSถ้า:

  • ต้องการผู้สมัครสมาชิกเพียงคนเดียว
  • การผสมเป็นสิ่งสำคัญ

29

AWS SNSเป็นเครือข่ายผู้สมัครสมาชิกของสำนักพิมพ์ที่สมาชิกสามารถสมัครรับหัวข้อและจะได้รับข้อความเมื่อใดก็ตามที่ผู้เผยแพร่เผยแพร่ไปยังหัวข้อนั้น

AWS SQSเป็นบริการคิวที่เก็บข้อความไว้ในคิว SQS ไม่สามารถส่งข้อความใด ๆ ที่จำเป็นต้องใช้บริการภายนอก (แลมบ์ดา, EC2 ฯลฯ ) เพื่อสำรวจความคิดเห็น SQS และรับข้อความจาก SQS

SNS และ SQSสามารถใช้ร่วมกันได้หลายสาเหตุ

  1. อาจมีผู้ใช้บริการหลายประเภทที่บางคนต้องการส่งข้อความโดยทันทีซึ่งบางคนต้องการให้ข้อความยังคงมีอยู่เพื่อการใช้งานในภายหลังผ่านการสำรวจ ดูลิงค์นี้

  2. " รูปแบบ Fanout " นี่คือการประมวลผลข้อความแบบอะซิงโครนัส เมื่อข้อความถูกเผยแพร่ไปยัง SNS ข้อความนั้นสามารถแจกจ่ายไปยังคิว SQS หลายตัวพร้อมกัน สิ่งนี้จะดีมากเมื่อโหลดภาพขนาดย่อในแอปพลิเคชันพร้อมกันเมื่อมีการเผยแพร่รูปภาพ ดูลิงค์นี้

  3. การจัดเก็บข้อมูลแบบถาวร เมื่อบริการที่กำลังประมวลผลข้อความไม่น่าเชื่อถือ ในกรณีเช่นนี้หาก SNS ส่งการแจ้งเตือนไปยังบริการและไม่สามารถใช้บริการนั้นการแจ้งเตือนจะหายไป ดังนั้นเราจึงสามารถใช้ SQS เป็นที่เก็บข้อมูลถาวรจากนั้นประมวลผลภายหลัง


4

กล่าวง่ายๆ SNS - ส่งข้อความถึงสมาชิกโดยใช้กลไกการพุชและไม่จำเป็นต้องดึง SQS - เป็นบริการคิวข้อความที่ใช้โดยแอพพลิเคชั่นแบบกระจายเพื่อแลกเปลี่ยนข้อความผ่านแบบโพลและสามารถใช้เพื่อแยกส่วนประกอบการส่งและรับ

รูปแบบทั่วไปคือการใช้ SNS เพื่อเผยแพร่ข้อความไปยังคิว Amazon SQS เพื่อส่งข้อความไปยังคอมโพเนนต์ระบบหนึ่งหรือหลายแบบพร้อมกันอย่างน่าเชื่อถือ การอ้างอิงจากhttps://aws.amazon.com/sns/faqs/


SQS ไม่สามารถส่งข้อความไปยังหลาย ๆ ระบบเนื่องจากไม่ได้เผยแพร่ข้อความ ใช่ผู้สำรวจจำนวนมากสามารถดึงข้อความจากมันได้ แต่หากผู้บริโภคคนหนึ่งลบข้อความแล้วสมาชิกรายอื่นจะไม่สามารถใช้ข้อความเดิมได้อีก SNS นั้นเป็นที่นิยมมากกว่า SQS หากคุณต้องการสร้างรูปแบบแฟน ๆ นอกจากนี้หากvisibilityTimeoutตั้งค่าไว้จะไม่มีระบบอื่นใดที่จะสามารถใช้ข้อความได้เมื่อระบบกำลังประมวลผลโดยระบบอื่น
Thales Minussi

รูปแบบทั่วไปคือการใช้ SNS เพื่อเผยแพร่ข้อความไปยังคิว Amazon SQS เพื่อส่งข้อความไปยังคอมโพเนนต์ระบบหนึ่งหรือหลายแบบพร้อมกันอย่างน่าเชื่อถือ อ้างอิงจากaws.amazon.com/sns/faqs
Krunal Barot

หากนั่นคือสิ่งที่คุณหมายถึง (SNS -> คิวหลาย SQS) โปรดแก้ไขคำตอบของคุณและฉันจะลบ downvote อย่างมีความสุข ในแบบที่คุณใส่มันฟังดูเหมือน SQS สามารถพัดออกมาได้
Thales Minussi

1
ใช่ .. นั่นคือสิ่งที่ทำให้เกิดความสับสน ฉันได้แก้ไขแล้ว .. ขอบคุณ :)
Krunal Barot
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.