Serverless WebSockets at Scale
Simon Tabor
Software Engineer
@simon_tabor
Slide 2
Slide 2 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Who am I?
@simon_tabor
Software Engineer
Simon Tabor
Slide 3
Slide 3 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Covering…
• Our Requirements
• AWS AppSync
• WebSockets for API Gateway
• AWS IoT
• Our Solution
• The Future!
Slide 4
Slide 4 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Key Moments
Slide 5
Slide 5 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Product Requirements
• Support live events
• Users get new Key Moments
within 30s
• Support catch-up events
Slide 6
Slide 6 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
System Requirements
• Publish updates to users, rather than have the
users poll
• Retrieve previous messages and subscribe to
new messages
• Perform with high-traffic on a global scale
Slide 7
Slide 7 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Requirements
Slide 8
Slide 8 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Why WebSockets?
Slide 9
Slide 9 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Why Serverless?
Capacity
Time
Capacity Requirement
Autoscaled Capacity
Slide 10
Slide 10 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
≈
Slide 11
Slide 11 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
How it’s sold
AppSync
aws.amazon.com/appsync/
Slide 12
Slide 12 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Pros: GraphQL
AppSync
Slide 13
Slide 13 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Authentication
AppSync
Slide 14
Slide 14 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Authentication
AppSync
Slide 15
Slide 15 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Query + Subscribe
AppSync
Slide 16
Slide 16 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Global Deployment
AppSync
Slide 17
Slide 17 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: DynamoDB
• Each user performs an AppSync query on connection
• 1 AppSync query = 1 DynamoDB query
• Limit of 3,000 read-units per second per partition
• Limit of 3,000 new users connecting per second per fixture
AppSync
Slide 18
Slide 18 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: DynamoDB Caching
AppSync
CloudFront DynamoDB
Accelerator
ElastiCache
Slide 19
Slide 19 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: DynamoDB Caching
AppSync
Slide 20
Slide 20 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: DynamoDB Solutions
• Duplicate data N times when writing to DynamoDB
• Front-end selects a random number between 1 and N
• Resolves query load for now
• Increased costs, higher latency, no single source-of-truth
AppSync
Slide 21
Slide 21 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: DynamoDB Solutions
AppSync
Slide 22
Slide 22 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Slide 23
Slide 23 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
How it’s sold
aws.amazon.com/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/
WebSockets for API Gateway
Slide 24
Slide 24 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
How it’s sold
WebSockets for API Gateway
Slide 25
Slide 25 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Pros: Flexible
WebSockets for API Gateway
• Access to send messages to each individual connection
• Incredibly versatile, more control than AppSync
• Fully serverless, can use Lambda for all actions
Slide 26
Slide 26 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Broadcasting
• Designed for sending specific messages to specific users
• Not designed to broadcast a single message to millions of
users
• Need to invoke a Lambda for each connection and store state
in DynamoDB
• Need to make an API call to AWS for each connection
WebSockets for API Gateway
Slide 27
Slide 27 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Broadcasting
WebSockets for API Gateway
Slide 28
Slide 28 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Slide 29
Slide 29 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
How it’s sold
AWS IoT
aws.amazon.com/iot-core/
Slide 30
Slide 30 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Pros: Mature
• Mature solution with huge number of features
• Many irrelevant for us due to IoT focus
• Good monitoring
AWS IoT
Slide 31
Slide 31 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Cons: Authentication
AWS IoT
docs.aws.amazon.com/iot/latest/developerguide/protocols.html
Slide 32
Slide 32 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
≈
Pubby
Slide 33
Slide 33 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Requirements
• Shared WebSocket connection for Subscribe and Query
• Global scale with no race conditions
• Minimal operational overhead
• Generic for use by other applications?
Pubby
Slide 34
Slide 34 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Subscriptions Architecture
Pubby
Slide 35
Slide 35 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Publishing Architecture
Pubby
Slide 36
Slide 36 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Architecture
Pubby
Slide 37
Slide 37 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Failovers
Pubby
0
750,000
1,500,000
2,250,000
3,000,000
0 mins 2 mins 4 mins 6 mins 8 mins 10 mins 12 mins 14 mins
EU Central 1
US East 1
Slide 38
Slide 38 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Failovers
Pubby
Slide 39
Slide 39 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Conclusions
Slide 40
Slide 40 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Conclusions
• Deals with a specific use-case
• Service can be used by other teams at DAZN
• Highly-available with seamless regional failover
• Single, shared, native WebSocket connection
Pubby
Slide 41
Slide 41 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Conclusions
• AppSync is incredibly powerful
• Key Moments requirements are simple
• Subscriptions are weakest part of GraphQL
• Managed services have downsides
• Recommended for a service with many related models
AppSync
Slide 42
Slide 42 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Conclusions
• Opens huge opportunity to use WebSockets
• Lack of broadcasting immediate deal-breaker
• Great for non-broadcast services
• Updates and improvements coming soon?
WebSockets for API Gateway
Slide 43
Slide 43 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Conclusions
• Massive scale
• Solution would need to be designed specifically for AWS IoT
• Authentication doesn’t suit us
AWS IoT
Slide 44
Slide 44 text
Is AWS ready to provide serverless WebSockets at scale?
@simon_tabor
Future?
Pubby
Slide 45
Slide 45 text
Thank you!
Simon Tabor
Software Engineer
@simon_tabor
engineering.dazn.com
@dazneng