Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

F# in the Cloud

F# in the Cloud

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.

Yan Cui

May 01, 2014
Tweet

More Decks by Yan Cui

Other Decks in Programming

Transcript

  1. Image by Mike Rohde in the Cloud and at Scale

    Yan Cui (@theburningmonk) F#
  2. 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
  3. 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
  4. 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
  5. 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
  6. What is the Cloud? IaaS VMs, load balancers, storage, ...

    PaaS Runtime, database, web servers, ... SaaS Virtual desktop, games, emails, ...
  7. 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
  8. 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
  9. 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!
  10. Stateful Server • Persist player state after short inactivity •

    Move player to another server after persistence
  11. Why Stateful Server? • 500% efficiency increase • 60% reduction

    in avg latency • Fewer game servers • No CouchBase cluster • Huge saving on cost
  12. 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
  13. 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
  14. 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
  15. Stateful Server Game Server Player A Player B S3 Worker

    C Worker B Gatekeeper Request Handlers Asynchronous
  16. Stateful Server Game Server Player A Player B S3 Worker

    C Worker B Gatekeeper Worker A Request Handlers Asynchronous ok
  17. Stateful Server Game Server Player A Player B S3 Worker

    C Worker B Gatekeeper Worker A Request Handlers Asynchronous
  18. Stateful Server Game Server Player A Player B S3 Worker

    C Gatekeeper Worker A Request Handlers Asynchronous
  19. Stateful Server Game Server Player A Player B S3 Worker

    C Worker A Request Handlers Gatekeeper Asynchronous
  20. 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
  21. 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!
  22. JackpotJoy Slots http://apps.facebook.com/jackpotjoyslots Bingo Lane http://apps.facebook.com/bingolane Here Be Monsters http://apps.facebook.com/herebemonsters

    Building a MMORPG http://bit.ly/1hjqoL8 http://slidesha.re/18MD4XY Google I/O 2013 – Here Be BigQuery http://bit.ly/1fHjbce