Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Necessary Performance Measures: npm at Scale

Necessary Performance Measures: npm at Scale

Talk on caching and distribution at MelbJS meetup in Melbourne, Australia

Raquel Vélez

April 30, 2014
Tweet

More Decks by Raquel Vélez

Other Decks in Technology

Transcript

  1. Necessary Performance
    Measures: at Scale
    Brought to you by @rockbot

    View Slide

  2. Package Management for
    Node.js
    • The Open Source Dream

    !
    • ~70k packages

    • up to 10 million downloads/
    day

    View Slide

  3. 221,845,731)
    !10,000!!
    !20,000!!
    !30,000!!
    !40,000!!
    !50,000!!
    !60,000!!
    !70,000!!
    !80,000!!
    !90,000!!
    !-!!!!
    !10,000,000!!
    !20,000,000!!
    !30,000,000!!
    !40,000,000!!
    !50,000,000!!
    !60,000,000!!
    !70,000,000!!
    !80,000,000!!
    !90,000,000!!
    !100,000,000!!
    !110,000,000!!
    !120,000,000!!
    !130,000,000!!
    !140,000,000!!
    !150,000,000!!
    !160,000,000!!
    !170,000,000!!
    !180,000,000!!
    !190,000,000!!
    !200,000,000!!
    !210,000,000!!
    !220,000,000!!
    !230,000,000!!
    !240,000,000!!
    8/29/12! 12/7/12! 3/17/13! 6/25/13! 10/3/13! 1/11/14! 4/21/14!
    Downloads)of)npm)packages)in)previous)month))
    &)Total)number)of)npm)Packages)of)node.js)code)
    !!!Downloads!of!npm!packages!in!previous!month!
    !!!Total!Number!of!npm!Packages!

    View Slide

  4. Performance = Perception
    • Best request vs worst request

    • Focus on the few, super-slow instances: improve
    performance like whoa

    !
    • Caching vs Distribution

    View Slide

  5. Caching

    View Slide

  6. Data Layer
    Query Caching
    Database-level
    performance
    enhancements
    !
    innoDB buffer pool,
    CouchDB’s ACID
    architecture

    View Slide

  7. Query Layer
    Save CPU
    Preprocessed/aggregated
    data; scheduled handling
    of data
    !
    CouchDB views,
    Download Counts

    View Slide

  8. App Layer
    Per-User
    Data that doesn’t change
    per user
    !
    Storing user session data
    in Redis

    View Slide

  9. Edge Server
    Layer
    Centralized/Global
    CDN, static assets
    !
    Fastly

    View Slide

  10. Client Layer
    Distributed
    HTTP headers, local
    storage, etc.
    !
    Browser caching

    View Slide

  11. Distribution

    View Slide

  12. Split Load
    More boxes,
    more specialized boxes
    read-only, write-only
    !
    One process per box
    Redis, CouchDB,
    ElasticSearch

    View Slide

  13. Add
    Resiliency
    Multi-cloud, multi-zone
    East/West,
    multiple datacenters
    !
    Fallback to least effort/
    most common usage
    i.e. read-only

    View Slide

  14. Boost with
    Third-Party
    Services
    Global content
    distribution network
    CDN

    View Slide

  15. The End?

    View Slide

  16. Thank You!
    !
    Raquel Vélez
    @rockbot
    [email protected] js.com

    View Slide