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
Scaling Laravel - Laracon.net 2018
Search
Chris Fidao
February 07, 2018
Technology
15
1.8k
Scaling Laravel - Laracon.net 2018
Chris Fidao
February 07, 2018
Tweet
Share
More Decks by Chris Fidao
See All by Chris Fidao
Development Environments that Feel Local
fideloper
0
39
Refactoring Terraform - CloudCasts - Scaling EC2
fideloper
0
64
Linux Environment
fideloper
1
10k
Server Survival
fideloper
29
23k
FileBeat (Won't save you from the JVM)
fideloper
1
320
Powering Your Applications With Nginx
fideloper
9
7.7k
Hexagonal Architecture
fideloper
49
200k
Intro to etcd
fideloper
3
560
Service Oriented Architecture with a little help from NodeJS
fideloper
4
2.3k
Other Decks in Technology
See All in Technology
パスキー導入の課題と ベストプラクティス、今後の展望
ritou
7
1.2k
ペアーズにおけるData Catalog導入の取り組み
hisamouna
0
180
問題解決に役立つ数理工学
recruitengineers
PRO
7
2.2k
DevOps文化を育むQA 〜カルチャーバブルを生み出す戦略〜 / 20250317 Atsushi Funahashi
shift_evolve
1
110
チームビルディング「脅威モデリング」ワークショップ
koheiyoshikawa
0
150
お問い合わせ対応の改善取り組みとその進め方
masartz
1
370
caching_sha2_passwordのはなし
boro1234
0
220
ルートユーザーの活用と管理を徹底的に深掘る
yuobayashi
6
730
OCI見積もり入門セミナー
oracle4engineer
PRO
0
120
Redefine_Possible
upsider_tech
0
280
Explainable Software Engineering in the Public Sector
avandeursen
0
370
日本MySQLユーザ会ができるまで / making MyNA
tmtms
1
360
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Language of Interfaces
destraynor
157
24k
What's in a price? How to price your products and services
michaelherold
245
12k
Bash Introduction
62gerente
611
210k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
8
700
4 Signs Your Business is Dying
shpigford
183
22k
Building Your Own Lightsaber
phodgson
104
6.3k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Six Lessons from altMBA
skipperchong
27
3.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Speed Design
sergeychernyshev
28
860
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
Transcript
Scaling Laravel the talk!
What is Scaling? Optimization Scaling Out
• Increase requests per second • Increase speed of response
(reduce response time) • Decrease resource usage • Secondary Goal: Less Servers! What is Scaling Optimization Goal: Efficiency
• Consistent requests per second • Consistent speed of response
• Consistent despite increasing traffic What is Scaling Scaling Out Goal: Consistency
Optimization
Optimization • Eager Loading (n+1 problem) • Object Caching (decorator
pattern) • PHP-FPM (process management) • OpCache • Server Specialization (mysql optimization)
Optimization Eager Loading “n+1 problem” • Initial query returning a
Collection • + 1 Additional query per object in Collection
Optimization Eager Loading 3 Topics 6 Video Series
Optimization Eager Loading +1 queries Lazy Loading
Optimization Eager Loading +6 queries +3 queries Total Queries: 10
Optimization Eager Loading • First Query: Grab all topics (+1
query) • Foreach Topic: Grab Series (+3 queries) • Foreach Series: Grab Content (+6 queries)
Optimization Eager Loading -2 queries
Optimization Eager Loading -5 queries nested!
Optimization Object Caching Reduce DB Queries + Processing
Optimization Object Caching
Optimization Object Caching Decorators • Add behavior w/out modifying code
• Interface • Modifier(s) • Root Object (gross)
Optimization Object Caching An Interface Repository!
Optimization Object Caching Build Our Original Behavior
Optimization Object Caching Get it Working
Optimization Object Caching A cache decorator! magic!
Optimization Object Caching TopicCache::topics( TopicQuery::topics( Topic::all(); ); )
Optimization Object Caching Update Service Provider We “wrap” TopicQuery with
decorator TopicCache.
Optimization Object Caching You’re empowered to do fun things!
Optimization Review: Code Optimization “n+1 problem”: eager loading object caching:
decorators
Optimization PHP-FPM Optimizing PHP-FPM Process Management
Optimization PHP-FPM • Enable more requests per second • Trade-off
between more requests and CPU/RAM usage • Monitor your server, even if just looking at `top` or `htop` commands (preferably under load) Process Management pm.max_children
Optimization PHP-FPM Rule of Thumb (RAM - Overhead) / Memory
per Request (2048mb - 512mb) / 50mb = ~30 max processes (2048mb - 1024mb) / 50mb = ~20 max processes *check CPU usage after making changes!
Optimization PHP-FPM /etc/php/7.[1|2]/fpm/pool.d/www.conf Limits your req/sec directly (but w/ RAM/CPU
trade off) Speeds up “startup time” Keep spares around But not too many Limit potential problems
Optimization PHP-FPM apt-get install htop
Optimization Opcache Opcache enabled
Optimization Opcache • Reduce CPU and file I/O per request
• Small trade off in RAM usage • Really a no-brainer Cache PHP File Bytecode
Optimization Opcache /etc/php/7.[1|2]/fpm/php.ini
Optimization Opcache /etc/php/7.[1|2]/fpm/php.ini
Optimization Opcache • Must reload PHP-FPM after any code change
• (e.g. after any deploy) • (you’re not editing code files in production, right?) Caveat: sudo service php7.2-fpm reload
Optimization Review: Server Optimization PHP-FPM: Process Management Opcache: Free Performance
Boost
Optimization Specialization • Give MySQL it’s own server*** • Give
Redis it’s own server • Give workers their own server • etc Split Out Services:
Optimization MySQL Optimization tools.percona.com/wizard
Optimization MySQL Optimization tools.percona.com/wizard Caches + InnoDB: The interesting stuff
Optimization Review: Optimization PHP-FPM: Process Management Split Servers: Esp MySQL
“n+1 problem”: Eager Loading Object Caching: Decorators
Scaling Out
• Load Balancing (Considerations) • Laravel + Proxies (Trusted Proxy)
• Queues (tricks!) Scaling Out
Scaling Out Load Balancing • Spread traffic across multiple servers
• Remember: This is about consistency, not speed! • Also, caveats!
Scaling Out Caveats • More Servers! • LB + App
Servers • … And everything else… Load Balancing
Scaling Out Caveats Load Balancing • Decentralizing Services • Redis
(session/object cache) • MySQL* • Any other services (search, workers, cron) • Decentralizing Files • Sessions • User uploads: S3, NFS
Scaling Out Load Balancing Example: HAProxy Load Balancing
Scaling Out HAProxy /etc/haproxy/haproxy.cfg
Scaling Out HAProxy /etc/haproxy/haproxy.cfg
Scaling Out Example: Laravel + Proxies (e.g. load balancers) Load
Balancing
Scaling Out Trusted Proxy
Scaling Out Trusted Proxy
Scaling Out Trusted Proxy X-Forwarded-* headers
Scaling Out Laravel app/Http/Middleware/TrustProxies.php Load balancer’s IP address here 172.31.0.238
Scaling Out Laravel 172.31.0.238
Scaling Out Trusted Proxy X-Forwarded-* header values used!
Scaling Out Needed For: • Correct client detection • cookies,
CSRF token Trusted Proxy • Correct URL & form URI generation • url(), action() and similar helpers
Queues
Queues Scaling Out • Don’t make users wait • Remove
artificial timeout and memory constraints • Scale work across many servers Work outside of the HTTP cycle
Scaling Out Queues Even if you’re on one server! .env
Scaling Out Queues Personal Favorite: SQS Driver *CHEAP*
Scaling Out Queues Personal Favorite: SQS Driver **VERY CHEAP**
Scaling Out Queues Trick 1: Priority
Scaling Out Queues Trick 2: Segmentation Separate Queues
Scaling Out Queues Trick 2: Segmentation: Separate Workers
Queues Scaling Out • Put workers on a server sized
for their purpose • Scale workers separately Segmentation
• Optimization vs Scale Out • Optimization • Eager Loading
+ n+1 • Caching • PHP-FPM • Opcache • Specialization • MySQL Optimization • Scale Out • LB Configuration • Headers/Trusted Proxy • Queues What We Covered Scaling Laravel
More! Scaling Laravel • scalinglaravel.com • serversforhackers.com • @fideloper