AWS Architecture - GDC 2014
-
Upload
amazon-web-services -
Category
Technology
-
view
118 -
download
4
description
Transcript of AWS Architecture - GDC 2014
AWS Gaming Solutions | GDC 2014
Scalable Gaming with AWS
Or, How to go from 1,000 to 1,000,000 users without starting over
Nate Wiger @nateware | Principal Gaming Solutions Architect
AWS Gaming Solutions | GDC 2014
What's In It For Me?
• Why AWS for Games?
• Core Game Backend
• Scaling Data with DynamoDB
• Low-Latency Multiplayer with C3
• Mobile Push Notifications
AWS Gaming Solutions | GDC 2014
Gratuitous Logo Slide
AWS Gaming Solutions | GDC 2014
Traditional: Rigid AWS: Elastic
Servers
Demand
Capacity
Excess Capacity
Wasted $$
Demand
Unmet Demand
Upset Players
Missed Revenue
Pay As You Scale
AWS Gaming Solutions | GDC 2014
Pay As You Scale
AWS Gaming Solutions | GDC 2014
10 Regions
51 CloudFront POPs
Continuous Expansion
Global Is Good
AWS Gaming Solutions | GDC 2014
AWS Gaming Solutions | GDC 2014
Game Backend Concepts
• Think in terms of API's
• Get friends, leaderboard
• HTTP+JSON
• Binary asset data
• Mobile push
• Multiplayer servers
AWS Gaming Solutions | GDC 2014
Core Game Backend
ELB
S3
• Choose Region
• Elastic Load Balancer
• Two Availability Zones
• EC2 for App
• RDS Database
• Multi-AZ
• S3 for Game Data
• Assets
• UGC
• Analytics
Region
AWS Gaming Solutions | GDC 2014
Scale It Way Out
ELB
S3
• Auto Scaling Group
• Capacity on Demand
• Respond to Users
EC2 EC2 EC2
Region
AWS Gaming Solutions | GDC 2014
Scale It Way Out
ELB
S3
• Auto Scaling Group
• Capacity on Demand
• Respond to Users
• ElastiCache
• Memcache
• Redis EC2 EC2 EC2
Region
AWS Gaming Solutions | GDC 2014
Scale It Way Out
CloudFront
CDN
ELB
S3
EC2 EC2 EC2
Region
• Auto Scaling Group
• Capacity on Demand
• Respond to Users
• ElastiCache
• Memcache
• Redis
• CloudFront CDN
• DLC, Assets
• Game Saves
• UGC
AWS Gaming Solutions | GDC 2014
Big picture slide
AWS Gaming Solutions | GDC 2014
Elastic Beanstalk
• Managed Container
• Git Push or Zip Upload
• ELB, EC2, RDS
• Web Dashboard
• Same Performance
• So Yeah, Use It
AWS Gaming Solutions | GDC 2014
Hill Of Beans
ELB
S3
• Beanstalk Manages
• ELB
• EC2
• Auto Scaling
• Monitoring
• RDS
• Add Other Services
• S3
• CloudFront
• ElastiCache
• SNS
EC2
Elastic Beanstalk Container
EC2
CloudFront
CDN
AWS Gaming Solutions | GDC 2014
AWS Gaming Solutions | GDC 2014
More CLI bell
cd MyGameAPI
eb init
eb start
vi app.rb
require 'sinatra'
get '/hello.json' do
{message: "Hello World!"}
End
git commit –m "app updates" app.rb
git aws.push
• Initialize everything
• Write code
• Commit to git
• Push to Beanstalk
• Coffee / Beer
• Repeat
AWS Gaming Solutions | GDC 2014
AWS Gaming Solutions | GDC 2014
Region
Writing Is Painful
Availability
Zone A Availability
Zone B
S3
EC2
• Games are Write Heavy
• Caching of Limited Use
• Key Value Key Value
• Binary Structures
• Database = Bottleneck
ELB
EC2
CloudFront
CDN
AWS Gaming Solutions | GDC 2014
Sharding (Not Fun)
Availability
Zone A
C2
AWS Gaming Solutions | GDC 2014
DynamoDB
Availability
Zone A Availability
Zone B
S3
• NoSQL Data Store
• Fully-Managed
• Highly Available
• PUT/GET Keys
• Secondary Indexes
• Provisioned Throughput
• Auto Scaling
EC2 EC2
ELB
CloudFront
CDN
Elastic Beanstalk Container
AWS Gaming Solutions | GDC 2014
Leaderboard in DynamoDB
• Hash key = Primary key
• Range key = Sub key
• Others attributes are
unstructured, unindexed
• So… How to sort based
on Top Score?
AWS Gaming Solutions | GDC 2014
Leaderboard with Secondary Indexes
• Create a secondary index!
• Set hash key to Game Level
• Set range key to Top Score
• Can now query by Level,
Sorted by Top Score
• Handles any (sane) gaming
use case
AWS Gaming Solutions | GDC 2014
Python Leaderboard
table = Table('scores', schema=[ HashKey('user'), RangeKey('level') ], throughput={ 'read': 5, 'write': 15 }, global_indexes=[ GlobalAllIndex('highscore', parts=[ HashKey('level'), RangeKey('score', data_type=NUMBER) ], throughput={ 'read': 5, 'write': 15 } ) ])
new_score = Item(table, data={ 'user': user, 'level': level, 'score': score }) new_score.save() topscores = table.query(index='highscore') for ts in topscores: print(ts['user'], ts['score'])
AWS Gaming Solutions | GDC 2014
Big picture slide
AWS Gaming Solutions | GDC 2014
G2 Instance
• NVIDIA Kepler GPU
• Game Streaming
• Rendering Assets
• Build Servers
• AppStream!
AWS Gaming Solutions | GDC 2014
C3 Instance
• High packets per second
• Very low latency, jitter
• Intel Ivy Bridge CPU
• SSD's
• Built for games
• 15 cents / hour
AWS Gaming Solutions | GDC 2014
Enhanced Networking (SR-IOV)
Before:
Hypervisor
After:
Hardware
AWS Gaming Solutions | GDC 2014
Multiplayer Game Servers
EC2 EC2 EC2
Region
• Beanstalk App
• Core Session
• Matchmaking
• Public Server Tier
• Direct Client Socket
• Scale on Players
• CloudFront CDN
• DLC, Assets
• Game Saves
• UGC
EC2
AWS Gaming Solutions | GDC 2014
Multiplayer Game Servers
① Login via Beanstalk
② Request Matchmaking
③ Get Game Server IP
EC2 EC2 EC2
Region
EC2
AWS Gaming Solutions | GDC 2014
Multiplayer Game Servers
① Login via Beanstalk
② Request Matchmaking
③ Get Game Server IP
④ Connect to Server
⑤ Pull Down Assets
⑥ Other Players Join
EC2 EC2 EC2
Region
EC2
AWS Gaming Solutions | GDC 2014
Multiplayer Game Servers
① Login via Beanstalk
② Request Matchmaking
③ Get Game Server IP
④ Connect to Server
⑤ Pull Down Assets
⑥ Other Players Join
⑦ Game Ends
⑧ Update Stats
EC2 EC2 EC2
Region
EC2
AWS Gaming Solutions | GDC 2014
Multi-Region Game Servers
E2
Region
EC2
Region
AWS Gaming Solutions | GDC 2014
Big picture slide
AWS Gaming Solutions | GDC 2014
Messages and Queues
ELB
S3
• Simple Notification Service
• HTTP
• SMS
• Mobile Push
EC2 EC2 EC2
Region
AWS Gaming Solutions | GDC 2014
Messages and Queues
ELB
• Simple Notification Service
• HTTP
• SMS
• Mobile Push
• CloudWatch
• Monitoring
• Alerts
EC2 EC2 EC2
Region
EC2
PUB
AWS Gaming Solutions | GDC 2014
Messages and Queues
ELB
EC2 EC2 EC2
Region
EC2 EC2
• Simple Notification Service
• HTTP
• SMS
• Mobile Push
• CloudWatch
• Monitoring
• Alerts
• SQS
• Background Tasks
• Avatar Resizing
• Score Processing
AWS Gaming Solutions | GDC 2014
Messages and Queues
ELB
EC2 EC2 EC2
Region
EC2 EC2
• Simple Notification Service
• HTTP
• SMS
• Mobile Push
• CloudWatch
• Monitoring
• Alerts
• SQS
• Background Tasks
• Avatar Resizing
• Score Processing
AWS Gaming Solutions | GDC 2014
Messages and Queues
ELB
EC2 EC2 EC2
Region
EC2 EC2
• Simple Notification Service
• HTTP
• SMS
• Mobile Push
• CloudWatch
• Monitoring
• Alerts
• SQS
• Background Tasks
• Avatar Resizing
• Score Processing
PUB
AWS Gaming Solutions | GDC 2014
Wrap It Up Already
• Start Simple With Beanstalk
• Go Directly to DynamoDB, Do Not Pass Go
• CloudFront + S3 for Download and Upload
• Add Multiplayer - Hybrid
• Use the EC2 C3 Instance
• SQS to Decouple and Scale
AWS Gaming Solutions | GDC 2014
Cheers – Nate Wiger @nateware