Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
To a thousand servers and beyond: scaling a massive PHP application
Nikolay Bachiyski
February 25, 2012
Programming
3
1.1k
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
180
Building Calypso-like Applications
nb
3
510
Else Considered Harmful
nb
2
740
On Learning
nb
2
420
WordPress: To OOP or not to OOP
nb
4
7.2k
On Creeds and Manifestos
nb
2
140
Welcome to the Chaos – The Distributed Workplace
nb
3
170
Взимане на продуктови решения (Making product decisions)
nb
0
96
Other Decks in Programming
See All in Programming
ちょっとつよい足トラ
logilabo
0
350
「混ぜるな危険」を推進する設計
minodriven
8
2.5k
夕食断食にTRY!/for-lt-12th
pachikuriii
0
230
Google IO 2022 社内LT会 / What's new in Android development tools
shingo_kobayashi
0
380
アジャイルで不確実性に向き合うための開発タスクの切り方
tanden
4
1.1k
ベストプラクティス・ドリフト
sssssssssssshhhhhhhhhh
1
200
リーダブルテストコード / #vstat
jnchito
46
34k
Cloudflare WorkersでGoのHTTPサーバーを動かすライブラリを作った話
syumai
0
140
僕が便利だと感じる Snow Monkey の特徴/20220723_Gifu_WordPress_Meetup
oleindesign
0
110
VIMRC 2022
achimnol
0
120
JetpackCompose 導入半年で感じた 改善点
spbaya0141
0
140
ESM移行は無理だけどおれもSindreのライブラリが使いたい!
sosukesuzuki
2
530
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
21
5.5k
We Have a Design System, Now What?
morganepeng
35
3k
YesSQL, Process and Tooling at Scale
rocio
157
12k
Building an army of robots
kneath
299
40k
From Idea to $5000 a Month in 5 Months
shpigford
373
44k
Infographics Made Easy
chrislema
233
17k
Agile that works and the tools we love
rasmusluckow
319
19k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
173
8.6k
Building Adaptive Systems
keathley
25
1.1k
Mobile First: as difficult as doing things right
swwweet
213
7.5k
Debugging Ruby Performance
tmm1
65
10k
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