Micro vs Nano (servicios)

31
Micro vs nano Servicios Pedro J. Molina https://pjmolina.com @pmolinam https://metadev.pro μ n

Transcript of Micro vs Nano (servicios)

Page 1: Micro vs Nano (servicios)

Micro vs nano

Servicios

Pedro J. Molina

https://pjmolina.com

@pmolinamhttps://metadev.pro

μ n

Page 2: Micro vs Nano (servicios)

Pedro J. Molina@pmolinam

Page 3: Micro vs Nano (servicios)

Agenda

Micro-servicios

Nano-servicios

Casos de uso

Conclusiones

Page 4: Micro vs Nano (servicios)

Microservicios (1/3)

Estilo arquitectural para desarrollo de Software

Aplicaciones complejas compuestas por pequeños servicios, independientes y autónomos que se comunican usando APIsagnó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

Page 5: Micro vs Nano (servicios)

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

Page 6: Micro vs Nano (servicios)

Microservicios (3/3)

Microservicios = SOA para Hipsters

Abanderados Netflix

Amazon

Building Microservices2015, Sam Newman

Page 7: Micro vs Nano (servicios)

Sobre la importancia de aislar los microservicios:

Si la necesita,

cada microservicio tiene su propia capa de persistencia.

Aislados

Page 8: Micro vs Nano (servicios)

Microservicio Disrupción Empresarial

Ley de Conway

“Las organizaciones que diseñan sistemas están limitadas a producir diseños que copian las estructuras de comunicación de esas organizaciones”.

Melvin Conway, 1968

Inversión Disrupción Startups centradas en Transformación Digital que disrupcionan un mercado

Aprovechan la agilidad de los microservicios para iterar y pivotar más rápido descubriendo y asentando nuevos procesos más óptimos

Uber, Netflix, Amazon…

Page 9: Micro vs Nano (servicios)

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

Page 10: Micro vs Nano (servicios)

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

Page 11: Micro vs Nano (servicios)

Stack MEAN Dev

Local:27001

Local:5000

-

Navegador

Nube

db:27001

app:80

-

Navegador

Producción

cluster:27001

app :80

-

Navegador

lb: 443

Page 12: Micro vs Nano (servicios)

Demo. Ejemplo

Sitio en Producción:

https://openapi3.herokuapp.com

demo / demo

¡Sed buenos! }:-b

Repositorio de fuentes:

https://github.com/pjmolina/event-backend

Page 13: Micro vs Nano (servicios)

MEAN Stack: Arquitectura

Client ExpressJS BaucisJS Mongoose MongoDB

HTTP req

resourcequery/command

data

401 | 403

AuthN/AuthZ middleware

<req.user, res>

Microservice

Page 14: Micro vs Nano (servicios)

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

Page 15: Micro vs Nano (servicios)

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()

Page 16: Micro vs Nano (servicios)

.NET Core + NancyFX

http://nancyfx.org

public class SampleModule : Nancy.NancyModule{

public SampleModule(){

Get["/hello"] = _ => “hello world";}

}

/helloreq res

Page 17: Micro vs Nano (servicios)

OpenAPI

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

Page 18: Micro vs Nano (servicios)

Escalabilidad

Clusters de MongoDB

Sesión persistida en MongoDB connect-mongo

Balanceador de carga (nginx, haproxy, etc.)

Opciones: Gestionalo tu según necesidades: IaaS PaaS (como Heroku) Serverless

Page 19: Micro vs Nano (servicios)

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

Page 20: Micro vs Nano (servicios)

Registro y descubrimiento

Consul

Page 21: Micro vs Nano (servicios)

Monitorización

newRelic

Page 22: Micro vs Nano (servicios)

Monitorización

Prometheus

Page 23: Micro vs Nano (servicios)

Logs

papertrail

Page 24: Micro vs Nano (servicios)

Go Serverless!

Código sin preocuparse* por la infrastructura Amazon Lambda Functions http://docs.aws.amazon.com/lambda

Google Cloud Functions

IBM OpenWhisk

Azure Functions

Page 25: Micro vs Nano (servicios)

Nano-servicio

¿¡Microservicio más pequeño hecho en Valencia!?

Page 26: Micro vs Nano (servicios)

Nano-servicio

Servicios muy, muy pequeños. Altamente escalables.

Diseñados para poder ser desplegados en plataformas serverless y poder aprovechar un escalado totalmente elástico.

Requieren de una infrastructura eficiente que pueda alojar una multitud de nanoservicios

Plataformas: Amazon Lambda Functions Google Cloud Functions Azure Cloud Funtions IBM OpenWisk

Page 27: Micro vs Nano (servicios)

Nano-servicios: plataformas y librerías

Plataformas: Amazon Lambda Functions

Google Cloud Functions

Azure Cloud Funtions

IBM OpenWisk

Librerías Serverless.com (ASW Lambda)

ClaudiaJS (AWS Lambda)

Page 28: Micro vs Nano (servicios)

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

Page 29: Micro vs Nano (servicios)

Ejemplo Serverless. Analíticas móviles

Amazon Route 53

AmazonS3

AWSLambda

Lambda function

AmazonDynamoDB

Amazon API Gateway*

Page 30: Micro vs Nano (servicios)

Casos de uso

Microservicios Frontera: Bounded Context bien definidos (DDD) Necesidad de escalado o evolución de negocio en cada Bounded Context a

diferentes velocidades o desconocida Equipos diferenciados: cada uno responsable de su microservicio

Nanoservicios Frontera: funcionalidad muy, muy pequeña Funcionalidad que requiera una escalabilidad o disponibilidad muy alta

Servicio de login / Servicio de log / diagnostico

A menudo considerados anti-patrón: cuando el coste de desplegarlos es mayor que su utilidad

Page 31: Micro vs Nano (servicios)

Preguntas

y tal vez… respuestas

@pmolinam