หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ
เผยแพร่ข้อความไปยังหัวข้อ SNS เดียว แล้วกระจายข้อความพร้อมกันไปยังคิว SQS ฟังก์ชัน Lambda และปลายทาง HTTP หลายรายการ
หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
Amazon SNS คืออะไร
Amazon Simple Notification Service (SNS) คือ บริการส่งข้อความแบบ pub/sub ที่มีการจัดการเต็มรูปแบบ ผู้เผยแพร่จะส่งข้อความไปยัง หัวข้อ ของ SNS และ SNS จะส่งข้อความเหล่านั้นไปยัง ผู้สมัครรับข้อมูล ทั้งหมดทันที ต่างจาก SQS ที่ทำงานแบบดึงข้อมูล SNS ทำงานแบบ ผลักข้อมูล โดยส่งข้อความให้ผู้สมัครรับข้อมูลทันทีที่มีการเผยแพร่ จึงเหมาะอย่างยิ่งสำหรับการกระจายเหตุการณ์ไปยังระบบปลายทางหลายระบบพร้อมกัน
หัวข้อ SNS: Standard และ FIFO
เช่นเดียวกับ SQS, SNS มีหัวข้อสองประเภท: หัวข้อ Standard ให้การจัดลำดับข้อความแบบพยายามอย่างดีที่สุด การส่งมอบอย่างน้อยหนึ่งครั้ง และปริมาณงานเกือบไม่จำกัด โดยสามารถส่งไปยัง SQS, แลมบ์ดา, ปลายทาง HTTP, อีเมล, SMS และการผลักข้อมูลไปยังอุปกรณ์เคลื่อนที่ได้ ส่วน หัวข้อ FIFO รับประกันการจัดลำดับอย่างเคร่งครัดและการส่งมอบเพียงครั้งเดียวให้แก่ผู้สมัครรับข้อมูล FIFO ของ SQS เท่านั้น หัวข้อ FIFO รองรับข้อความสูงสุด 3,000 ข้อความต่อวินาทีเมื่อใช้การรวมกลุ่ม และใช้เมื่อจำเป็นต้องรักษาลำดับของเหตุการณ์ให้เหมือนกันในผู้สมัครรับข้อมูลหลายราย
aws sns create-topic --name 'OrderEvents'
# Create FIFO topic
aws sns create-topic \
--name 'OrderEvents.fifo' \
--attributes '{"FifoTopic": "true", "ContentBasedDeduplication": "true"}'ประเภทผู้สมัครรับข้อมูล SNS
SNS รองรับผู้สมัครรับข้อมูลหลายประเภทตามโพรโทคอล:
- SQS: การจัดคิวที่ทนทาน (ใช้บ่อยที่สุดสำหรับการประมวลผลแบบไม่พร้อมกัน)
- แลมบ์ดา: การเรียกใช้โดยตรง (จากมุมมองของ SNS ถือว่าเป็นการทำงานแบบพร้อมกัน)
- HTTP/HTTPS: การส่งเว็บฮุกไปยังปลายทางภายนอก
- อีเมล / Email-JSON: การแจ้งเตือนแก่ผู้ใช้
- SMS: การส่งข้อความ
- การผลักข้อมูลไปยังอุปกรณ์เคลื่อนที่: FCM, APNs ผ่านแอปพลิเคชันแพลตฟอร์ม
- Firehose: สตรีมไปยัง S3 หรือ Redshift ผ่าน Kinesis Data Firehose
# Subscribe an SQS queue to an SNS topic
aws sns subscribe \
--topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
--protocol sqs \
--notification-endpoint 'arn:aws:sqs:us-east-1:123456789012:InventoryQueue'รูปแบบสถาปัตยกรรมแบบกระจายงาน
การกระจายงาน คือรูปแบบหลักของ SNS: เผยแพร่ข้อความหนึ่งข้อความไปยังหัวข้อ แล้ว SNS จะส่งข้อความนั้นไปยังผู้สมัครรับข้อมูลทั้งหมดพร้อมกัน ตัวอย่างเช่น เหตุการณ์คำสั่งซื้อใหม่อาจถูกกระจายไปยัง: คิว SQS สำหรับจัดสินค้าในคลังสินค้า, คิว SQS อีกคิวสำหรับอัปเดตสินค้าคงคลัง, ฟังก์ชันแลมบ์ดาสำหรับตรวจจับการฉ้อโกง และการสมัครรับอีเมลสำหรับทีมปฏิบัติการ ผู้สมัครรับข้อมูลแต่ละรายจะประมวลผลเหตุการณ์อย่างเป็นอิสระโดยไม่ผูกโยงกัน วิธีนี้รองรับการขยายระบบได้ดีกว่าการมีผู้ใช้รายเดียวคอยส่งต่อไปยังหลายระบบอย่างมาก
การกระจายงานด้วย SNS + SQS: แนวทางปฏิบัติที่ดีที่สุด
รูปแบบที่แนะนำคือการผสาน SNS กับ SQS: เผยแพร่ไปยัง SNS ซึ่งจะกระจายงานไปยังคิว SQS หลายคิว วิธีนี้มีข้อดีดังนี้:
- ความทนทาน: หากผู้ใช้ไม่พร้อมใช้งาน ข้อความจะถูกจัดคิวไว้ใน SQS
- การปรับขนาดอย่างอิสระ: ผู้ใช้แต่ละรายประมวลผลด้วยความเร็วของตนเอง
- การแยกส่วน: ผู้ใช้รายใหม่เพียงสมัครรับข้อมูลจาก SNS โดยไม่ต้องเปลี่ยนผู้เผยแพร่
- ความทนทานต่อการลองใหม่: SQS มีระยะหมดเวลาการมองเห็นและ DLQ
ผู้สมัครรับข้อมูลแลมบ์ดาโดยตรงไม่มีการเก็บพักข้อมูลที่ SQS จัดเตรียมให้ ทำให้รูปแบบสามระดับ SNS→SQS→แลมบ์ดามีความทนทานมากกว่า
การลองส่งข้อความซ้ำและ DLQ
เมื่อ SNS ส่งข้อมูลไปยังผู้สมัครรับข้อมูลไม่สำเร็จ (ปลายทาง HTTP ส่งคืน 5xx, แลมบ์ดาแสดงข้อผิดพลาด หรือ SQS ไม่พร้อมใช้งาน) ระบบจะลองส่งใหม่โดยใช้กลยุทธ์ การหน่วงเวลาแบบเพิ่มทวีคูณ นโยบายการลองใหม่แตกต่างกันตามโพรโทคอล: ปลายทาง HTTP จะลองใหม่ทันทีได้สูงสุด 4 ครั้ง แล้วใช้การหน่วงเวลาแบบเพิ่มทวีคูณตลอด 23 วัน ส่วนแลมบ์ดาและ SQS จะใช้กลไกการลองใหม่ของตนเอง ให้กำหนดค่า SNS Topic DLQ เพื่อรวบรวมข้อความที่ลองส่งครบทุกครั้งแล้วแต่ยังไม่สำเร็จ เพื่อให้แน่ใจว่าไม่มีเหตุการณ์ใดสูญหายไปโดยไม่มีการแจ้งเตือน
การเผยแพร่ข้อความไปยัง SNS
เผยแพร่ไปยัง SNS โดยใช้ AWS SDK หรือ CLI แต่ละข้อความสามารถมี หัวข้อ (สำหรับอีเมล), เนื้อหา ข้อความ (ขนาดสูงสุด 256 KB) และ แอตทริบิวต์ข้อความสำหรับการกำหนดเส้นทาง สำหรับผู้สมัครรับข้อมูลประเภทต่าง ๆ (SQS กับอีเมลหรืออุปกรณ์เคลื่อนที่) คุณสามารถใช้ โครงสร้างข้อความ เพื่อส่งเนื้อหาที่แตกต่างกันไปยังแต่ละโพรโทคอล โดยใช้ JSON ที่มีคีย์เฉพาะของแต่ละโพรโทคอลเพื่อปรับแต่งข้อมูลที่จะส่งให้เหมาะกับผู้สมัครรับข้อมูลแต่ละประเภท
aws sns publish \
--topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
--message '{"orderId": "12345", "status": "PLACED", "amount": 99.99}' \
--subject 'New Order Placed' \
--message-attributes '{
"orderType": {"DataType": "String", "StringValue": "PREMIUM"}
}'นโยบายตัวกรองการสมัครรับข้อมูล SNS
นโยบายตัวกรองการสมัครรับข้อมูลช่วยให้ผู้สมัครรับข้อมูลแต่ละรายได้รับเฉพาะข้อความที่เกี่ยวข้องกับตนเอง โดยพิจารณาจาก แอตทริบิวต์ข้อความ หากไม่ใช้ตัวกรอง ผู้สมัครรับข้อมูลทั้งหมดจะได้รับข้อความที่เผยแพร่ทั้งหมด เมื่อใช้นโยบายตัวกรอง ผู้สมัครรับข้อมูลจะระบุค่าของแอตทริบิวต์ที่ต้องการ ตัวอย่างเช่น คิวคำสั่งซื้อ 'PREMIUM' สมัครรับข้อมูลโดยใช้ตัวกรอง {"orderType": ["PREMIUM"]} ส่วนคิว 'STANDARD' ใช้ตัวกรอง ["STANDARD"] ผู้สมัครรับข้อมูลแต่ละรายจะจัดการเฉพาะส่วนที่เกี่ยวข้องกับตนเอง จึงลดการประมวลผลที่ไม่จำเป็น
aws sns set-subscription-attributes \
--subscription-arn 'arn:aws:sns:...:subscription/...' \
--attribute-name FilterPolicy \
--attribute-value '{"orderType": ["PREMIUM"], "region": ["US", "EU"]}'SNS สำหรับการแจ้งเตือนแบบผลักไปยังอุปกรณ์เคลื่อนที่
SNS รองรับ การแจ้งเตือนแบบผลักไปยังอุปกรณ์เคลื่อนที่โดยตรงสำหรับอุปกรณ์ iOS (APNs) และ Android (FCM/GCM) คุณลงทะเบียนโทเค็นอุปกรณ์เป็น ARN ของปลายทางแพลตฟอร์ม จากนั้นเผยแพร่โดยตรงไปยังปลายทางหรือไปยังหัวข้อที่มีผู้สมัครรับข้อมูลเป็นแอปพลิเคชันแพลตฟอร์ม สำหรับการแจ้งเตือนจากระบบไปยังอุปกรณ์โดยตรงในปริมาณมาก (อุปกรณ์นับล้านเครื่อง) ให้ผสาน SNS กับ การกระจายงานด้วย SQS: SNS จะส่งเหตุการณ์การแจ้งเตือนไปยัง SQS และบริการผู้ปฏิบัติงานจะจัดการการค้นหาโทเค็นจำนวนมากและการส่งมอบในระดับใหญ่
การเข้ารหัสข้อความและการควบคุมการเข้าถึงของ SNS
ปกป้องข้อความ SNS ด้วย การเข้ารหัสฝั่งเซิร์ฟเวอร์โดยใช้ AWS KMS วิธีนี้จะเข้ารหัสข้อความขณะจัดเก็บภายในโครงสร้างพื้นฐานของ SNS การควบคุมการเข้าถึงใช้ทั้ง นโยบายที่อิงตามทรัพยากร (ใครสามารถเผยแพร่ไปยังหรือลงทะเบียนรับข้อมูลจากหัวข้อได้) และ นโยบาย IAM หากต้องการให้บักเก็ต S3 เผยแพร่การแจ้งเตือนไปยังหัวข้อ SNS ให้สิทธิ์ sns:Publish แก่หลักบริการ S3 ในทรัพยากรนโยบายของหัวข้อ ควรจำกัดการเผยแพร่ให้เหลือเฉพาะแหล่งที่ได้รับอนุญาตเสมอ เพื่อป้องกันการแทรกเหตุการณ์จากแหล่งที่ไม่ได้รับอนุญาต
SNS กับ SQS: บริการที่ทำงานเสริมกัน
SNS และ SQS เป็นบริการที่ทำงานเสริมกัน ไม่ใช่ทางเลือกแทนกัน SNS (ผลักข้อมูล) ใช้สำหรับกระจายข้อมูลไปยังผู้ใช้หลายรายทันที เหมาะเมื่อหลายระบบต้องตอบสนองต่อเหตุการณ์เดียวกัน ส่วน SQS (ดึงข้อมูล) ใช้สำหรับการประมวลผลโดยผู้ใช้รายเดียวที่เชื่อถือได้และทนทาน พร้อมการลองใหม่และ DLQ เหมาะเมื่อผู้ใช้รายหนึ่งต้องประมวลผลแต่ละข้อความเพียงครั้งเดียวตามความเร็วของตนเอง รูปแบบการกระจายงาน SNS→SQS ให้คุณได้ทั้งการส่งแบบกระจายจาก SNS และการประมวลผลที่ทนทานและลองใหม่ได้จาก SQS การผสานนี้ปรากฏบ่อยในสถานการณ์ข้อสอบ SAA-C03
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้
ทบทวนบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า หัวข้อ SNS ให้บริการกระจายข้อความแบบ pub/sub ด้วยการผลักข้อมูลไปยังผู้สมัครรับข้อมูล เช่น SQS, แลมบ์ดา, HTTP, SMS และอีเมลพร้อมกัน, สถาปัตยกรรมแบบกระจายงานใช้หัวข้อ SNS เดียวส่งข้อมูลไปยังคิว SQS หลายคิว เพื่อให้ประมวลผลเหตุการณ์โดยผู้ใช้หลายรายได้อย่างทนทานและปรับขนาดได้อย่างอิสระ และ นโยบายตัวกรองการสมัครรับข้อมูลช่วยลดการประมวลผลที่ไม่จำเป็นด้วยการส่งเฉพาะเหตุการณ์ที่เกี่ยวข้องไปยังผู้สมัครรับข้อมูลแต่ละรายตามแอตทริบิวต์ข้อความ บทถัดไปเราจะสำรวจการกรองข้อความ SQS และการผสาน SNS + SQS โดยละเอียด
คำถามที่พบบ่อย
บทเรียน “หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ”
เผยแพร่ข้อความไปยังหัวข้อ SNS เดียว แล้วกระจายข้อความพร้อมกันไปยังคิว SQS ฟังก์ชัน Lambda และปลายทาง HTTP หลายรายการ คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คิว SQS Standard เทียบกับ FIFO
- ระยะเวลาร_visibility, DLQ และการสำรวจแบบนาน
- หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ
- การกรองข้อความ SQS และการผสานรวม SNS + SQS