AWS SQS

Mart — Tanathip Viriya
3 min readJun 11, 2020

--

Amazon Simple Queue Service (SQS) เจ้าตัวนี้เป็นตัวที่เก่าแก่ตัวนึงของ AWS service เลย มันทําหน้าที่คือ message queue ที่ทําหน้าที่เก็บ Message ไว้ในระหว่างที่รอ compute process ดึง message ไปประมวลผล (pull-based system)

ด้วยการใช้ Message Queue มันช่วยให้เราสามารถที่จะรองรับ requests จํานวนมาก โดยไม่ทําให้ message ไหนตกหล่นไปจากการที่ compute ไม่ทัน และยัง decouple component ต่างๆๆออกจากกัน โดยไม่ต้องให้ application ขึ้นตรงต่อกัน แค่คุยกันผ่าน Message Queue เท่านั้นเอง

https://aws.amazon.com/blogs/developer/using-python-and-amazon-sqs-fifo-queues-to-preserve-message-sequencing/

ซึ่ง Message Queue สามารถมีขนาดใหญ่มากสุดถึง 256 KB เลยทีเดียว

Large SQS Messages > 256 KB

Message ที่มีขนาดใหญ่กว่า 256 KB ถึง 2 GB ให้ใช้ S3 เป็นตัวเก็บ messages แทน และใช้ SQS Extended Client Library for Java เพื่อใช้ในการจัดการมันแทน

ประเภทของ SQS Queue

  • Standard Queues (default)

หลักการณ์ของตัวนี้คือเมื่อมี message ใน queue ใครว่างก็มาหยิบไปทําได้

และเป็น At-Least-Once Delivery หรือหมายถึงอย่างน้อย 1 ครั้ง Message ต้องได้รับแน่นอน เพียงแต่อาจจะมีการ ได้รับ Message เดิมมากกว่า 1ครั้ง (แปลว่าเวลาเลือกใช้ Queue ต้องนึกถึงลักษณะ Application นั้นๆด้วย)

และ Standard มี Unlimited Throughput ต่อ transactions/s

  • FIFO (First-In-First-Out)

แน่นอน FIFO แปลว่าอะไรเข้าก่อนออก่อนตาม order ไม่เหมือน standard ที่ใครว่างก็มาหยิบไปทําได้

ในขณะเดียวกัน SQS แบบ FIFO จะการันตีเรื่องของ Exactly-Once Processing คือจะไม่มีการ duplicates ของ Message แน่นอน ต่างจากตัว Standard

ส่วน Throughput จะ High Throughput เท่านั้น ไม่ได้ Unlimited โดย support ที่ 300 messages/s แต่สามารถ request ไปเป็น 3,000 messages/s แต่ต้องส่ง request แยกต่างหาก

SQS — Visibility Timeout

เพื่อป้องกัน consumers process message ซํ้าๆกันหลายรอบ SQS มีสิ่งที่เรียกว่า Vsibility Timeout ซึ่งเป็นช่วงเวลาที่ SQS ป้องกันไม่ให้ consumer อื่นๆมาหยิบไปทํางานซํ้า โดยค่ามาตราฐานคือ 30 วินาที ตํ่าสุด 0 second และ เพิ่มมากสุดได้ 12 ชั่วโมง

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html

หลังจาก Job ที่หยิบ Message นี้ไปทํางานสําเร็จในเวลาที่กําหนด ซักพัก Message ที่ Job นั้นใน status invisible ก็จะโดนลบออกจาก queue ไป แต่ถ้า Job ที่หยิบ Message ไปทํางานไม่สําเร็จ มันก็จะกลับมา Visible รอให้คนอื่นมาหยิบไปนั้นเอง

SQS — RetentionPeriod

เป็น Attribute ที่ set ระยะเวลาของ Message ที่อยู่ใน Queue โดย SQS จะลบ Message ที่เกิน Attribute ตัวนี้ โดย default แล้ว retention period คือ 4 วัน และตั้งได้มากสุด 14 วัน

SQS Pooling

มีการทํา Pollingได้ 2 แบบคือ

  1. Short Polling (default) จะ return กลับไปทันทีถึงแม้ไม่มี message ใน queue ก็ตามที
  2. Long Polling จะ return กลับไปเมื่อ มี message ใน queue หรือถึง timeout ที่กําหนดไว้นั้นเอง
    โดยการใช้ Long Polling จะต้องทําโดยการกําหนด ReceiveMessageWaitTimeSeconds attribute ตอนสร้าง Queue หรือไป setQueueAttributes อีกทีแทน

SQS — Delay Queue

ด้วยประเภทของ Queue นี้ช่วยให้เรา postpone การเอา message เข้าไปใน queue

หรือ แปลง่ายๆคือเราเพิ่มเวลาก่อนที่จะเข้า Queue เพื่อให้ consumer application ของเรามีเวลาเพิ่มในการ process messages นั้นเอง

โดยเราสามารถตั้ง delay ได้ตั้งแต่ 0 seconds จนถึง 15 นาที

--

--