Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
To a thousand servers and beyond: scaling a mas...
Search
Nikolay Bachiyski
February 25, 2012
Programming
3
1.4k
To a thousand servers and beyond: scaling a massive PHP application
Stories of abstraction and scaling WordPress.com. And what they have in common.
Nikolay Bachiyski
February 25, 2012
Tweet
Share
More Decks by Nikolay Bachiyski
See All by Nikolay Bachiyski
React.js for WordPress Developers
nb
0
240
Building Calypso-like Applications
nb
3
770
Else Considered Harmful
nb
2
900
On Learning
nb
2
720
WordPress: To OOP or not to OOP
nb
4
7.8k
On Creeds and Manifestos
nb
2
170
Welcome to the Chaos – The Distributed Workplace
nb
3
180
Взимане на продуктови решения (Making product decisions)
nb
0
120
Other Decks in Programming
See All in Programming
安全に倒し切るリリースをするために:15年来レガシーシステムのフルリプレイス挑戦記
sakuraikotone
5
2.1k
体得しよう!RSA暗号の原理と解読
laysakura
3
500
ベクトル検索システムの気持ち
monochromegane
28
8.3k
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
240
‘무차별 LGTM~👍’만 외치던 우리가 ‘고봉밥 코드 리뷰’를?
hannah0731
0
510
OUPC2024 Day 1 解説
kowerkoint
0
390
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
1.4k
List とは何か? / PHPerKaigi 2025
meihei3
0
310
なぜselectはselectではないのか
taiyow
2
280
NestJSのコードからOpenAPIを自動生成する際の最適解を探す
astatsuya
0
160
신입 안드로이드 개발자의 AI 스타트업 생존기 (+ Native C++ Code를 Android에서 사용해보기)
dygames
0
480
Going Structural with Named Tuples
bishabosha
0
150
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
GitHub's CSS Performance
jonrohan
1030
460k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
320
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
8
690
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Building an army of robots
kneath
304
45k
A Tale of Four Properties
chriscoyier
158
23k
Testing 201, or: Great Expectations
jmmastey
42
7.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
We Have a Design System, Now What?
morganepeng
51
7.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
176
52k
Transcript
To 1000 servers and beyond Nikolay Bachiyski PHPUK 2012
http://extrapolate.me/ @nikolayb
None
None
None
Stinson Beach, July 2007
Budapest, Oct 2011
Jul, 2007 65MM Feb, 2011 800MM PV
2 stories
Story #1
Deep Pink Meet
Don’t like?
Beer Beheader =
None
None
Abstraction
None
Beer Theory
None
Want to be better?
Get to know the abstraction below
Servers are below
Story #2 Scaling WordPress.com
None
X
Deep Pink SAD
None
X
Deep Pink SAD
None
None
Users Blogs Blogs
No joins :(
None
SELECT * FROM wp_users WHERE id=43315 SELECT * FROM wp_posts
LIMIT 10
HyperDB
None
SELECT * FROM wp_users WHERE id=43315
Query parsing
add_db_table('user', 'wp_users') Dataset Table name
add_db_server('user', 0, 1, 0,
'db42.wordpress.com',…) Dataset Partition Read Write Slave
Failover X
Can work without
http://wordpress.org/extend/plugins/hyperdb/
None
None
C C C C
$count = wp_cache_get('posts', 'counts'); if ( false !== $count )
return $count; $count = $wpdb-‐>get_results($complex_query);
Output caching
10% 90% reads writes
C C C C
C C C C
Deep Pink SAD
Datacenter
C C sane sane
C C crazy sane Update
C C crazy sane Stale!
C C crazy crazy
Deploy
trunk/
Branch in code
~100 commits a day
~100 deploys a day
to ~1000 servers
One-click
None
Fast!
wpdev@nikolay:~$ deploy wpcom Going to update from 47127 to 47128
Syncing wpcom SVN Mirrors ORD (0s)... LUV (0s)... SAT (0s)... Deploying wpcom revision 47128 ORD (3s)... SAT (5s)... LUV (6s)... Revision 47128 successfully deployed (8s)
None
None
Yeah, immediately!
Push to twitter
Push to Facebok
Stats
Spam checks
Index for search
Invalidate caches
Publish the post
ASYNC JOBS
None
$job_id = queue_async_job($data, 'encode_video');
Priorities
Deferred jobs
None
PHP & MySQL
http://code.trac.wordpress.org/wiki/JobsDocs http://code.trac.wordpress.org/browser/jobs
Integration
Hacking
None