Download - Scalable Gaming with AWS - GDC 2014

Transcript
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