Upload
buiphuc
View
228
Download
0
Embed Size (px)
Citation preview
TO MILLIONS OF SUMMONERS SCOTT DELAP SCALABILITY ARCHITECT GDC 2012
ABOUT ME – SCOTT DELAP
Scalability Architect
Joined Riot in 2008
About a year before beta
@scottdelap
ABOUT RIOT GAMES
500+ EMPLOYEES
OFFICES IN SANTA MONICA,
ST. LOUIS, DUBLIN, SEOUL
FOUNDED SEPT.2006
OUR MISSION
TO BE THE MOST PLAYER-FOCUSED GAME COMPANY IN THE WORLD.
LEAGUE OF LEGENDS: INTRO
July 2011
15 MIL REGISTERED
4 MIL MONTHLY
1.4 MIL DAILY
0.5 MIL PEAK CCU
3.7 MIL DAILY HRS
November 2011
32.5 MIL REGISTERED
11.5 MIL MONTHLY
4.2 MIL DAILY
1.3 MIL PEAK CCU
10.5 MIL DAILY HRS
A UNIQUE SCALING CHALLENGE
Social elements
require uniform access
Crafting an enjoyable
user experience
GAME FEATURES
DO NOT ALWAYS SUPPORT
TRADITIONAL DECOMPOSITION
MEETS THESE NEEDS?
AGENDA
EMBRACING JAVA AND NoSQL
SIMPLE IS BEST
CODE A DYNAMIC SYSTEM
SCALING BEST PRACTICES
MONITOR EVERYTHING
HOW DO WE DEVELOP A
SYSTEM RAPIDLY…
…WHILE PLANNING FOR
FUTURE CAPACITY NEEDS?
PROBLEM #1:
LEAGUE OF LEGENDS: TECH OVERVIEW
CLIENT EXPERIENCE
PvP.net Adobe Air Flex Game Client C DirectX
SERVER SIDE STACK
Apache Tomcat
Spring
ActiveMQ
Coherence
Hibernate
MySQL
PHP
Cake
MySQL
Game Servers
Game Servers
Game Servers
Game Servers
TODAY’S FOCUS
CLIENT EXPERIENCE
PvP.net Adobe Air Flex Game Client C DirectX
SERVER SIDE STACK
Apache Tomcat
Spring
ActiveMQ
Coherence
Hibernate
MySQL
PHP
Cake
MySQL
Game Servers
Game Servers
Game Servers
Game Servers
A TECH STACK WITH NEW AND OLD ELEMENTS
MySQL
Apache Tomcat
Spring
Apache Tomcat
Spring
Apache Tomcat
Spring
Coherence
Hibernate
Coherence
Hibernate
Coherence
Hibernate
Coherence
Hibernate
BENEFITS OF TRADITIONAL JAVA
MATURE OPEN SOURCE
ECOSYSTEM
ESTABLISHED TOOLS
LARGE POOL OF TALENTED
DEVELOPERS
ACCELERATING THE FOUNDATION WITH NoSQL
NoSQL SOLUTION ORACLE COHERENCE
DATA STORED IN CACHES BY KEY
NUMEROUS USES
PROVIDES ELASTICITY
NoSQL ENABLING RAPID GROWTH
Horizontal scaling of Coherence greatly simplified absorbing CCU growth over time
1
Design patterns enforced by Coherence promoted feature level scaling as well
2
CACHING IN DETAIL
SHARDING LOGIC AT APPLICATION LEVEL
COHERENCE
DAO
MySQL
HIBERNATE
COHERENCE
EMBRACING CACHE ADVANTAGES
DAO
MySQL
HIBERNATE
COHERENCE
EMBRACING CACHE ADVANTAGES
DAO
MySQL
HIBERNATE
LEVERAGING ADVANTAGES
GRID COMPUTING
TRANSPARENT
PARTITIONING
AGENDA
EMBRACING JAVA AND NoSQL
SIMPLE IS BEST
CODE A DYNAMIC SYSTEM
SCALING BEST PRACTICES
MONITOR EVERYTHING
HOW DO WE QUICKLY
DEVELOP NEW FEATURES…
…WHILE LIMITING BUGS?
PROBLEM #2:
SIMPLE IS BEST
JAVA
MEMORY
NETWORK
MODERN
CPU 3 BILLION INSTRUCTIONS/SECOND
FAST
Complexity is the enemy of quality
DON’T OVER DESIGN
RIG THE GAME
Divide inputs of algorithm,
then parallel process Continually coordinate
RIG THE GAME
THREAD 1 THREAD 2
Coordination
Coordination
Coordination
Data
Data
Data
Data
Data
Work
Work
Work
Work
Work
Work
Work
Work
Work
Work
RIG THE GAME
Data Data Data Data Data
THREAD 1 THREAD 2
RIG THE GAME
THREAD 1 THREAD 2
Data Work
Data Work
Data Work
Work
Work
Data Work
Data Work
Data Work
Work
Work
AGENDA
EMBRACING JAVA AND NoSQL
SIMPLE IS BEST
CODE A DYNAMIC SYSTEM
SCALING BEST PRACTICES
MONITOR EVERYTHING
HOW DO WE HANDLE NOT JUST
MONTHLY CHANGE…
…BUT HOURLY CHANGE?
PROBLEM #3:
HARDWARE FAILURES
CODE A DYNAMIC SYSTEM
LARGE SYSTEM
CHANGES AS
IT’S RUNNING
FIX?
HARDWARE FAILURES
CODE A DYNAMIC SYSTEM
LARGE SYSTEM
CHANGES AS
IT’S RUNNING
Next release?
During downtime?
FIX?
HARDWARE FAILURES
CODE A DYNAMIC SYSTEM
LARGE SYSTEM
CHANGES AS
IT’S RUNNING
Next release?
During downtime?
CODE A DYNAMIC SYSTEM
Dynamic Cluster
Recomposition
Stateless Growth
Patterns
TECHNOLOGIES W/
ELASTIC PROPERTIES
NOT EVERY PIECE OF YOUR STACK HAS TO BE ELASTIC
All relevant configuration properties are dynamic
1
Coherence near caches used to propagate changes to nodes dynamically
2
Algorithms written so they are aware their variables may change while running
3
CODE A DYNAMIC SYSTEM
LARGER EXAMPLES OF DYNAMIC BEHAVIOR
Hotfixes require less downtime Features can be deployed in advance of
release windows
Entire machine/feature combinations can be deployed & updated
THREAD POOLS
= DYNAMICALLY CONFIGURABLE
AGENDA
EMBRACING JAVA AND NoSQL
SIMPLE IS BEST
CODE A DYNAMIC SYSTEM
SCALING BEST PRACTICES
MONITOR EVERYTHING
WHAT HAPPENS WHEN WE
FOLLOW ALL THE RULES…
…AND STILL RUN
INTO ISSUES?
PROBLEM #4:
SCALING BEST PRACTICES HAVE CONSEQUENCES
Scaling is hard 1
Let’s get rid of some things so can do this easier 2
What do we get rid of? I can’t decide… 3
Plan B…instead of what you can’t do, I’ll tell you what you can 4
Follow these X rules and everything will be fine 5
If all problems can
be written with a
map step and a
reduce step…
MAP REDUCE
I’m taking away
your joins…
NoSQL
Pick two…
CAP
SCALING BEST PRACTICES HAVE CONSEQUENCES
Blog Entry
CONSEQUENCES
ATOMIC OPERATIONS OFTEN BECOME SCOPED
BY ENTRY VALUES AND ROOT OBJECTS
Blog Entry
CONSEQUENCES
ATOMIC OPERATIONS OFTEN BECOME SCOPED
BY ENTRY VALUES AND ROOT OBJECTS
COMMENT
Blog Entry
CONSEQUENCES
ATOMIC OPERATIONS OFTEN BECOME SCOPED
BY ENTRY VALUES AND ROOT OBJECTS
COMMENT
AN EXAMPLE OF A MISMATCH
SERVER ROOT OBJECT
AS GAMES ARE ALLOCATED,
CHILD OBJECTS ARE ADDED
COMPLEXITY OF CHILD OBJECTS
GAMES PER SERVER
AN EXAMPLE OF A MISMATCH
ROOT OBJECTS AND CHILD OBJECTS
MACHINE
Game Instance
Name Players State
Game Instance
Name Players State
Game Instance
Name Players State
EVOLUTION OF AN ANTI-PATTERN
Child Object Child Object Child Object Child Object Child Object Child Object
MACHINE
2-50k 2-50k 2-50k 2-50k 2-50k 2-50k
<20k >500k
NETWORK TRANSFER FAST OBJECT SERIALIZATION
BOUNDING FACTORS
THE PIPE IS FULL
MACHINE
Game
Instance
Game
Instance
Game
Instance
MACHINE
Game
Instance
Game
Instance
Game
Instance
MACHINE
Game
Instance
Game
Instance
Game
Instance
MACHINE
Game
Instance
Game
Instance
Game
Instance
MACHINE
Game
Instance
Game
Instance
Game
Instance
DO WE REALLY HAVE ONE OBJECT?
Game Instance
Name Players
MACHINE
Game
Instance
State
Game
Instance
State
Game
Instance
State
SMALLER IS BETTER!
MACHINE
Game Instance
State
Game Instance
State
Game Instance
State
MACHINE
Game Instance
State
Game Instance
State
Game Instance
State
MACHINE
Game Instance
State
Game Instance
State
Game Instance
State
MACHINE
Game Instance
State
Game Instance
State
Game Instance
State
MACHINE
Game Instance
State
Game Instance
State
Game Instance
State
AGENDA
EMBRACING JAVA AND NoSQL
SIMPLE IS BEST
CODE A DYNAMIC SYSTEM
SCALING BEST PRACTICES
MONITOR EVERYTHING
HOW DO WE KNOW…
…WHEN WE HAVE A PROBLEM?
PROBLEM #5:
LOGS WITH MILLIONS
OF OPERATIONS/DAY
MONITOR EVERYTHING
VS.
LOGS WITH MILLIONS
OF OPERATIONS/DAY
MONITOR EVERYTHING
VS.
WHAT HAPPENED HERE?
Networking issue!
MONITOR EVERYTHING
Automate metrics gathering 1
Spring performance monitoring interceptor 2
Log out call stack on external calls 3
Sample internal calls 4
Automate reporting 5
Trivial cost vs. benefit 6
MONITOR EVERYTHING
…LETS GREP THE RED ITEMS…
DATA IS USELESS WITHOUT AN EASY WAY TO VIEW IT.
MONITOR EVERYTHING
AUTOMATE NEXT
5 QUESTIONS/ANSWERS
(Why should they be manual?)
MONITOR EVERYTHING
RECAP
EMBRACING JAVA AND NoSQL
SIMPLE IS BEST
CODE A DYNAMIC SYSTEM
SCALING BEST PRACTICES
MONITOR EVERYTHING
SCOTT DELAP SCALABILITY ARCHITECT [email protected]
GDC 2012
www.riotgames.com/careers (We’re also in the Career Pavilion at booth #CP1813)