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