Alex Fernández
Ingeniero senior en LogTrust
Co-organizador de Node.js Madrid
La abstracción oficial de Node.js
Orientados a eventos
Lectura y escritura
Duplex y transform
Escritura
writable.write(chunk[, callback])
Fin
writable.end(callback)
Acumular
writable.cork()
writable.uncork()
Flowing
Non-flowing
Pausar y reanudar
Empipar
Event: 'data'
stream.on('data', data => ...)
Pausar
stream.pause()
Reanudar
stream.resume()
Event: 'readable'
stream.on('readable', () => ...)
Lectura
const data = stream.read()
Si data es null, no hay más
Permite regular el flujo de datos
Evita la acumulación en buffers
Implementada con:
readable.on('data', data => {
if (!writable.write(data)) readable.pause()
})
writable.on('drain', () => readable.resume())
Crear un proxy que redirija los datos a otro puerto
Recibir conexión y abrir conexión
Medir rendimiento
Escuchar por puerto 9408
Redirigir al puerto 4301
Crear un servidor HTTP en el puerto 4301
Que responda a todas las peticiones con la ruta
Crear un cliente que envíe peticiones HTTP
Medir MB enviados, recibidos y redirigidos
Implementar back-pressure
Crear un número de clientes, de 0 a 100
Comprobar cómo cambia el rendimiento
Variar los datos enviados/recibidos por petición
Lanzar pruebas de carga contra el proxy
Lanzar pruebas de carga contra el servidor http
Lanzar pruebas contra el servidor con carga
Pruebas contra puertos 9408 y 4301
Acceder a ambos con loadtest
npm install -g loadtest
Ajustar peticiones por segundo (--rps)
loadtest --rps 1000 http://localhost:9408/
Perfilar el servidor con microprofiler
npm install microprofiler
Perfilar el servidor con
node --prof
Revisar con
node --prof-process isolate-....log