Scalable Gaming with AWS - GDC 2014

41
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

description

Discover how mobile game companies are leveraging AWS to build cost-effective, scalable games. Learn how companies like Supercell are using EC2 and S3 to run their online game servers. Understand the challenges in scaling game databases, and how developers like Halfbrick use DynamoDB to overcome these demands. Learn how you can use the new EC2 G2 and C3 instances to run multiplayer games in the cloud. Finally, see how developers like Rovio are using SNS to send mobile push notifications to keep players engaged.

Transcript of Scalable Gaming with AWS - GDC 2014

Page 1: 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

Page 2: Scalable Gaming with AWS - GDC 2014

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

Page 3: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Gratuitous Logo Slide

Page 4: Scalable Gaming with AWS - GDC 2014

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

Page 5: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Pay As You Scale

Page 6: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

10 Regions

51 CloudFront POPs

Continuous Expansion

Global Is Good

Page 7: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Page 8: Scalable Gaming with AWS - 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

Page 9: Scalable Gaming with AWS - GDC 2014

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

Page 10: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Scale It Way Out

ELB

S3

•  Auto Scaling Group •  Capacity on Demand •  Respond to Users

EC2 EC2 EC2

Region

Page 11: Scalable Gaming with AWS - GDC 2014

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

Page 12: Scalable Gaming with AWS - GDC 2014

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

Page 13: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Big picture slide

Page 14: Scalable Gaming with AWS - GDC 2014

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

Page 15: Scalable Gaming with AWS - GDC 2014

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

Page 16: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Page 17: Scalable Gaming with AWS - 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

Page 18: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Page 19: Scalable Gaming with AWS - 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

Page 20: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Sharding (Not Fun)

Availability Zone A

C2

Page 21: Scalable Gaming with AWS - GDC 2014

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

Page 22: Scalable Gaming with AWS - GDC 2014

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?

Page 23: Scalable Gaming with AWS - GDC 2014

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

Page 24: Scalable Gaming with AWS - GDC 2014

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'])    

Page 25: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Big picture slide

Page 26: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

G2 Instance

•  NVIDIA Kepler GPU •  Game Streaming •  Rendering Assets •  Build Servers •  AppStream!

Page 27: Scalable Gaming with AWS - GDC 2014

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

Page 28: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Enhanced Networking (SR-IOV)

Before: Hypervisor

After: Hardware

Page 29: Scalable Gaming with AWS - GDC 2014

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

Page 30: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Multiplayer Game Servers

①  Login via Beanstalk ②  Request Matchmaking ③  Get Game Server IP

EC2 EC2 EC2

Region

EC2

Page 31: Scalable Gaming with AWS - GDC 2014

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

Page 32: Scalable Gaming with AWS - GDC 2014

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

Page 33: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Multi-Region Game Servers

E2

Region

EC2

Region

Page 34: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Big picture slide

Page 35: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Messages and Queues

ELB

S3

•  Simple Notification Service •  HTTP •  SMS •  Mobile Push

EC2 EC2 EC2

Region

Page 36: Scalable Gaming with AWS - GDC 2014

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

Page 37: Scalable Gaming with AWS - GDC 2014

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

Page 38: Scalable Gaming with AWS - GDC 2014

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

Page 39: Scalable Gaming with AWS - GDC 2014

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

Page 40: Scalable Gaming with AWS - GDC 2014

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

Page 41: Scalable Gaming with AWS - GDC 2014

AWS Gaming Solutions | GDC 2014

Cheers – Nate Wiger @nateware