39
Microservices Tiago Dolphine

Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Embed Size (px)

Citation preview

Page 1: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

MicroservicesTiago Dolphine

Page 2: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Tiago Marchetti Dolphine

[email protected]

@tiagodolphine

Sobre?

Page 3: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Agenda

• O que é ? como surgiu? Porque?

• Decompondo uma aplicação em microservices

• Comunicação e integração

• Estrutura básica

• Desafios (micro?)

• Case de arquitetura microservices

Page 4: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Vamos imaginar que estamos desenvolvendo uma loja virtual ...

Page 5: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Browser / Mobile App

App Server/Container (Tomcat/Jetty)

Framework (Spring/JavaEE)

LB

X Scaling

DB

Front EndFramework

Product Svc

Order Svc

Pricing Svc

Stock Svc

OR

M(H

iber

nat

e)

Aplicação Monolítica

Page 6: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Simplicidade em:• Desenvolver• Testar• Deploy• Escalar

É natural pois é como aprendemos !

Aplicação Monolítica

Page 7: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Porém...

• Crescimento do negócio

• Aumento da complexidade do negócio

Page 8: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

E para os desenvolvedores?

Page 9: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

E para os desenvolvedores?

Page 10: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Enquanto isso em nossa loja virtual ...

Aumento de vendas

Serviço de Pedidos Gargalo

Page 11: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Vamos escalar nossa aplicação !

Page 12: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

App Server/Container (Tomcat/Jetty)

Framework (Spring/JavaEE)

Front EndFramework

Product Svc

Order Svc

Pricing Svc

Stock Svc

OR

M(H

iber

nat

e)

App Server/Container (Tomcat/Jetty)

Framework (Spring/JavaEE)

Front EndFramework

Product Svc

Order Svc

Pricing Svc

Stock Svc

OR

M(H

iber

nat

e)

App Server/Container (Tomcat/Jetty)

Framework (Spring/JavaEE)

Front EndFramework

Product Svc

Order Svc

Pricing Svc

Stock Svc

OR

M(H

iber

nat

e)

App Server/Container (Tomcat/Jetty)

Framework (Spring/JavaEE)

Front EndFramework

Product Svc

Order Svc

Pricing Svc

Stock Svc

OR

M(H

iber

nat

e)

• Custos desnecessários (Cloud $$)

• Subaproveitamento de recurso computacional

Preciso escalar toda a aplicação !

Page 13: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

http://microservices.io/articles/scalecube.html

Page 14: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Alguns pontos negativos

• Redeploy de toda a aplicação para pequenas mudanças

• Alto tempo de interrupções

• Risco de falhas

• Dificulta mudanças

• Updates menos frequentes

Page 15: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

A microservice architecture builds software as suites of collaborating services.

(Martin Fowler)

Page 16: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

O que é? Qual vantagem?

• Conjunto de pequenos serviços

• Foco em funcionalidade

• Independência

• Tecnologias heterogêneas e poliglotas

• Escalabilidade em gargalos

• DRY Reuso de funcionalidades

• Deploy independente (favorece CI/CD)

• Equipes menores e focadas

Page 17: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Como definir um bom microservice?

• Funcionalidades relacionados devem ficar juntas

• Baixo acoplamento / Alta coesão

• Estudar e delimitar o escopo do serviço

• Modelar pensando em funcionalidades, não nos dados

• Bounded Contexts (modelo interno e modelo exposto)

• Módulos (app monólítica) candidatos a microservices

O menor possível, porém grande o suficiente para representar o seu domínio

Page 18: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Como ficaria nossa loja virtual?

Page 19: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Browser / Mobile App

LB

Y Scaling

DB

Micro container framework

Order Svc

DB

Stock Svc

Front End

DB

Product Svc

DB

Pricing Svc

Page 20: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

http://microservices.io/articles/scalecube.html

Page 21: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Integração e comunicação

• Como um serviço se comunica com outro?

Chamada à funções Chamadas à APIs remotas

• Síncrono: request/response

• Assíncrono: request/callback

Page 22: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Orquestração vs coreografia

Vamos pensar no processo de criação de um novo cliente

Um serviço gerencia quando tomar ações Cada serviço sabe quando tomar ações diante de um evento

Page 23: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

REST

• Mecanismo síncrono

• Recurso É o foco do serviço

• Desacoplamento do exposto para o armazenado

• HTTP• Semântica e verbos (ex: GET, POST, PUT, DELETE)

• Caching proxies

• Load balancers

• Ferramentas de monitoramento

• Métodos de segurança

Page 24: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

API Gateway

APIGW

Web App

Mobile App

Customer

Product

Stock

Pricing

• Ponto único de entrada• Agregação de dados• API otimizada para diferentes

clientes• Evita exposição de dados

desnecessários• Tradução de protocolo• Cross domain e Same-origin policy

Page 25: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Mensageria

• Mecanismo assíncrono (baseado em eventos)

• Publish/Subscribe

• Incentiva a coreografia e baixo acoplamento

• Padrões para mensagens (AMQP, JMS...)

• Message Broker (RabbitMQ, ActiveMQ, HornetQ...)

• Aumenta complexidade

Page 26: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Híbrido

Stock

Pricing

Email

TopicOrderFrontEnd

Product

CustomerDB

REST/HTTP

Vamos pensar num fluxo de compra

Page 27: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Falhas são inevitáveis

• Estar preparado para falhas

• Assumir que as chamadas e serviços podem falhar

• Rede é instável

• Recuperação à falhas

• Adotar este pensamento em tudo que for desenvolvido

Page 28: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Estrutura básica de um Microservice

Recursos

Serviço

Modelodo Domínio

Repositórios

ORM / Framework Dados

Gat

eway

Rec

urs

os

Serv

iço

Mo

del

od

o D

om

ínio

Rep

osi

tóri

os

OR

M /

Fra

mew

ork

D

ado

s

Gateway

Page 29: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Deploy

• Instância• Serviços isolados

• Sem conflito de recursos

• Aloca todo recurso disponível

• Virtual Machine• Facilidade de escalar add mais VMs

• Controle de CPU e memória

• VM lenta de buildar e startar

• Container• Rápido para buildar e startar

• Não necessita startar todo SO, apenas o processo do serviço

Page 30: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

E como ficam os times de desenvolvimento?

Page 31: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

"Qualquer empresa que projeta um sistema, inevitavelmente produz um projeto cuja estrutura é uma cópia da estrutura de comunicação da organização“...

Page 32: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

• Times multidisciplinares

• Paraleliza mais facilmente o desenvolvimento• Cada time é responsável (dono) por cada microservice

Page 33: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Microservices no ifood...

Page 34: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Page 35: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Vamos a um exemplo de código... com Spring boot

https://github.com/tiagodolphine/microservices

Page 36: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Concluindo...

• Maior complexidade!

• Preciso de microservices para o meu problema?

• Estar sempre ciente dos desafios que terei que enfrentar!• Descoberta de serviços

• Operações transacionais

• Testes

• Monitoramento

• Teorema CAP (consistency, availability, partition tolerance)

• Dia a dia do desenvolvedor mais agitado e divertido

Page 37: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Algumas referências

• Microservices (Martin Fowler e James Lewis)

• microservices.io (Chris Richardson)

• Building "Bootiful" Microservices with Spring Boot (Josh Long)

• Testing Strategies in a Microservice Architecture (Toby Clemson)

• Building MicroservicesDesigning Fine Grained Systems (Sam Newman) fev/2015

Page 38: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Tiago Marchetti Dolphine

[email protected]

@tiagodolphine

Dúvidas ?

Page 39: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)

Algumas idéias de tecnologias

• Micro container: Spring Boot, Play, DropWizard

• Comunicação:

• REST : Spring MVC, JAX-RS

• Mensageria: Spring AMQP com RabbitMQ

• Deploy: Container com Docker

• Monitoramento: Logstash, Kibana, NewRelic, Consul

• Service Discovery: Consul