ITB 2023 - Faster Apps That Won’t Get Crushed - Brian Klaas.pdf
ortussolutions
12 views
43 slides
Aug 28, 2024
Slide 1 of 96
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
About This Presentation
Async messaging boosts app scalability. Traditional request/response cycles have limits. Services like SQS and SNS overcome scaling issues. These tools enable responsive CFML apps. Async processing improves performance under load.
Summary: Asynchronous messaging enhances web app scalability and res...
Async messaging boosts app scalability. Traditional request/response cycles have limits. Services like SQS and SNS overcome scaling issues. These tools enable responsive CFML apps. Async processing improves performance under load.
Summary: Asynchronous messaging enhances web app scalability and responsiveness, outperforming traditional request/response methods and enabling efficient handling of high traffic volumes.
Size: 5.36 MB
Language: en
Added: Aug 28, 2024
Slides: 43 pages
Slide Content
Faster Apps That Won't
Get Crushed With
Queues And Pub/Sub
Mechanisms
INTO THE BOX 2023
BRIAN KLAAS
SQS queues can:
Perform content-based deduplication
Retry messages on failed processing
Specify DLQ on completely failed processing
Pub/Sub + Queues
SQS != ordered processing
Pub/Sub + Queues
SQS != only-once delivery
Pub/Sub + Queues
SQS reqiures idempotency
Pub/Sub + Queues
FIFO queues for order
Pub/Sub + Queues
Pub/Sub + Queues
github.com/brianklaas/awsplaybox
var messageBody = { "createdOn": now()),
"userID": arguments.userID,
"event": arguments.thisEvent,
};
var messageBodyAsJSON = serializeJSON(messageBody);
var sendMessageRequest =
createObject("java","com.amazonaws.services.sqs.model.SendMessageRequest")
.withQueueUrl(variables.sqsQueueURL)
.withMessageBody(messageBody);
variables.sqsService.sendMessage(sendMessageRequest);
var receiveMessageRequest =
CreateObject(‘java’,'com.amazonaws.services.sqs.model.
ReceiveMessageRequest').init()
.withQueueURL(variables.queueURL).withMaxNumberOfMessages(1);
var messagesArray =
variables.sqsService.receiveMessage(receiveMessageRequest).getMessages();
if (arrayLen(messagesArray)) {
var messageToProcess = messagesArray[1];
var receiptHandle = messageToProcess.getReceiptHandle();
var messageBody = deserializeJSON(messageToProcess.getBody());
// do work with the message
var deleteMessageResult =
variables.sqsService.deleteMessage(variables.queueURL,receiptHandle);
}
Pub/Sub + Queues
Message Ordering:
SNS = Yes
SQS = Yes, when using FIFO queues
vs
Message Filtering:
SNS = Yes
SQS = Yes
vs
Common Pattern: SNS in front of SQS
vs
Use cases:
SNS = Fan-out to multiple recipients
SQS = Queuing up work by processors
vs
SNS + SQS allow you to scale and
parallelize work safely and durably.
vs
Real-World Example 1
Example
Example
Example
Example
Example
Example
Example
Example
( numRequests * avg execution time )
seconds for scheduled task
var remainingTime = 55000;
do {
var messageProcessStartTime = getTickCount();
// get SQS message, generate and send email, delete message
var messageProcessEndTime = getTickCount();
remainingTime -= (messageProcessEndTime - messageProcessStartTime);
} while (remainingTime gt 0);
Example
Example
Processing–intensive tasks
Throttle processing of a batch of items
Real-World Example 2
Example
Example
Example
Example
Example
Example
Example
Example
Kinesis Data Firehose:
Can ingest up to 500,000 records/second
Stores records for up to 7 days
Manages writing to the destination
Can be queried in real-time with Kinesis Data Analytics
Example
Example
Example
Amazon Athena:
Query files in S3 with SQL
Store in JSON, CSV, or Parquet formats
Ad-hoc or repeated queries
Pay based on amount of data scanned
Example
Example
Example
Example
Example
Example
So how much does this cost?
Example
40 million requests = $30/month
Example
Example
Safe experimentation!
Example
Go Do!
Brian Klaas
@brian_klaas
Blog: brianklaas.net
github.com/brianklaas/awsplaybox