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

The Node.js Scalability Myth

The Node.js Scalability Myth

Talk given at the Munich Node.js Meetup on 14.06.2012.

Felix Geisendörfer

June 16, 2012
Tweet

More Decks by Felix Geisendörfer

Other Decks in Programming

Transcript

  1. The Node.js
    Scalability
    Myth
    Felix Geisendörfer
    14.06.2012 at Munich node.js user group

    View Slide

  2. View Slide

  3. Felix Geisendörfer

    View Slide

  4. transloadit.com

    View Slide

  5. core contributor

    View Slide

  6. npm modules

    View Slide

  7. node-formidable

    View Slide

  8. node-mysql

    View Slide

  9. ~50 modules total

    View Slide

  10. (@)felixge(.de)

    View Slide

  11. Background

    View Slide

  12. I need to build an
    über-scalable web
    service. It will be
    the next big thing!

    View Slide

  13. Easy! I will use
    node.js and
    MongoDB!

    View Slide

  14. Easy! I will use
    node.js and
    MongoDB!

    View Slide

  15. Because node.js is
    “scalable”, right?

    View Slide

  16. View Slide

  17. This Talk

    View Slide

  18. #1
    Consider Reality

    View Slide

  19. Using node for
    performance
    reasons?

    View Slide

  20. Measuring
    performance in
    production?

    View Slide

  21. 1000
    req / s

    View Slide

  22. 100
    req / s

    View Slide

  23. 10
    req / s
    10
    req / s

    View Slide

  24. ~1 million
    requests per
    day

    View Slide

  25. ~1 million
    units of value

    View Slide

  26. View Slide

  27. #2
    Node Scales
    Vertically

    View Slide

  28. Adding more resources
    to a single node

    View Slide

  29. View Slide

  30. CPU

    View Slide

  31. Google V8

    View Slide

  32. JS -> Assembly

    View Slide

  33. Crankshaft JIT

    View Slide

  34. Fast

    View Slide

  35. Single Threaded*
    * For most parts

    View Slide

  36. Computers of the
    future will have
    hundreds of cores!

    View Slide

  37. Node’s Multi-Core Story

    View Slide

  38. Pre-fork

    View Slide

  39. IPC

    View Slide

  40. Like Ruby, Python,
    PHP, etc.

    View Slide

  41. But ... shared memory?

    View Slide

  42. Your problem requires
    shared memory?

    View Slide

  43. JavaScript
    is not your language

    View Slide

  44. Good Luck

    View Slide

  45. Memory

    View Slide

  46. No hard limit on 64bit
    (since node-0.6 / v8-3.7)

    View Slide

  47. However

    View Slide

  48. Avoid huge heaps

    View Slide

  49. Disk

    View Slide

  50. Done in thread pool

    View Slide

  51. Along with DNS

    View Slide

  52. No sendfile()

    View Slide

  53. View Slide

  54. Network

    View Slide

  55. View Slide

  56. Non-blocking I/O

    View Slide

  57. tl;dr

    View Slide

  58. pre-fork
    &
    non-blocking i/o

    View Slide

  59. #3
    Horizontal
    Scaling is hard

    View Slide

  60. CAP

    View Slide

  61. Network
    Partitions

    View Slide

  62. Consistency

    View Slide

  63. Availability

    View Slide

  64. Some Tips

    View Slide

  65. Shared
    Nothing

    View Slide

  66. Messaging

    View Slide

  67. Monitoring

    View Slide

  68. The Node.js
    Scalability
    Myth

    View Slide

  69. Threads do not scale
    Node.js scales

    View Slide

  70. Threads do not scale
    Node.js scales

    View Slide

  71. Node is a tool

    View Slide

  72. View Slide

  73. View Slide

  74. View Slide

  75. If you can’t duc it
    F#@k it

    View Slide

  76. Questions?
    Slides will be available at felixge.de

    View Slide

  77. Thanks

    View Slide

  78. Tool Demo

    View Slide