Micro vs Nano (servicios)
date post
22-Jan-2018Category
Technology
view
306download
3
Embed Size (px)
Transcript of Micro vs Nano (servicios)
Micro vs nanoServicios
Pedro J. Molina
https://pjmolina.com
@pmolinamhttps://metadev.pro
n
https://pjmolina.com/https://metadev.pro/
Pedro J. Molina@pmolinam
Agenda
Micro-servicios
Nano-servicios
Casos de uso
Conclusiones
Microservicios (1/3)
Estilo arquitectural para desarrollo de Software
Aplicaciones complejas compuestas por pequeos servicios, independientes y autnomos que se comunican usando APIsagnsticas de lenguaje.
Altamente desacoplados, enfocados en tareas pequeas. Cmo de pequeo?
Dueo (onwership) claro y conocido.
http://martinfowler.com/articles/microservices.html
http://martinfowler.com/articles/microservices.html
Microservicios (2/3)
Ventajas Componibles Evolucin rpida Stack adecuado al trabajo Aislamiento ante fallos Despliegues rpidos Mejor disponibilidad
Contras Latencia (en composicin) Correlacin de eventos (trazas) Heterogeneidad Volumen en despliegue requiere automatizacin
http://es.slideshare.net/stonse/pros-and-cons-of-a-microservices-architecture-talk-at-aws-reinvent
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 Microservices2015, Sam Newman
Sobre la importancia de aislar los microservicios:
Si la necesita,
cada microservicio tiene su propia capa de persistencia.
Aislados
Microservicio Disrupcin Empresarial
Ley de Conway
Las organizaciones que disean sistemas estn limitadas a producir diseos que copian las estructuras de comunicacin de esas organizaciones.
Melvin Conway, 1968
Inversin Disrupcin Startups centradas en Transformacin Digital que disrupcionan un mercado
Aprovechan la agilidad de los microservicios para iterar y pivotar ms rpido descubriendo y asentando nuevos procesos ms ptimos
Uber, Netflix, Amazon
Stacks para Microservicios
NodeJS Express + Baucis
SenecaJS
FeatherJS
Serverless: Claudia
Java Jersey
Dropwizard
Spring / Spring Boot
Play
SparkJava http://www.gajotres.net/best-available-java-restful-
micro-frameworks/
.NET Core NancyFx
WebAPI https://docs.microsoft.com/en-
us/dotnet/articles/csharp/tutorials/microservices
Go go-kit/kit
micro/go-micro
goa.design
coding/kite
Serverless: Sparta, Apex, Gordon
http://www.gajotres.net/best-available-java-restful-micro-frameworks/https://docs.microsoft.com/en-us/dotnet/articles/csharp/tutorials/microservices
Persistencia
NoSQL MongoDB, CouchDB, Dynamo, DocumentDB
RDBM MySql, Postgress, Oracle, Sql Server
Key-Value Stores Redis Memcache
Colas RabitMQ, ZeroMQ, AMZ SQS, Azure Queues
Blobs Amazon S3 Azure Blobs
Stack MEAN Dev
Local:27001
Local:5000
-
Navegador
Nube
db:27001
app:80
-
Navegador
Produccin
cluster:27001
app :80
-
Navegador
lb: 443
Demo. Ejemplo
Sitio en Produccin:
https://openapi3.herokuapp.com
demo / demo
Sed buenos! }:-b
Repositorio de fuentes:
https://github.com/pjmolina/event-backend
https://openapis3.herokuapp.com/https://github.com/pjmolina/event-backend
MEAN Stack: Arquitectura
Client ExpressJS BaucisJS Mongoose MongoDB
HTTP req
resourcequery/command
data
401 | 403
AuthN/AuthZ middleware
Microservice
NodeJS + 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
http://expressjs.com/
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();
});
*reqres
next()
.NET Core + NancyFX
http://nancyfx.org
public class SampleModule : Nancy.NancyModule{
public SampleModule(){
Get["/hello"] = _ => hello world";}
}
/helloreq res
http://nancyfx.org/
OpenAPI
OpenAPI Initiative https://openapis.org
Descripcin de Servicios / APIs
Documenta el API
Facilita su uso por desarrolladores
Herramientas Contract first
Documentar APIs existents
Generacin de Proxies, Skeletons, SDKs nativos
Integracin con Herramientas de API Management
https://openapis.org/
Escalabilidad
Clusters de MongoDB
Sesin persistida en MongoDB connect-mongo
Balanceador de carga (nginx, haproxy, etc.)
Opciones: Gestionalo tu segn necesidades: IaaS PaaS (como Heroku) Serverless
Carga
Sistema en produccin
Backends para aplicaciones mviles 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
Monitorizacin
newRelic
Monitorizacin
Prometheus
Logs
papertrail
Go Serverless!
Cdigo sin preocuparse* por la infrastructura Amazon Lambda Functions http://docs.aws.amazon.com/lambda
Google Cloud Functions
IBM OpenWhisk
Azure Functions
http://docs.aws.amazon.com/lambda
Nano-servicio
Microservicio ms pequeo hecho en Valencia!?
Nano-servicio
Servicios muy, muy pequeos. Altamente escalables.
Diseados para poder ser desplegados en plataformas serverless y poder aprovechar un escalado totalmente elstico.
Requieren de una infrastructura eficiente que pueda alojar una multitud de nanoservicios
Plataformas: Amazon Lambda Functions Google Cloud Functions Azure Cloud Funtions IBM OpenWisk
Nano-servicios: plataformas y libreras
Plataformas: Amazon Lambda Functions
Google Cloud Functions
Azure Cloud Funtions
IBM OpenWisk
Libreras Serverless.com (ASW Lambda)
ClaudiaJS (AWS Lambda)
exports.handler = function(event, context) {switch (event.operation) {
case 'ping': context.succeed('pong'); return;
case 'getSample':event.customArgs = ["rose:", "/tmp/rose.png"];im.convert(event.customArgs, function(err, output) {
if (err) context.fail(err);else {
var resultImgBase64 = new Buffer(fs.readFileSync("/tmp/rose.png")).toString('base64');
try { fs.unlinkSync("/tmp/rose.png");} catch (e) {}context.succeed(resultImgBase64);
}});break;
default:return context.fail(new Error('Unrecognized operation "' +
event.operation + '"'));}
};
Ejemplo: AWS Lambda
Ejemplo Serverless. Analticas mviles
Amazon Route 53
AmazonS3
AWSLambda
Lambda function
AmazonDynamoDB
Amazon API Gateway*
Casos de uso
Microservicios Frontera: Bounded Context bien definidos (DDD) Necesidad de escalado o evolucin de negocio en cada Bounded Context a
diferentes velocidades o desconocida Equipos diferenciados: cada uno responsable de su microservicio
Nanoservicios Frontera: funcionalidad muy, muy pequea Funcionalidad que requiera una escalabilidad o disponibilidad muy alta
Servicio de login / Servicio de log / diagnostico
A menudo considerados anti-patrn: cuando el coste de desplegarlos es mayor que su utilidad
Preguntas
y tal vez respuestas
@pmolinam