Amazon Simple Queue Service
Hàng đợi tin nhắn
Hàng đợi message: bên gửi đặt việc vào, bên nhận tự kéo (poll) ra xử lý; giúp hai bên không phụ thuộc tốc độ của nhau.
- Chi phí$ Rẻ
- Độ khó●●●●●
- Để không có tốn tiền?Không
- Serverless
- Có trong đềCLF · SAA · DVA · SOA
Hình dungNhư hộp thư nhận đơn: khách cứ bỏ đơn vào, nhân viên rảnh lúc nào xử lý lúc đó.
SQS đứng ở đâu trong hệ thống?
Gọi tới SQS
SQS gọi tới
Một ví dụ thật, từng bước
- Website nhận đơn hàng rất nhanh, nhưng hệ thống kho xử lý mỗi đơn mất vài giây.
- Thay vì gọi thẳng kho, website gửi mỗi đơn vào hàng đợi SQS rồi trả lời khách ngay.
- Các worker (Lambda hoặc EC2) lấy đơn từ hàng đợi theo tốc độ của mình; đơn chưa xử lý thì vẫn nằm chờ an toàn.
- Một đơn lỗi 5 lần liên tiếp thì bị chuyển sang dead-letter queue để người kiểm tra, không làm tắc cả hàng.
- Ngày khuyến mãi đơn dồn về gấp 20 lần: hàng đợi dài ra, worker tự tăng theo số message đang chờ, không đơn nào bị mất.
Khi nào nên dùng
✓ Nên dùng khi
Tách rời hệ thống, xử lý nền, chịu tải đột biến.
✗ Không nên dùng khi
Một message cần tới nhiều bên cùng lúc → SNS / EventBridge.
Ví dụ hay gặp
- Tách web server và worker xử lý nền
- Làm vùng đệm khi tải tăng đột biến
- Hàng đợi FIFO giữ thứ tự (đơn hàng, thanh toán)
- Dead-letter queue giữ lại message xử lý lỗi
SQS, SNS hay EventBridge?
| Kiểu | Hàng đợi: message chờ tới khi được xử lý | Phát tin: đẩy ngay tới nhiều bên | Định tuyến sự kiện theo luật |
|---|---|---|---|
| Số bên nhận mỗi message | Thường một | Nhiều | Nhiều đích theo luật |
| Giữ message | Tới 14 ngày | Không giữ (gửi lại vài lần) | Có archive để phát lại |
| Hợp nhất với | Tách hệ thống, chịu tải đột biến | Thông báo, fan-out | Phản ứng với sự kiện AWS/SaaS |
Tốn bao nhiêu tiền?
- Cách tính: ~$0,40/1 triệu request (Standard), ~$0,50 (FIFO); mỗi đoạn 64 KB của message tính là một request.
- Miễn phí: Always Free: 1 triệu request/tháng.
Short polling gọi liên tục khi hàng đợi rỗng — dùng long polling; message lớn tính nhiều request.
Tách các thành phần để chịu tải tăng đột ngột → SQS. Cần đúng thứ tự, xử lý một lần → FIFO queue. Message lỗi lặp lại → dead-letter queue. Message bị xử lý hai lần → tăng visibility timeout. Giảm nhận rỗng → long polling.
Thử sức với câu hỏi thi thật
1A development team is collaborating with another company to create an integrated product. The other company needs to access an Amazon Simple Queue Service (Amazon SQS) queue that is contained in the development team's account. The other company wants to poll the queue without giving up its own account permissions to do so. How should a solutions architect provide access to the SQS queue?
- ACreate an instance profile that provides the other company access to the SQS queue.
- BCreate an IAM policy that provides the other company access to the SQS queue.
- CCreate an SQS access policy that provides the other company access to the SQS queue.
- DCreate an Amazon Simple Notification Service (Amazon SNS) access policy that provides the other company access to the SQS queue.
Xem đáp án
Đáp án đúng: C
Dùng SQS access policy (policy gắn trên chính hàng đợi) cho phép tài khoản của công ty kia gọi hàng đợi. IAM policy trong tài khoản của bạn không cấp quyền được cho tài khoản khác.
2A company is designing an application. The application uses an AWS Lambda function to receive information through Amazon API Gateway and to store the information in an Amazon Aurora PostgreSQL database. During the proof-of-concept stage, the company has to increase the Lambda quotas significantly to handle the high volumes of data that the company needs to load into the database. A solutions architect must recommend a new design to improve scalability and minimize the configuration effort. Which solution will meet these requirements?
- ARefactor the Lambda function code to Apache Tomcat code that runs on Amazon EC2 instances. Connect the database by using native Java Database Connectivity (JDBC) drivers.
- BChange the platform from Aurora to Amazon DynamoDB. Provision a DynamoDB Accelerator (DAX) cluster. Use the DAX client SDK to point the existing DynamoDB API calls at the DAX cluster.
- CSet up two Lambda functions. Configure one function to receive the information. Configure the other function to load the information into the database. Integrate the Lambda functions by using Amazon Simple Notification Service (Amazon SNS).
- DSet up two Lambda functions. Configure one function to receive the information. Configure the other function to load the information into the database. Integrate the Lambda functions by using an Amazon Simple Queue Service (Amazon SQS) queue.
Xem đáp án
Đáp án đúng: D
Tách thành hai hàm và đặt hàng đợi SQS ở giữa: SQS giữ message an toàn, hàm ghi database lấy theo lô với tốc độ kiểm soát được nên không phải tăng quota Lambda. SNS đẩy message ngay nên không giảm tải; chuyển sang EC2 hay DynamoDB là thay đổi lớn, tốn công.
Câu hỏi thường gặp
Standard queue khác FIFO queue thế nào?
Standard có thông lượng gần như không giới hạn nhưng message có thể bị giao nhiều lần và không đúng thứ tự. FIFO giữ đúng thứ tự trong cùng message group và chỉ xử lý mỗi message một lần, nhưng thông lượng có giới hạn.
SQS tính tiền thế nào?
Theo số request (gửi, nhận, xoá), có hạn mức miễn phí mỗi tháng; FIFO đắt hơn Standard một chút. Dùng long polling để giảm số lần nhận rỗng và giảm chi phí.
Đề thi AWS hay hỏi gì về SQS?
Tách rời các thành phần để chịu được tải tăng đột ngột, visibility timeout, dead-letter queue cho message lỗi, long polling, chọn Standard hay FIFO, và Auto Scaling theo số message đang chờ.