SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Microservicios
sobre MEAN Stack
Dr. Pedro J. Molina
Desarrollador Independiente
@pmolinam
¿Qué hago?
 Domain Specific Languages
 Generación de código
 Microservicios
 JavaScript, TypeScript, C#
 Backends
 Despliegues en nube
 Arquitectura de Software
 Consultoría
 CTO
 DSLs
 App Builders
 Project Manager
 Arquitectura de Software
 DSLs
 DSLs
 Generación de código
Desarrollador Independiente
Colaboro con Lemoncode Formación
Anteriormente:
¿JavaScript?
 WAT Programming http://bit.ly/watProg
>[] + []
//empty string
>[] + {}
[object Object]
>{} + {}
NaN
>{} + []
0
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!
Stack MEAN Dev
Local
:27001
Local
:5000
-
Navegador
Nube
db
:27001
app
:80
-
Navegador
Producción
cluster
:27001
app :80
-
Navegador
lb: 443
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
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
Microservicios (3/3)
 Microservicios = SOA para Hipsters
 Abanderados
 Netflix
 Amazon
 Building Microservices
2015, Sam Newman
Demo. Ejemplo
Sitio en Producción:
http://bit.ly/madjs
demo / 1234 (sed buenos)
Repositorio de fuentes:
http://bit.ly/madjs2
Demo. Apps móviles usando los microservicios
Stack y Arquitectura
Client ExpressJS BaucisJS Mongoose MongoDB
HTTP req
resource
query/command
data
401 | 403
AuthN/AuthZ
middleware
<req.user, res>
Microservice
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
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()
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);
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);
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
HAL
Estándar de Hipermedia en
Recursos
HATEOAS
{
“id”: 1234
“name”: “Alicia”
“_links”: {
“self”: { “href”: “/article/10”},
“prev”: { “href”: “/article/9”},
“next”: { “href”: “/article/11”},
“action-delete”: {
“verb”: “DELETE”,
“href”: “/article/10”
}
}
}
http://stateless.co/hal_specification.html
IU Administrativa
 Portal con Bootstrap y AngularJS 1.4
 Permite administrar el Backend y la
seguridad
 Opcional
 Reemplazable por otra capa de vista
Tareas grunt
 clean
 eslint
 copy
 uglify
 mochaTest
 coverage
Herramientas
 npm
 bower (~)
 grunt
 eslint
 mocha / jasmine / karma
 istanbul
Escalabilidad
 Clusters de MongoDB
 Sesión persistida en MongoDB
 connect-mongo
 PaaS (como Heroku)
 Balanceador de carga (nginx, haproxy)
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
Registro y descubrimiento
Consul
Monitorización
newRelic
Monitorización
Prometheus
Logs
papertrail
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)
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
Despliegue en IBM Bluemix
 IBM Bluemix usa CloudFoundry
/manifest.yml
cf login
cf create-service mongodb 100 mydb-sancho
cf push myapp-quijote -m 1024M -b sdk-for-nodejs -t 180 -i 1
cf bind-service mydb-sancho myapp-quijote
cf scale myapp-quijote -i 1
---
applications:
- name: myapp-quijote
command: node app/server.js
Despliegue con Docker (1/2)
 Dockerfile
FROM node:latest
ENV NODE_ENV=production
WORKDIR /app
RUN npm install -g grunt-cli
ADD package.json /app/
RUN npm install
ADD . /app
RUN grunt release
ENV PORT=80
EXPOSE 80
ENTRYPOINT ["node", "/app/app/server.js"]
Despliegue con Docker (2/2)
 Build
 Run
docker build –t user/appName .
docker run --name db -d -P mongo:3.0
docker run user/appName –d –P --link db:db
dbapp
Despliegue con Docker Compose
db:
image: dockerfile/mongodb
ports:
- "27017"
app:
build: .
environment:
NODE_ENV: production
PORT: 80
SERVICE_NAME: app
links:
- "db:DB"
ports:
- "80"
lb:
image: jasonwyatt/nginx-loadbalancer
links:
- app
environment:
APP_PATH: "/"
ports:
- "80:80"
docker-compose.yml
Despliegue con Docker Compose
docker-compose up –d
docker-compose scale app=3
 ¡¡Arriba, arriba!!
db
app
lb app
app
#0
#1
#2
80
80 27017
Hivepod.io
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
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
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
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
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…
Referencias
 Código de ejemplo https://github.com/pjmolina/event-backend
 Swagger  OpenAPI https://openapis.org
 BaucisJS https://github.com/wprl/baucis
 Hivepod https://www.hivepod.io
 Buildup http://www.buildup.io
 WAT Programming http://bit.ly/watProg
Contacto
¿Te gusto lo que viste o todo lo contrario?
En cualquier caso, ¡retroaliméntame!
Pedro J. Molina
pjmolina@gmail.com
@pmolinam

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Why Microservice
Why Microservice Why Microservice
Why Microservice
 
Practical DevSecOps - Arief Karfianto
Practical DevSecOps - Arief KarfiantoPractical DevSecOps - Arief Karfianto
Practical DevSecOps - Arief Karfianto
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 
Introducción a microservicios
Introducción a microserviciosIntroducción a microservicios
Introducción a microservicios
 
DevOps Transformation in Technical
DevOps Transformation in TechnicalDevOps Transformation in Technical
DevOps Transformation in Technical
 
DevOps concepts, tools, and technologies v1.0
DevOps concepts, tools, and technologies v1.0DevOps concepts, tools, and technologies v1.0
DevOps concepts, tools, and technologies v1.0
 
DevOps 101
DevOps 101DevOps 101
DevOps 101
 
SCS DevSecOps Seminar - State of DevSecOps
SCS DevSecOps Seminar - State of DevSecOpsSCS DevSecOps Seminar - State of DevSecOps
SCS DevSecOps Seminar - State of DevSecOps
 
From Monolithic to Microservices
From Monolithic to Microservices From Monolithic to Microservices
From Monolithic to Microservices
 
Keep CALMS and DevSecOps
Keep CALMS and DevSecOps Keep CALMS and DevSecOps
Keep CALMS and DevSecOps
 
What are Microservices | Microservices Architecture Training | Microservices ...
What are Microservices | Microservices Architecture Training | Microservices ...What are Microservices | Microservices Architecture Training | Microservices ...
What are Microservices | Microservices Architecture Training | Microservices ...
 
Roles and Responsibilities of a DevOps Engineer
Roles and Responsibilities of a DevOps EngineerRoles and Responsibilities of a DevOps Engineer
Roles and Responsibilities of a DevOps Engineer
 
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
Microservices Tutorial for Beginners | Microservices Architecture | Microserv...
 
DevSecOps
DevSecOpsDevSecOps
DevSecOps
 
Introduction to DevOps slides.pdf
Introduction to DevOps slides.pdfIntroduction to DevOps slides.pdf
Introduction to DevOps slides.pdf
 
Practical DevSecOps Course - Part 1
Practical DevSecOps Course - Part 1Practical DevSecOps Course - Part 1
Practical DevSecOps Course - Part 1
 
The State of DevSecOps
The State of DevSecOpsThe State of DevSecOps
The State of DevSecOps
 
DevOps, Common use cases, Architectures, Best Practices
DevOps, Common use cases, Architectures, Best PracticesDevOps, Common use cases, Architectures, Best Practices
DevOps, Common use cases, Architectures, Best Practices
 
CI/CD Pipeline Security: Advanced Continuous Delivery Recommendations
CI/CD Pipeline Security: Advanced Continuous Delivery RecommendationsCI/CD Pipeline Security: Advanced Continuous Delivery Recommendations
CI/CD Pipeline Security: Advanced Continuous Delivery Recommendations
 
Introduction to DevSecOps
Introduction to DevSecOpsIntroduction to DevSecOps
Introduction to DevSecOps
 

Destacado

Modelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at IcineticModelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at Icinetic
Pedro J. Molina
 

Destacado (20)

Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Modelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at IcineticModelling and code generation in .NET at Icinetic
Modelling and code generation in .NET at Icinetic
 
Hivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenDataHivepod: Casos de uso en OpenData
Hivepod: Casos de uso en OpenData
 
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond
Modeling and Code Generation in the Cloud for Citizen Developers and BeyondModeling and Code Generation in the Cloud for Citizen Developers and Beyond
Modeling and Code Generation in the Cloud for Citizen Developers and Beyond
 
Multichannel User Interfaces
Multichannel User InterfacesMultichannel User Interfaces
Multichannel User Interfaces
 
CG2010 Tailored Code Generators
CG2010 Tailored Code GeneratorsCG2010 Tailored Code Generators
CG2010 Tailored Code Generators
 
Introducción a StackOverflow
Introducción a StackOverflowIntroducción a StackOverflow
Introducción a StackOverflow
 
TDD+CI con Teamcity
TDD+CI con TeamcityTDD+CI con Teamcity
TDD+CI con Teamcity
 
Scaling MDD for production: enabling SoC at model time
Scaling MDD for production: enabling SoC at model timeScaling MDD for production: enabling SoC at model time
Scaling MDD for production: enabling SoC at model time
 
MDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generationMDD: Models, frameworks, & code generation
MDD: Models, frameworks, & code generation
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
SVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para MicroserviciosSVQDC 2017 Tecnologías para Microservicios
SVQDC 2017 Tecnologías para Microservicios
 
Modeling on the Web
Modeling on the WebModeling on the Web
Modeling on the Web
 
Modelling the User Interface
Modelling the User InterfaceModelling the User Interface
Modelling the User Interface
 
Code Generation for Conceptual User Interface Patterns
Code Generation for Conceptual User Interface PatternsCode Generation for Conceptual User Interface Patterns
Code Generation for Conceptual User Interface Patterns
 
The PISA Project: a MDD case study
The PISA Project: a MDD case studyThe PISA Project: a MDD case study
The PISA Project: a MDD case study
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
CG2010 Introducing MDSD
CG2010 Introducing MDSDCG2010 Introducing MDSD
CG2010 Introducing MDSD
 
Introducing MDSD
Introducing MDSDIntroducing MDSD
Introducing MDSD
 

Similar a Microservicios sobre MEAN Stack

Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
Dani Latorre
 
Seguridad Entornos Web Open Source
Seguridad Entornos Web Open SourceSeguridad Entornos Web Open Source
Seguridad Entornos Web Open Source
Victor M. Fernández
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
Manuel Carrasco Moñino
 
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
RootedCON
 

Similar a Microservicios sobre MEAN Stack (20)

Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Micro vs Nano (servicios)
Micro vs Nano (servicios)Micro vs Nano (servicios)
Micro vs Nano (servicios)
 
Arquitectura
Arquitectura Arquitectura
Arquitectura
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Despliegue de Aplicaciones .Net Core en Docker
Despliegue de Aplicaciones .Net Core en DockerDespliegue de Aplicaciones .Net Core en Docker
Despliegue de Aplicaciones .Net Core en Docker
 
Modulo13 Web Services
Modulo13 Web ServicesModulo13 Web Services
Modulo13 Web Services
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Presentacion node
Presentacion nodePresentacion node
Presentacion node
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
Presentacion remobjects
Presentacion remobjectsPresentacion remobjects
Presentacion remobjects
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Web Performance para Magento
Web Performance para MagentoWeb Performance para Magento
Web Performance para Magento
 
Seguridad Entornos Web Open Source
Seguridad Entornos Web Open SourceSeguridad Entornos Web Open Source
Seguridad Entornos Web Open Source
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
MEAN ¿otro buzzword?
MEAN ¿otro buzzword?MEAN ¿otro buzzword?
MEAN ¿otro buzzword?
 
Why Azure is so MEAN?
Why Azure is so MEAN?Why Azure is so MEAN?
Why Azure is so MEAN?
 
Microservicios con .NET
Microservicios con .NETMicroservicios con .NET
Microservicios con .NET
 
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
Jesús Olmos - ChromeHack, a html5/chrome webhack tool [Rooted CON 2013]
 
Sercicios web
Sercicios webSercicios web
Sercicios web
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 

Más de Pedro J. Molina

Más de Pedro J. Molina (16)

MDE en la industria
MDE en la industriaMDE en la industria
MDE en la industria
 
Terraform
TerraformTerraform
Terraform
 
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones WebdotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
dotnetMalaga-2020 Gestión de la configuración en aplicaciones Web
 
Infrastructure as Code with Terraform
Infrastructure as Code with TerraformInfrastructure as Code with Terraform
Infrastructure as Code with Terraform
 
LangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with EssentialLangDev 2022 Metamodeling on the Web with Essential
LangDev 2022 Metamodeling on the Web with Essential
 
Are Startups for me?
Are Startups for me?Are Startups for me?
Are Startups for me?
 
Meow Demo
Meow DemoMeow Demo
Meow Demo
 
Essential as the base for Web DSLs
Essential as the base for Web DSLsEssential as the base for Web DSLs
Essential as the base for Web DSLs
 
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. MolinaACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
ACM SIGCHI EICS-2019 Keynote. Quid, Pedro J. Molina
 
Esencia de Web Components
Esencia de Web ComponentsEsencia de Web Components
Esencia de Web Components
 
Esencia de web components
Esencia de web componentsEsencia de web components
Esencia de web components
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
Quid
QuidQuid
Quid
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
 
Building APIs with the OpenApi Spec
Building APIs with the OpenApi SpecBuilding APIs with the OpenApi Spec
Building APIs with the OpenApi Spec
 
Diseño de APIs con OpenAPI
Diseño de APIs con OpenAPIDiseño de APIs con OpenAPI
Diseño de APIs con OpenAPI
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 

Microservicios sobre MEAN Stack

  • 1. Microservicios sobre MEAN Stack Dr. Pedro J. Molina Desarrollador Independiente @pmolinam
  • 2. ¿Qué hago?  Domain Specific Languages  Generación de código  Microservicios  JavaScript, TypeScript, C#  Backends  Despliegues en nube  Arquitectura de Software  Consultoría  CTO  DSLs  App Builders  Project Manager  Arquitectura de Software  DSLs  DSLs  Generación de código Desarrollador Independiente Colaboro con Lemoncode Formación Anteriormente:
  • 3. ¿JavaScript?  WAT Programming http://bit.ly/watProg >[] + [] //empty string >[] + {} [object Object] >{} + {} NaN >{} + [] 0
  • 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
  • 8. Microservicios (3/3)  Microservicios = SOA para Hipsters  Abanderados  Netflix  Amazon  Building Microservices 2015, Sam Newman
  • 9. Demo. Ejemplo Sitio en Producción: http://bit.ly/madjs demo / 1234 (sed buenos) Repositorio de fuentes: http://bit.ly/madjs2
  • 10. Demo. Apps móviles usando los microservicios
  • 11. Stack y Arquitectura Client ExpressJS BaucisJS Mongoose MongoDB HTTP req resource query/command data 401 | 403 AuthN/AuthZ middleware <req.user, res> Microservice
  • 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
  • 17. HAL Estándar de Hipermedia en Recursos HATEOAS { “id”: 1234 “name”: “Alicia” “_links”: { “self”: { “href”: “/article/10”}, “prev”: { “href”: “/article/9”}, “next”: { “href”: “/article/11”}, “action-delete”: { “verb”: “DELETE”, “href”: “/article/10” } } } http://stateless.co/hal_specification.html
  • 18. IU Administrativa  Portal con Bootstrap y AngularJS 1.4  Permite administrar el Backend y la seguridad  Opcional  Reemplazable por otra capa de vista
  • 19. Tareas grunt  clean  eslint  copy  uglify  mochaTest  coverage
  • 20. Herramientas  npm  bower (~)  grunt  eslint  mocha / jasmine / karma  istanbul
  • 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
  • 29. Despliegue en IBM Bluemix  IBM Bluemix usa CloudFoundry /manifest.yml cf login cf create-service mongodb 100 mydb-sancho cf push myapp-quijote -m 1024M -b sdk-for-nodejs -t 180 -i 1 cf bind-service mydb-sancho myapp-quijote cf scale myapp-quijote -i 1 --- applications: - name: myapp-quijote command: node app/server.js
  • 30. Despliegue con Docker (1/2)  Dockerfile FROM node:latest ENV NODE_ENV=production WORKDIR /app RUN npm install -g grunt-cli ADD package.json /app/ RUN npm install ADD . /app RUN grunt release ENV PORT=80 EXPOSE 80 ENTRYPOINT ["node", "/app/app/server.js"]
  • 31. Despliegue con Docker (2/2)  Build  Run docker build –t user/appName . docker run --name db -d -P mongo:3.0 docker run user/appName –d –P --link db:db dbapp
  • 32. Despliegue con Docker Compose db: image: dockerfile/mongodb ports: - "27017" app: build: . environment: NODE_ENV: production PORT: 80 SERVICE_NAME: app links: - "db:DB" ports: - "80" lb: image: jasonwyatt/nginx-loadbalancer links: - app environment: APP_PATH: "/" ports: - "80:80" docker-compose.yml
  • 33. Despliegue con Docker Compose docker-compose up –d docker-compose scale app=3  ¡¡Arriba, arriba!! db app lb app app #0 #1 #2 80 80 27017
  • 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…
  • 40. Referencias  Código de ejemplo https://github.com/pjmolina/event-backend  Swagger  OpenAPI https://openapis.org  BaucisJS https://github.com/wprl/baucis  Hivepod https://www.hivepod.io  Buildup http://www.buildup.io  WAT Programming http://bit.ly/watProg
  • 41. Contacto ¿Te gusto lo que viste o todo lo contrario? En cualquier caso, ¡retroaliméntame! Pedro J. Molina pjmolina@gmail.com @pmolinam