4. Sí: JavaScript
Lenguaje Universal:
ECMAScript Navegadores y móviles
Google V8 Se ejecuta rápido
NodeJS JS en el servidor
La comunidad JS es ¡enorme!
6. Microservicios (1/3)
Estilo arquitectural para desarrollo de Software
Aplicaciones complejas compuestas por
pequeños servicios, independientes y
autónomos que se comunican usando APIs
agnósticas de lenguaje.
Altamente desacoplados, enfocados en tareas
pequeñas. ¿Cómo de pequeño?
Dueño (onwership) claro y conocido.
http://martinfowler.com/articles/microservices.html
7. Microservicios (2/3)
Ventajas
Componibles
Evolución rápida
Stack adecuado al trabajo
Aislamiento ante fallos
Despliegues rápidos
Mejor disponibilidad
Contras
Latencia (en composición)
Correlación de eventos (trazas)
Heterogeneidad
Volumen en despliegue requiere automatización
http://es.slideshare.net/stonse/pros-and-cons-of-a-microservices-architecture-talk-at-aws-reinvent
12. Express JS
http://expressjs.com
var express = require('express');
var app = express();
app.get('/hello', function(req, res) {
res.status(200).send('hello world');
});
/helloreq res
13. Express Middleware
CORS
AuthN PassportJS
AuthZ
Etc.
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
res.header("Access-Control-Allow-Methods", "OPTIONS,GET,POST,PUT,DELETE");
next();
});
*req
res
next()
14. Mongoose
ORM para MongoDB http://mongoosejs.com
Validación
Hooks pre/post acceso
var Vegetable = new mongoose.Schema({ name: String });
var VegModel = mongoose.model('vegetable', Vegetable);
15. Baucis
https://www.npmjs.com/package/baucis
Recursos HATEOAS/Level 3
REST APIs sobre MongoDB NodeJS ExpressJS
var Vegetable = new mongoose.Schema({ name: String });
mongoose.model('vegetable', Vegetable);
baucis.rest('vegetable');
var app = express();
app.use('/api', baucis());
app.listen(8012);
16. Swagger
OpenAPI Initiative https://openapis.org
Descripción de Servicios / APIs
Documenta el API
Facilita su uso por desarrolladores
Herramientas
Contract first
Documentar APIs existents
Generación de Proxies, Skeletons, SDKs nativos
Integración con Herramientas de API Management
18. IU Administrativa
Portal con Bootstrap y AngularJS 1.4
Permite administrar el Backend y la
seguridad
Opcional
Reemplazable por otra capa de vista
21. Escalabilidad
Clusters de MongoDB
Sesión persistida en MongoDB
connect-mongo
PaaS (como Heroku)
Balanceador de carga (nginx, haproxy)
22. Carga
Sistema en producción
Backends para aplicaciones móviles Android e iOS + portal web
80.000 peticiones diarias en ventana de 4 horas
Promedio = 333 ppm, aprox 6 pps 100-200ms
Picos de 1000 ppm, aprox 17 pps
En 2 instancias 1x 1Gb RAM en Heroku
por 100 $/mes + 18 $/mes de mLab
27. Configuración
Configuración como código (hard-coded json)
Configuración en la base de datos
Configuración por variables de entorno process.env.VAR1
Configuración en Consul (centralizada)
28. Despliegue en Heroku
git remote add heroku https://git.heroku.com/app1.git
Si conoces git, sabes desplegar en Heroku
Configurar:
/Procfile
Desplegar:
git push heroku master
web: node app/server.js
35. Características destacables (1/2)
Escalable horizontalmente
Gestión de usuario y roles
Seguridad RBAC
Soporte a OAuth2
Login sindicable con Google, Facebook, Github
Localización
36. Características destacables (2/2)
Soporte a binarios (en MongoDB o en S3)
Soporte a reescalado de imágenes en servidor
Importación/Exportación a XLST y CSV
Webhooks
Extensible vía Módulos
Mínimas dependencias: Desplegable en diversos
proveedores de nube
37. Microservicios en MEAN: Contras
JavaScript
WAT Programming
Missing Strongly-typing a lot TypeScript
Unit Test no son un capricho mocha, chai, Jasmine, karma, istanbul, etc
Versionado en NPM
Falta de un SDK base estable (a la Java o .NET)
Demasiadas baldosas en movimiento #npmgate
Cambios que rompen compatibilidad que no respetan Semantic Versioning
Front-end JS es una non-stop fiesta cada 6 meses
38. Microservicios en MEAN: Pros
Stack muy portable
Corre en Windows, Linux, Mac sin cambios
La mayoría de los proveedores de nube lo soportan activamente
Prototipado rápido
Escalado horizontal muy sencillo
ExpressJS es muy extensible
Ligero: provisiona muy rápido comparado con Java o .NET clásico
39. Frontend: Hagan sus apuestas…
Pedirán datos desde un browser y
esperando por la promesa que se
los demos.
Microservicios.
Backend: Apuesta segura
Pero guarden la ropa antes de nadar…