Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Scaling Spree
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
Rendered spree/api/products/index.v1.rabl ! in 1760.2ms
Slide 4
Slide 4 text
! cache @product api/app/views/spree/api/products/show.v1.rabl
Slide 5
Slide 5 text
Rendered spree/api/products/index.v1.rabl ! in 79.7ms 22x faster!
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
DO: 2GB Droplet (SFO) Apache Bench (ab) Benchmarker
Slide 8
Slide 8 text
DO: 2GB Droplet (NYC) Spree: master stock nginx + puma Test Server
Slide 9
Slide 9 text
requests=1000, concurrency=50! ! Requests per second: 11.38
Slide 10
Slide 10 text
requests=10000,! concurrency=500! ! Requests per second: N/A! Load average: 26.14!
Slide 11
Slide 11 text
DO: 4GB droplet! ! Requests per second: N/A! Total of 33 requests completed!
Slide 12
Slide 12 text
nginx sez:! ”512 worker_connections not enough"
Slide 13
Slide 13 text
! *Google for "nginx worker_connections"* ! ! events {! worker_connections 19000;! }! ! worker_rlimit_nofile 20000;
Slide 14
Slide 14 text
! requests=1000, concurrency=500! ! Requests per second: 39.84 3.5x faster!!
Slide 15
Slide 15 text
Percentage of the requests served within a certain time (ms)! 50% 6379! …! 75% 10297! …! 100% 25090 (longest request)
Slide 16
Slide 16 text
Percentage of the requests served within a certain time (ms)! 50% 6379! …! 75% 10297! …! 100% 25090 (longest request)
Slide 17
Slide 17 text
1 [|||||||||||||||||||||||||||||||||||||100.0%] 2 [|||||||||||||||||||||||||||||||||||||100.0%]
Slide 18
Slide 18 text
DO: 32GB droplet, 12 cores!
Slide 19
Slide 19 text
39 req/s x 6?! 2 cores => 12 cores! ~10x faster?!
Slide 20
Slide 20 text
! requests=1000, concurrency=500! ! Requests per second: 58.84 [#/sec] (mean) 5.2x faster!!
Slide 21
Slide 21 text
! expires_in 3.minutes api/app/controllers/spree/products_controller.rb
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
! requests=1000, concurrency=500! ! Requests per second: 529.19 [#/sec] (mean) 48x faster!!
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
! requests=1000, concurrency=500! ! Requests per second: ! 1705.49 155x faster!!
Slide 26
Slide 26 text
! requests=10000, concurrency=1000! ! Requests per second: ! 1859 169x faster!!
Slide 27
Slide 27 text
CACHE EXPIRY?! !1
Slide 28
Slide 28 text
No content
Slide 29
Slide 29 text
Purge everything Purge by key Purge by URL
Slide 30
Slide 30 text
Purging by key headers[‘Surrogate-Key’] = “product_id=1” headers[‘Surrogate-Key’] =! “product_id=1 taxon_id=1 taxon_id=2”! !
Slide 31
Slide 31 text
Purging URLs /api/products! ! /products/ruby-on-rails-tote