Micro vs Nano (servicios)

Post on 22-Jan-2018

378 views 4 download

Transcript of Micro vs Nano (servicios)

Micro vs nano

Servicios

Pedro J. Molina

https://pjmolina.com

@pmolinamhttps://metadev.pro

μ n

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

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 Microservices2015, Sam Newman

Sobre la importancia de aislar los microservicios:

Si la necesita,

cada microservicio tiene su propia capa de persistencia.

Aislados

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…

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

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

Producción

cluster:27001

app :80

-

Navegador

lb: 443

Demo. Ejemplo

Sitio en Producción:

https://openapi3.herokuapp.com

demo / demo

¡Sed buenos! }:-b

Repositorio de fuentes:

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

MEAN Stack: Arquitectura

Client ExpressJS BaucisJS Mongoose MongoDB

HTTP req

resourcequery/command

data

401 | 403

AuthN/AuthZ middleware

<req.user, res>

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

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

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

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

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

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

Nano-servicio

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

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

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)

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. Analíticas móviles

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

Preguntas

y tal vez… respuestas

@pmolinam