A million connections and beyond - Node.js at scale

42.388 visualizaciones

Publicado el

Publicado en: Tecnología

A million connections and beyond - Node.js at scale

  1. 1. A million connections... AND BEYOND!!! Node.js at Scale
  2. 2. One millionconnections!!!
  3. 3. A million isntvery much these days...
  4. 4. One hundred billionconnections!!!
  5. 5. What this talk is really about Picking meaningful benchmarks Current state of Node.js benchmarks Understanding why benchmarks arent _that_ important How to pick the right language/framework/lib
  6. 6. What can we measure?Computation Disk I/ONet work I/O Throughput TCP Libraries UDP URL Parsing HTTP etc
  7. 7. How do we measure? Load averages Memory usage Average time - Average perf. of each operation Latency - Actual performance of each operation
  8. 8. ComparisonErlang vs. Node.js vs. Tornado3 Erlang libsStock Node.jsStock TornadoSingle core
  9. 9. Desired vs. Real Responses
  10. 10. Response times
  11. 11. I pity the fool who uses Node
  12. 12. Questioning benchmarks What do average times mean? Responses on a curve Who uses in memory servers?
  13. 13. Finding Nodes strength connections: 933990 errors: 0 Read from remote host gqzdj9ab.joyent.us: Operation timed out Connection to gqzdj9ab.joyent.us closed. Enki:~ $
  14. 14. var net = require(net)var conns = 0function connectToServer(ip) { conn = net.createConnection(8000, ip) conn.on(connect, function() { conns += 1 }) conn.on(end, function() { conns -= 1 })}for(i=0;i<61000;i++) { connectToServer(72.2.120.106)}
  15. 15. var net = require(net)var s = net.createServer()var c = 0;var e = 0;s.on(connection, function(socket) { c += 1 socket.on(end, function() { c -= 1 }) socket.on(error, function(e) { e += 1 })})s.listen(8000)setInterval(function() { console.log(connections: + c) console.log(errors: + e)}, 5000)
  16. 16. Finding Nodes strength PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 22593 root 758M 642M cpu11 25 0 0:17:54 6.2% node/1 22542 croucher 4308K 3084K cpu2 59 0 0:00:08 0.2% prstat/1 ... ... ZONEID NPROC SWAP RSS MEMORY TIME CPU ZONE 27 31 1489M 782M 38% 1:59:54 6.3% gqzdj9ab
  17. 17. Where to use atomic measurements Measuring performance improvements over time Figuring out the hot-path Profiling against your specific use case
  18. 18. 8x Perfimprovement
  19. 19. I am a super stuff effective measurement Because I put stuff on one axis and things on another and now Im like thingsproper science and you should totally use me to base all your judgements about everything on… no seriously...
  20. 20. Why benchmarks arentas important as we think There is a tradeoff bet ween performance and productivity If this werent true wed all still be writing in ASM
  21. 21. Fit for purposeSandboxed language Event Driven PHP, Python Node.js Java, C# Event Machine (Ruby) Ruby, etc Tornado (Python) Message Passing Erlang
  22. 22. Class of languages for the Internet New languages/platforms like Node.js designed for Internet applications New class of languages are efficient enough, but are they easy enough? Node.js designed from scratch for net work server programming
  23. 23. Reasons to use Node Its really fast. Very much fast enough. Its easy to use for Internet/Web applications. Its JavaScript. It has an extremely active community. It has a lot of project velocity.
  24. 24. What we need from benchmarksBenchmarks to test real world use cases Servers that do more than just hello worldBenchmarks to compare real test cases from manyplatformsBenchmarks that reflect mobile clientsNode CI on many platforms
  25. 25. Questions?Im on Twitter http:/ witter.com/sh1mmer /t Thats a "one" in my nickCheck out the book on http://ofps.oreilly.com Its free to read and comment. New release this week

×