$30 off During Our Annual Pro Sale. View Details »

Your API is too slow!

Your API is too slow!

RedDotRubyConf 2016

Grzegorz Witek

June 23, 2016
Tweet

More Decks by Grzegorz Witek

Other Decks in Programming

Transcript

  1. @arnvald, RedDotRubyConf 2016
    YOUR API IS TOO SLOW!

    View Slide

  2. View Slide

  3. @arnvald, RedDotRubyConf 2016
    YOUR API IS TOO SLOW!

    View Slide

  4. @arnvald, RedDotRubyConf 2016
    YOUR API IS TOO SLOW!
    2TQDCDN[
    HCUVGPQWIJ

    View Slide

  5. Grzegorz Witek

    View Slide

  6. is speed a feature?

    View Slide

  7. is lack of speed a bug?

    View Slide

  8. Algolia
    Github

    View Slide

  9. Web application optimization
    loading priority
    static content
    dynamic content
    domain sharing
    JavaScript
    compression
    asset minifying CSS
    HTML
    un-CSS
    prefetching
    HTTP/2 image sprites
    CDN
    database optimization
    multi-threading

    View Slide

  10. Web API optimization
    loading priority
    static content
    dynamic content
    domain sharing
    JavaScript
    compression
    asset minifying CSS
    HTML
    un-CSS
    prefetching
    HTTP/2 image sprites
    CDN
    database optimization
    multi-threading

    View Slide

  11. Long way of a request
    ! " #

    View Slide

  12. Latency
    ! " #

    View Slide

  13. Where are your users?
    "

    View Slide

  14. Where are your users?
    "
    Singapore Jakarta
    13ms

    View Slide

  15. Where are your users?
    "
    Singapore Hanoi
    100ms

    View Slide

  16. Where are your users?
    "
    Singapore New York
    265ms

    View Slide

  17. Where are your users?
    "
    Singapore Shanghai
    320ms

    View Slide

  18. Dynamic content acceleration
    ! CDN
    #

    View Slide

  19. Latency

    View Slide

  20. Latency
     

    View Slide

  21. Long way of a request
    ! " #

    View Slide

  22. Processing
    #

    View Slide

  23. Don’t be a smart-ass
    “Oh, I know, we have to cache it!”

    View Slide

  24. Measure
    gem 'ruby-prof'

    gem 'rack-mini-profiler'

    View Slide

  25. Measure
    in production mode

    pre-production stage

    View Slide

  26. Measure
    gem 'newrelic'

    gem 'skylight'

    View Slide

  27. Measure
    profile - focus on the slowest part

    View Slide

  28. Measure
    benchmark - compare alternative solutions

    View Slide

  29. Improve

    View Slide

  30. Improve
    Rely on your database

    View Slide

  31. Improve
    Where is your cache?

    View Slide

  32. Improve
    Redis on a separate machine - fast

    Redis on the same machine - faster

    Application memory - the fastest

    View Slide

  33. Improve
    Multi-layered cache (Russian doll caching)

    View Slide

  34. Improve
    When needed - mutate

    View Slide

  35. Improve
    Upgrade your libraries

    View Slide

  36. Improve
    When needed - replace your libraries

    View Slide

  37. Improve
    gem 'json'


    gem 'oj'
    gem 'oj-mimic-json'

    View Slide

  38. Improve
    Native extensions - not only C!

    View Slide

  39. Improve
    https://github.com/rustbridge/helix

    https://github.com/d-unseductable/ruru

    View Slide

  40. Improve
    Move processing to the background

    View Slide

  41. Improve
    When desperate - extract part of the application

    View Slide

  42. Improve
    I said "when desperate" not "ASAP NOW!!!11"

    View Slide

  43. Improve
    I said "part", not "rewrite everything in Go"

    View Slide

  44. Improve
    There's more, way more

    View Slide

  45. Long way of a request
    ! " #

    View Slide

  46. Download
    ! " #

    View Slide

  47. Improve
    Not only GZIP

    View Slide

  48. Long way of a request
    ! " #

    View Slide

  49. Speed up your API
    use CDN infrastructure

    profile and benchmark

    focus on the slowest part

    rewriting is the last thing to consider

    View Slide

  50. Speed up your API
    Ruby is fast enough

    Sinatra is fast enough

    Rails is fast enough

    View Slide

  51. @arnvald, RedDotRubyConf 2016
    YOUR API IS TOO SLOW!
    2TQDCDN[
    HCUVGPQWIJ

    View Slide