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 Spree's API
Search
Ryan Bigg
February 27, 2014
Programming
0
190
Scaling Spree's API
Ryan Bigg
February 27, 2014
Tweet
Share
More Decks by Ryan Bigg
See All by Ryan Bigg
Hiring Juniors - RubyConf Indonesia 2019 Closing Keynote
radar
1
440
Web Directions - Code Leaders - Hiring Juniors
radar
0
670
The Future of Rails - Take 2
radar
0
130
The Future of Rails
radar
1
140
Exploding Rails
radar
9
1.9k
Hiring Juniors
radar
2
460
The Perfect Coding Test
radar
0
130
Your First Developer Job
radar
1
110
Hiring Juniors
radar
2
280
Other Decks in Programming
See All in Programming
オブザーバビリティ駆動開発って実際どうなの?
yohfee
3
650
CSC307 Lecture 12
javiergs
PRO
0
450
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
130
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
12
7.1k
CopilotKit + AG-UIを学ぶ
nearme_tech
PRO
1
120
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
1.3k
PJのドキュメントを全部Git管理にしたら、一番喜んだのはAIだった
nanaism
0
230
Go1.26 go fixをプロダクトに適用して困ったこと
kurakura0916
0
320
Raku Raku Notion 20260128
hareyakayuruyaka
0
430
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
CSC307 Lecture 11
javiergs
PRO
0
580
並行開発のためのコードレビュー
miyukiw
2
2.1k
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.4k
Fireside Chat
paigeccino
41
3.8k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Evolving SEO for Evolving Search Engines
ryanjones
0
140
Abbi's Birthday
coloredviolet
2
5k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
290
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
220
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Test your architecture with Archunit
thirion
1
2.2k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4k
Claude Code のすすめ
schroneko
67
220k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
Scaling Spree
None
Rendered spree/api/products/index.v1.rabl ! in 1760.2ms
! cache @product api/app/views/spree/api/products/show.v1.rabl
Rendered spree/api/products/index.v1.rabl ! in 79.7ms 22x faster!
None
DO: 2GB Droplet (SFO) Apache Bench (ab) Benchmarker
DO: 2GB Droplet (NYC) Spree: master stock nginx + puma
Test Server
requests=1000, concurrency=50! ! Requests per second: 11.38
requests=10000,! concurrency=500! ! Requests per second: N/A! Load average: 26.14!
DO: 4GB droplet! ! Requests per second: N/A! Total of
33 requests completed!
nginx sez:! ”512 worker_connections not enough"
! *Google for "nginx worker_connections"* ! ! events {! worker_connections
19000;! }! ! worker_rlimit_nofile 20000;
! requests=1000, concurrency=500! ! Requests per second: 39.84 3.5x faster!!
Percentage of the requests served within a certain time (ms)!
50% 6379! …! 75% 10297! …! 100% 25090 (longest request)
Percentage of the requests served within a certain time (ms)!
50% 6379! …! 75% 10297! …! 100% 25090 (longest request)
1 [|||||||||||||||||||||||||||||||||||||100.0%] 2 [|||||||||||||||||||||||||||||||||||||100.0%]
DO: 32GB droplet, 12 cores!
39 req/s x 6?! 2 cores => 12 cores! ~10x
faster?!
! requests=1000, concurrency=500! ! Requests per second: 58.84 [#/sec] (mean)
5.2x faster!!
! expires_in 3.minutes api/app/controllers/spree/products_controller.rb
None
! requests=1000, concurrency=500! ! Requests per second: 529.19 [#/sec] (mean)
48x faster!!
None
! requests=1000, concurrency=500! ! Requests per second: ! 1705.49 155x
faster!!
! requests=10000, concurrency=1000! ! Requests per second: ! 1859 169x
faster!!
CACHE EXPIRY?! !1
None
Purge everything Purge by key Purge by URL
Purging by key headers[‘Surrogate-Key’] = “product_id=1” headers[‘Surrogate-Key’] =! “product_id=1 taxon_id=1
taxon_id=2”! !
Purging URLs /api/products! ! /products/ruby-on-rails-tote