Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Designing systems to scale
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Michael Heap
October 06, 2012
Technology
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Designing systems to scale
Talk given at PHPNW12 in Manchester, England
Michael Heap
October 06, 2012
More Decks by Michael Heap
See All by Michael Heap
WTF are OKRs?
mheap
0
600
But why does the business care?
mheap
0
400
Advanced GitHub Actions
mheap
0
740
Controlling Your Kong Gateway With decK and CI/CD
mheap
0
760
API Standards 2.0
mheap
1
1.3k
API Standards 2.0
mheap
0
730
Dr Sheldon Cooper Presents: Fun with Flags (NEPHP)
mheap
0
810
Dr Sheldon Cooper Presents: Fun with Flags
mheap
0
1.3k
Behat for characterization tests
mheap
0
610
Other Decks in Technology
See All in Technology
形式手法を使って仕様をコーディングしよう
mikanichinose
0
160
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
510
猫でもわかるKiro Web
kentapapa
1
160
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
100
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
210
いちAWSエンジニアのAI活用を振り返る #devio2026 / devio osaka 2026 kawahara
masahirokawahara
1
310
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
2k
Codex概要
ymiya55
0
150
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
280
AI Native Platform Engineering 〜PlatformとAgileで“作る速さ”を“価値”へ〜
uya116
0
580
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
560
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Mobile First: as difficult as doing things right
swwweet
225
10k
Balancing Empowerment & Direction
lara
6
1.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
290
BBQ
matthewcrist
89
10k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
750
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Code Review Best Practice
trishagee
74
20k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Transcript
Designing Systems To Scale
I’m Michael
I’m @mheap I’m Michael
I’m absolutely terrified I’m @mheap I’m Michael
Designing Systems To Scale
Designing Systems To Scale
Designing Systems To Scale
Write programs that do one thing and do it well.
Write programs to work together. Write programs to handle text streams, because that is a universal interface. - Doug McIlroy
Do one thing, and do it well
None
V1
V1 • Codeigniter Application
V1 • Codeigniter Application • No (working) indices on the
database
V1 • Codeigniter Application • No (working) indices on the
database • Used the REST API and pulled data on demand
V1 • Codeigniter Application • No (working) indices on the
database • Used the REST API and pulled data on demand • PHP for realtime parsing
V1 • Codeigniter Application • No (working) indices on the
database • Used the REST API and pulled data on demand • PHP for realtime parsing • All stored in one git repo
24 Users
V1 • Codeigniter Application • No (working) indices on the
database • Used the REST API and pulled data on demand • PHP for realtime parsing • All stored in one git repo
V2
V2 • Decoupled
V2 • Decoupled • Made up of five “apps”
V2 • Decoupled • Made up of five “apps” •
Easier to scale
V2 • Decoupled • Made up of five “apps” •
Easier to scale • More fault tolerant
MySQL Twitter Redis API Bucket Parser API Website Mobile App
Do one thing, and do it well
... is rule #1
If all you have is a hammer...
... everything looks like a nail
Rule #2
Use the right tool for the job
LNMPNRM
LNMPNRM • Linux
LNMPNRM • Linux • nginx
LNMPNRM • Linux • nginx • MySQL
LNMPNRM • Linux • nginx • MySQL • PHP
LNMPNRM • Linux • nginx • MySQL • PHP •
NodeJS
LNMPNRM • Linux • nginx • MySQL • PHP •
NodeJS • Redis
LNMPNRM • Linux • nginx • MySQL • PHP •
NodeJS • Redis • Mongo DB
LNMPNRMR? • Linux • nginx • MySQL • PHP •
NodeJS • Redis • Mongo DB • Ruby
Rule #3
Stand on the shoulders of giants
Do one thing, and do it well Use the right
tool for the job Stand on the shoulders of giants
Now for the technical stuff...
Service Oriented Architecture
Shared Nothing Architecture
... Except your database
Make it stateless
Make it event driven
API Driven Design
Models talk to the Database
Models talk to the API
API = Data
Website
Mobile App
Raspberry Pi
API = Data
Things I’ve learned
Expose JSON
REST is good
REST is good Except when it’s not
Databases
We use MySQL
We use InnoDB
MySQL 5.6 EXPLAIN ALL THE THINGS!
None
pt-online-schema-change xtrabackup pt-archive pt-query-digest pt-query-advisor pt-show-grants pt-fingerprint
Things I’ve learned
Indexes go from left to right
User (email, first, last, dob) name_index(first, last) email_index(email) user_index(last, dob)
InnoDB uses primary key in indexes
Speed up SELECT Slow down INSERT Indices
One connection means One query
ORM’s are evil
Denormalisation is ok
Backups
mysqldump
InnoDB Hot Backup
Percona Xtrabackup
1,000,001
Recovery
Choose your battles
Servers
Servers (in the cloud?)
Learn to set up a server
Leave it to the professionals
Virtualisation
Get a VPS with Amazon AWS
Get a VPS with Rackspace
Get a VPS with Azure
Get a VPS with $vpsCompany
Leeds Hack
Things I’ve learned
£££
Multiple small beats one large
Dedicated is good too
Host your own database
Documentation
Not just about writing your own
None
You should also write your own
None
Easy Can we still deploy?
Easy Can we still deploy? Harder What if we need
a new server firing up?
Easy Can we still deploy? Harder What if we need
a new server firing up? Even Harder What if $customComponent breaks?
Make yourself dispensable
Always code as if the guy who ends up maintaining
your code will be a violent psychopath who knows where you live - John f. Woods
Things I’ve learned
Smart Defaults
Dependency Management
Just use Composer or rubygems/npm/pip... etc
Things I’ve learned
Lock your dependecies
v 1.4.2
v 1.4.2 Bug Fix
v 1.4.2 Feature release
v 1.4.2 All hell breaks loose
Lock your dependecies
Control your dependecies
None
Control your dependecies
Automation
Predictability
It saves time
Choose one [MRJC]ake
forever stop /home/user/parser/parser.js && APP_ENV=production forever start -a -l ~/parser-logs/
parser.log -o ~/parser-logs/out.log -e ~/parser-logs/ parser.err.log --minUptime 10000 --spinSleepTime 8000 ~/ parser/parser.js
forever stop /home/user/parser/parser.js && APP_ENV=production forever start -a -l ~/parser-logs/
parser.log -o ~/parser-logs/out.log -e ~/parser-logs/ parser.err.log --minUptime 10000 --spinSleepTime 8000 ~/ parser/parser.js parser_control restart
Automating scary things
Push data not pull
Things I’ve learned
Vagrant
Puppet/Chef
Devops!
Logging
Log *everything*
Aggregated logs
Monolog
Make it an option
Things I’ve learned
Nothing... yet
Outsourcing
Things like hosting repos
Things like sending emails
Things like *insert task*
Outsourcing validation
Things I’ve learned
You don’t have to do everything
Testing
Testing is for peace of mind
It is not a design process
Integration tests over unit tests
Unit tests are nice too
Things I’ve learned
Test only what you need
Behat + Selenium
Being Human
You’re your own worst enemy
Logging queries to MongoDB
Node.js’ process.nextTick
Something I haven’t even realised
Things I’ve learned
Learn to fail
People make mistakes
Believe in yourself
I’m Michael
I’m @mheap I’m Michael
I hope you enjoyed this talk I’m @mheap I’m Michael