Scalable Gaming with AWS - GDC 2014
-
Upload
nate-wiger -
Category
Technology
-
view
106 -
download
1
description
Transcript of Scalable Gaming with AWS - 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