AWS Integration & Messaginng
AWS Integration & Messaginng
SQS, SNS & Kinesis
- When we start deploying multiple applications, they will inevitably need to communicate with one another
- There are two patterns of application communication
- Synchronnous between applications can be problematic if there are sudden spikes of traffic
- What if you need to suddenly encode 1000 videos but usually it’s 10?
- in that case, it better to decouple your applications,
- SQS: queue model
- SNS: pub/sub model
- Kinesis: real-time streaming model
- These services can scale independently from our application!
Amazon SQS, What’s a queue?
SQS - Standard queue
- Oldest offering (over 10 years old)
- Fully managed service, used to decouple applications
- Attributes:
- unlimited throughput, unlimited number of messages in queue
- Default retention of message: 4 days, maxximum of 14 days
- Low latenccy (< 10ms on publish and receive)
- Limitation of 256kb per message sent
- Can have duplicate messages (at least once delivery, occasionally)
- Can have out of order messages (best effort ordering)
SQS - product messages
- Produced to SQS using the SDK (SendMessage API)
- The message is persited in SQS until consumer deletes it
- Message retention: default 4 days, upto 14days
- Example:
- order id
- customer id
- any attributes you want
- SQS standard: unlimited throughput
SQS - Consuming messages
- Consumes (running on EC2 instances, Servers, or AWS lambda)…
- Poll SQS for messages (receive up to 10 messages at a time)
- Process the messages (example: insert the message inyo an RDS database)
- Delete the messages using thhe deleteMessage API
SQS - Mutiple EC2 Innstances Consumers
- Consumers receive and process messages in parallel
- At least once delivery
- Best effort message ordering
- Consumers delete messages after processig them
- We can scale consumers horzontally to improve throughput of processing
SQS with auto scaling group (ASG)
SQS to decouple between appliccation tiers
Amazon SQS - Security
- Encryption
- In-flight encryption using HTTPS API
- At rest encryption using KMS keys
- Client side encrytion if the client wants to perform encryptioon/decrytion itself
- Access Controls: IAM policies too regulate access to SQS API
- SQS Access Policies (similiar to S3 bucket policies)
- Cross Acccount Access
- Publish S3 Event Notifications to SQS Queue
SQS Message Visiblity Timeout
- After a message is polled by a consumer, it becomes invisible to other consumers
- By default, the “message visibility timeout” is 30 seconds
- That means the message has 30 seconnds to be processed
- After the message visibility timeout is over, the message is “visible” in SQS
- If a message is not processed within the visibility timeout, it will be processed twice
- A consumer could call the ChangelMessageVisibility API tto get more time
- If visibility timeout is high (hours), and consumer crashes, re-processing will take ttime
- If visiblity ttimeouut is too low (seconds), we may get duplicates
Amazon SQS - Dead Letter Queue
- If a consumer fails to process a message within the visibility timeout… the message goes back to the queue!
- We can set a threshold of how manny times a message can go back to the queue
- After tthe mmaximumreceivves tthreshold is exceeded, the message goes intto a dead lettter queue (DLQ)
- Userful for debugginng!
- Make sure to process the messages in the DLQ before they expire:
- Feature to help consume messages in the DLQ to understand what is wrong with them.
- When our code is fixed, we can redrive the messages from the DLQ backk into the source queue (or any otther queue) inn batches without writing custtom code
Amazon SQS - Delay Queue
- Delay a message (consummers don’t see it immediately) up to 15 minuttes
- Defaultt is 0 secconnds (message is available rightt away)
- Can set a defaultt at queue level
- Can override tthe defaultt o sennd using the DelaySecccond parameters
Amazon SQS - Long Polling
- When a consumer requests messages from the queue, it can optioally “wait” for messages to arrive if tthere are nonne in the queue
- This is called long pollinng
- LongPolling dereases the nuumber of API calls made tto SQS while increasign tthe efficiency and reduinng lattenccy of your applicationn
- The wait time can be between 1 se tto 20 sec (20 sec preferable)
- Lonng polling is preferable to short polling
- long polling level using waittimeseconnds
This post is licensed under CC BY 4.0 by the author.