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
170
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
400
Web Directions - Code Leaders - Hiring Juniors
radar
0
570
The Future of Rails - Take 2
radar
0
98
The Future of Rails
radar
1
110
Exploding Rails
radar
9
1.8k
Hiring Juniors
radar
2
430
The Perfect Coding Test
radar
0
110
Your First Developer Job
radar
1
110
Hiring Juniors
radar
2
270
Other Decks in Programming
See All in Programming
Dissecting and Reconstructing Ruby Syntactic Structures
ydah
3
2k
Making TCPSocket.new "Happy"!
coe401_
1
3.1k
Road to RubyKaigi: Making Tinny Chiptunes with Ruby
makicamel
4
540
Jakarta EE Meets AI
ivargrimstad
0
810
SwiftDataのカスタムデータストアを試してみた
1mash0
0
140
Носок на сок
bo0om
0
1.1k
REALITY コマンド作成チュートリアル
nishiuriraku
0
120
プロダクトエンジニアのしごと 〜 受託 × 高難度を乗り越えるOptium開発 〜
algoartis
0
170
2ヶ月で生産性2倍、お買い物アプリ「カウシェ」4チーム同時改善の取り組み
ike002jp
1
110
Amazon CloudWatchの地味だけど強力な機能紹介!
itotsum
0
240
Orleans + Sekiban + SignalR でリアルタイムWeb作ってみた
tomohisa
0
230
The New Developer Workflow: How AI Transforms Ideas into Code
danielsogl
0
110
Featured
See All Featured
Music & Morning Musume
bryan
47
6.5k
How to train your dragon (web standard)
notwaldorf
91
6k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.5k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
780
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Embracing the Ebb and Flow
colly
85
4.7k
Code Reviewing Like a Champion
maltzj
523
40k
Being A Developer After 40
akosma
91
590k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Designing for Performance
lara
608
69k
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