micro vs nano (servicios)

Download Micro vs Nano (servicios)

Post on 22-Jan-2018

254 views

Category:

Technology

2 download

Embed Size (px)

TRANSCRIPT

  • 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

Recommended

View more >