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.9k
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
51
Refactoring Terraform - CloudCasts - Scaling EC2
fideloper
0
78
Linux Environment
fideloper
1
11k
Server Survival
fideloper
29
23k
FileBeat (Won't save you from the JVM)
fideloper
1
330
Powering Your Applications With Nginx
fideloper
9
7.7k
Hexagonal Architecture
fideloper
49
200k
Intro to etcd
fideloper
3
580
Service Oriented Architecture with a little help from NodeJS
fideloper
4
2.3k
Other Decks in Technology
See All in Technology
そもそも AWS FIS について。なぜ今 FIS のハンズオンなのか?などなど
kazzpapa3
2
110
なぜAI時代に 「イベント」を中心に考えるのか? / Why focus on "events" in the age of AI?
ytake
0
140
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
830
Amazon SNSサブスクリプションの誤解除を防ぐ
y_sakata
3
200
claude codeでPrompt Engineering
iori0311
0
300
「現場で活躍するAIエージェント」を実現するチームと開発プロセス
tkikuchi1002
6
950
Bliki (ja), and the Cathedral, and the Bazaar
koic
6
990
(HackFes)米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
5
640
20150719_Amazon Nova Canvas Virtual try-onアプリ 作成裏話
riz3f7
0
130
AIコードアシスタントとiOS開発
jollyjoester
1
220
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
13k
データエンジニアリング 4年前と変わったこと、 4年前と変わらないこと
tanakarian
2
330
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
51
8.6k
Six Lessons from altMBA
skipperchong
28
3.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Music & Morning Musume
bryan
46
6.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
BBQ
matthewcrist
89
9.7k
Fireside Chat
paigeccino
37
3.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
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