ฉันไม่เข้าใจว่าเมื่อใดที่ฉันจะใช้ SNS กับ SQS และทำไมพวกเขาถึงเชื่อมโยงกันเสมอ
ฉันไม่เข้าใจว่าเมื่อใดที่ฉันจะใช้ SNS กับ SQS และทำไมพวกเขาถึงเชื่อมโยงกันเสมอ
คำตอบ:
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, ฮาร์ดดิสก์บนโฮสต์ของคุณฐานข้อมูล ฯลฯ )
นี่คือการเปรียบเทียบของทั้งสอง:
ประเภทเอนทิตี
การบริโภคข้อความ
ใช้ Case
วิริยะ
ประเภทผู้บริโภค
ตัวอย่างการใช้งาน
จาก aws doc:
Amazon SNS อนุญาตให้แอปพลิเคชันส่งข้อความที่มีความสำคัญต่อเวลาแก่สมาชิกหลายรายผ่านกลไก "พุช" ทำให้ไม่ต้องตรวจสอบหรือ "โพล" เป็นระยะเพื่อรับการอัปเดต
Amazon SQS เป็นบริการคิวข้อความที่ใช้โดยแอปพลิเคชันแบบกระจายเพื่อแลกเปลี่ยนข้อความผ่านแบบโพลและสามารถใช้เพื่อแยกการส่งและรับส่วนประกอบโดยไม่จำเป็นต้องให้แต่ละส่วนประกอบพร้อมกัน
http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
คำตอบในหัวข้อนี้ล้าสมัยเล็กน้อยดังนั้นฉันจึงตัดสินใจเพิ่มสองเซ็นต์ของฉัน:
คุณสามารถเห็น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หาก:
ใช้SQSถ้า:
AWS SNSเป็นเครือข่ายผู้สมัครสมาชิกของสำนักพิมพ์ที่สมาชิกสามารถสมัครรับหัวข้อและจะได้รับข้อความเมื่อใดก็ตามที่ผู้เผยแพร่เผยแพร่ไปยังหัวข้อนั้น
AWS SQSเป็นบริการคิวที่เก็บข้อความไว้ในคิว SQS ไม่สามารถส่งข้อความใด ๆ ที่จำเป็นต้องใช้บริการภายนอก (แลมบ์ดา, EC2 ฯลฯ ) เพื่อสำรวจความคิดเห็น SQS และรับข้อความจาก SQS
SNS และ SQSสามารถใช้ร่วมกันได้หลายสาเหตุ
อาจมีผู้ใช้บริการหลายประเภทที่บางคนต้องการส่งข้อความโดยทันทีซึ่งบางคนต้องการให้ข้อความยังคงมีอยู่เพื่อการใช้งานในภายหลังผ่านการสำรวจ ดูลิงค์นี้
" รูปแบบ Fanout " นี่คือการประมวลผลข้อความแบบอะซิงโครนัส เมื่อข้อความถูกเผยแพร่ไปยัง SNS ข้อความนั้นสามารถแจกจ่ายไปยังคิว SQS หลายตัวพร้อมกัน สิ่งนี้จะดีมากเมื่อโหลดภาพขนาดย่อในแอปพลิเคชันพร้อมกันเมื่อมีการเผยแพร่รูปภาพ ดูลิงค์นี้
การจัดเก็บข้อมูลแบบถาวร เมื่อบริการที่กำลังประมวลผลข้อความไม่น่าเชื่อถือ ในกรณีเช่นนี้หาก SNS ส่งการแจ้งเตือนไปยังบริการและไม่สามารถใช้บริการนั้นการแจ้งเตือนจะหายไป ดังนั้นเราจึงสามารถใช้ SQS เป็นที่เก็บข้อมูลถาวรจากนั้นประมวลผลภายหลัง
กล่าวง่ายๆ SNS - ส่งข้อความถึงสมาชิกโดยใช้กลไกการพุชและไม่จำเป็นต้องดึง SQS - เป็นบริการคิวข้อความที่ใช้โดยแอพพลิเคชั่นแบบกระจายเพื่อแลกเปลี่ยนข้อความผ่านแบบโพลและสามารถใช้เพื่อแยกส่วนประกอบการส่งและรับ
รูปแบบทั่วไปคือการใช้ SNS เพื่อเผยแพร่ข้อความไปยังคิว Amazon SQS เพื่อส่งข้อความไปยังคอมโพเนนต์ระบบหนึ่งหรือหลายแบบพร้อมกันอย่างน่าเชื่อถือ การอ้างอิงจากhttps://aws.amazon.com/sns/faqs/
visibilityTimeout
ตั้งค่าไว้จะไม่มีระบบอื่นใดที่จะสามารถใช้ข้อความได้เมื่อระบบกำลังประมวลผลโดยระบบอื่น