0Pricing
AWS Solutions Architect · บทเรียน

หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ

เผยแพร่ข้อความไปยังหัวข้อ SNS เดียว แล้วกระจายข้อความพร้อมกันไปยังคิว SQS ฟังก์ชัน Lambda และปลายทาง HTTP หลายรายการ

หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ”

เผยแพร่ข้อความไปยังหัวข้อ SNS เดียว แล้วกระจายข้อความพร้อมกันไปยังคิว SQS ฟังก์ชัน Lambda และปลายทาง HTTP หลายรายการ คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม

ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คิว SQS Standard เทียบกับ FIFO
  2. ระยะเวลาร_visibility, DLQ และการสำรวจแบบนาน
  3. หัวข้อ SNS และสถาปัตยกรรมแบบกระจายต่อ
  4. การกรองข้อความ SQS และการผสานรวม SNS + SQS
← กลับไปที่ AWS Solutions Architect