Introducción práctica a
para
Día 6: Streams, rendimiento
Vuestro anfitrión
Alex Fernández
Ingeniero senior en LogTrust
Co-organizador de Node.js Madrid
Índice día 6
- Introducción a los streams
- Sesión práctica 1: proxy
- Rendimiento
- Sesión práctica 2: pruebas de carga
Introducción a Streams
Streams
La abstracción oficial de Node.js
Orientados a eventos
Lectura y escritura
Duplex y transform
Writable API
Escritura
writable.write(chunk[, callback])
Fin
writable.end(callback)
Acumular
writable.cork()
writable.uncork()
Readable: Dos modos
Flowing
Non-flowing
Pausar y reanudar
Empipar
Readable API (Flowing)
Event: 'data'
stream.on('data', data => ...)
Pausar
stream.pause()
Reanudar
stream.resume()
Readable API (non-Flowing)
Event: 'readable'
stream.on('readable', () => ...)
Lectura
const data = stream.read()
Si data es null, no hay más
Back-Pressure
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())
Documentación oficial
https://nodejs.org/api/stream.html
Sesión Práctica 1: proxy
Crear un proxy que redirija los datos a otro puerto
Recibir conexión y abrir conexión
Medir rendimiento
Especificación Técnica
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
Success!
Bonus Track
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
Rendimiento
Sesión Práctica 2: Pruebas de carga
Lanzar pruebas de carga contra el proxy
Lanzar pruebas de carga contra el servidor http
Lanzar pruebas contra el servidor con carga
Especificación técnica
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/
Good Job!
Bonus Track
Perfilar el servidor con microprofiler
npm install microprofiler
Perfilar el servidor con
node --prof
Revisar con
node --prof-process isolate-....log
Fin del día 6
Introducción práctica a Node.js, día 6
By Alex Fernández
Introducción práctica a Node.js, día 6
Curso de Nodejs para Kairós, día 4: Streams, rendimiento. 2018-04-20.
- 1,931