rapidly developing farmville

30

Upload: ash

Post on 23-Feb-2016

55 views

Category:

Documents


1 download

DESCRIPTION

Rapidly Developing FarmVille. How we built and scaled a # 1 Facebook game in 5 weeks. Amitt Mahajan Lead Developer – FarmVille March 9, 2010. 5 week development cycle. FarmVille. 6 developers (PHP/Flash) 2 artists 3 producers/designers. At Launch. Today. FarmVille. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Rapidly Developing  FarmVille
Page 2: Rapidly Developing  FarmVille

Rapidly Developing FarmVilleHow we built and scaled a

#1 Facebook game in 5 weeks

Amitt MahajanLead Developer – FarmVille

March 9, 2010

Page 3: Rapidly Developing  FarmVille

FarmVille

6 developers (PHP/Flash)2 artists3 producers/designers

5 week development cycle

Page 4: Rapidly Developing  FarmVille

FarmVille

18K users/day after 24 hrs1M users/day after 4 days

At Launch

110M+ Installs 31M Players/Day

Today

Page 5: Rapidly Developing  FarmVille

My Goals

• Reduce the amount of time it takes you to develop your games

• Give you a blueprint for how to reliably scale your games to millions without your servers falling over

Page 6: Rapidly Developing  FarmVille

What slows down developers?

• Other developers• Design / Art• Production (Copy)• Lack of knowledge

Page 7: Rapidly Developing  FarmVille

Increasing Developer Efficiency• All developers know both

• Design DOESN’T rule all• Developers co-own features with designers

Flash (Client)PHP (Server)

Page 8: Rapidly Developing  FarmVille

Data Driven Design

• Shoot for a content pipeline that doesn’t need a developer

• Data driven can be as easy as a designer-editable XML file

No dev needed!

Page 9: Rapidly Developing  FarmVille

String Tables

• A string table is an external file that holds strings for the app

• Best practice to prepare for localization• Developers are not blocked by production• Allows quick response to Facebook TOS

changes

Page 10: Rapidly Developing  FarmVille

Abstracted Network Layer

Goal Feature developers get client/server communication and serialization for free

AMF Protocol (RPC)

Flash PHP

Network Layer

Validation Checks

Action Batching

Networked Actions

Feature A Feature B

Network Layer

Validation Checks

Result Batching

Feature A Service

Feature B Service

Action Dispatcher

Page 11: Rapidly Developing  FarmVille

Client

Network Layer Batching

• No need to do the work twice• Reduced server load in FarmVille by 50%!

Plow

Plant

Plow

PlantPlow

Only One Request

ServeronPlow()

onPlow()

onPlant()…

Page 12: Rapidly Developing  FarmVille

Network Layer Validation

• Solves problem of unfiltered input• Ensures data is received by server in-order it

was sent

Page 13: Rapidly Developing  FarmVille

Social Network Wrapper

• Single place to perform Facebook API calls• Working with a highly dynamic API can be

difficult• Abstracting FB calls makes them easier to

integrate• Allows for cross-platform games

Page 14: Rapidly Developing  FarmVille

Continuous Deployment

• Build latest version of source-repo• Deploy to test “auto app” on Facebook to

surface production issues early

Page 15: Rapidly Developing  FarmVille

Continuous Deployment

FarmVille QA Process

QuickSmoke

Full TestPass

Auto app Staging Production

Page 16: Rapidly Developing  FarmVille

FarmVille Traffic Growth

1 Million DAUsevery week for 20 weeks

source: developeranalytics.com

Page 17: Rapidly Developing  FarmVille

Scalable Server Architecture

• We had no choice but to scale on the cloud• Every part of the server architecture scales

horizontally• No single points of failure• Take the DB out of the equation

Page 18: Rapidly Developing  FarmVille

Memcache Pool

Auto-scaling web array (PHP)

Web Server #1 Web Server #M

User Data & Updates

DataReads

Lazy Writes

DB Layer

Round Robin DNS

Load Balancer #1 Load Balancer #N

… DB-#KSlave

DB-#1Slave

DB-#KMaster

DB-#1Master

Page 19: Rapidly Developing  FarmVille

Web Server #1 Web Server #M

All you need to implement is…

…everything else is off-the-shelf components!

Page 20: Rapidly Developing  FarmVille

Reducing Load-times

• Users want responsive pages• Show something immediately

• Player’s won’t wait for your app to load• Stream non-critical content

Page 21: Rapidly Developing  FarmVille

Avoid Remote Calls• Remote server calls are slow and unreliable

• Aim for no remote calls during load• Embed data into Javascript

Facebook

Iframe

Inline-JS here

Flash ClientEmbed

Page 22: Rapidly Developing  FarmVille

Caching Slow Calls

• Build in Facebook API caching within the social network wrapper

• Write a DB wrapper to generate and cache SQL

Page 23: Rapidly Developing  FarmVille

FarmVille Page Profiler

Goal Catch and eliminate all un-cached Facebook and DB calls

Page 24: Rapidly Developing  FarmVille

Fault Tolerance

• Servers do go down randomly• Build redundancy on all levels of server

architecture• Facebook is a dependency also

• Aim for DB-less & Facebook-less modes• “Defcon”-style error management

Page 25: Rapidly Developing  FarmVille

Runtime Config

• How do we progressively keep the game running?• Create all features with kill-switches• Create a web dashboard to allow non-

technical folks to help out

Page 26: Rapidly Developing  FarmVille

Is it still running?

• Notify your team when things break using server monitoring (Nagios/Munin)

• What to watch• Server load/traffic graphs• Memcache evictions

Page 27: Rapidly Developing  FarmVille

Stats Tracking

• How do we know what users are seeing?• Have the client send back statistics

• Number of errors• Load-times

• Take a metrics driven approach to error handling

Page 28: Rapidly Developing  FarmVille

Before Launching

• Get confidence that your stuff actually works• Perform load testing

• Social games are a marathon not a sprint• Sleep before launching!

Page 29: Rapidly Developing  FarmVille

Questions?

Page 30: Rapidly Developing  FarmVille

Thank You!