Upload
yan-cui
View
2.983
Download
0
Tags:
Embed Size (px)
DESCRIPTION
In this talk I introduced some key concepts of cloud computing and an example of how we use F#'s support for actors to implement a stateful server architecture succinctly.
Citation preview
Image by Mike Rohde
in the Cloud and at ScaleYan Cui (@theburningmonk)F#
Who is Gamesys?
•Founded in 2001
•#1 in the UK
• Handle $5 Billion in turnover annually
•First company to launch real money gaming on Facebook
•Employ 1,000 globally
Running in the Cloud, at Scale
• 1 Million DAU
• 250 Million requests/day
• 7 Billion rows of analytics events/month
• 2 TB of analytics data/month
Running in the Cloud, at Scale
• 100% cloud hosted
• AWS for Game services
• Google App Engine for back-office services
• NoSQL databases– DynamoDB, CouchBase, Redis, Neo4j, ...
• Google BigQuery for analytics
What is the Cloud?
Cloud computing is an expression used to describe a variety of computing concepts that involve a large number of computers connected through a real-time communication network such as the Internet....
Such virtual servers do not physically exist and can therefore be moved around and scaled up (or down) on the fly without affecting the end user - arguably, rather like a cloud.
- Wikipedia
What is the Cloud?
IaaSVMs, load balancers, storage, ...
PaaSRuntime,
database, web servers, ...
SaaSVirtual desktop,
games, emails, ...
Why the Cloud?
• Trade capital cost with operating cost
• Lower operating cost
• Elastic scaling
• Speed and agility
• Focus on what differentiates your product
• Global infrastructure for your global audience
Why the Cloud - Scalability
• Scale up
• Scale out
• Scale everything!– Your architecture is as scalable as its least scalable part
• Scalability != simple choice of language/framework
Travel, Collect, Craft!
Trap Monsters
Stateful Server
Elastic Load Balancer
S3
Auto scaling Group
Server A Server B
...
EC2
CloudFront
Stateful Server
• Need to ensure Server affinity– All calls need to be routed to the affined server
• Need to balance load– Session lengths vary greatly– Some players are more active than others– Need to avoid hot spots
• Need to avoid players hogging a server– Need to be able to scale down!
Stateful Server
• Persist player state after short inactivity
• Move player to another server after persistence
Why Stateful Server?
• 500% efficiency increase
• 60% reduction in avg latency
• Fewer game servers
• No CouchBase cluster
• Huge saving on cost
The Actor Model
An actor is the fundamental unit of computation which embodies the 3 things
• Processing• Storage• Communication
that are essential to computation.
-Carl Hewitt*
* http://bit.ly/HoNHbG
The Actor Model
• Everything is an actor
• An actor has a mailbox
• When an actor receives a message it can:– Create new actors– Send messages to actors it has addresses for– Designate how to handle the next message it receives
Stateful Server
• Gatekeeper– Manages the local list of active workers– Spawns new workers
• Worker– Manages the states for a player– Optimistic locking– Persist state after period of inactivity
Stateful Server
Game Server
Player A
Player B
S3Worker C
Worker B
GatekeeperRe
ques
t Han
dler
s
Asynchronous
Stateful Server
Game Server
Player A
Player B
S3Worker C
Worker B
Gatekeeper
Worker A
Requ
est H
andl
ers
Asynchronous
ok
Stateful Server
Game Server
Player A
Player B
S3Worker C
Worker B
Gatekeeper
Worker A
Requ
est H
andl
ers
Asynchronous
Stateful Server
Game Server
Player A
Player B
S3Worker C
Gatekeeper
Worker A
Requ
est H
andl
ers
Asynchronous
Stateful Server
Game Server
Player A
Player B
S3Worker C
Worker A
Requ
est H
andl
ers
Gatekeeper
Asynchronous
error
MailboxProcessor<Message>
Async<Message option>
switch state
Why F#?
• Time to Market
• Efficiency
• Correctness
• Complexity
Why F#?
• Agents– No locks– Asynchronous message passing– Each actor is self-contained and easier to reason with
• Pattern matching– Clear and concise way to handle all branch conditions
Why F#?
• Async Workflows– Non-blocking IO– Convert synchronous code into asynchronous code with
minimal code changes– Similar to C# 5’s async-await feature, but available in F#
since 2007!
Thank You!
JackpotJoy Slotshttp://apps.facebook.com/jackpotjoyslots
Bingo Lanehttp://apps.facebook.com/bingolane
Here Be Monstershttp://apps.facebook.com/herebemonsters
Building a MMORPGhttp://bit.ly/1hjqoL8http://slidesha.re/18MD4XY
Google I/O 2013 – Here Be BigQueryhttp://bit.ly/1fHjbce