Microserviços: flexibilidade
e agilidade a que preço?
Summa Technologies
www.summa.com.br
Einar Saukas
Fabio Velloso
@fabiovelloso
© 2005, Summa Technologies, Inc.
1

Einar Saukas

Principal Consultant - Summa Technologies (1998)

Co-Fundador e 1o Presidente - SouJava (1999-2003)

Engenheiro Eletrônico POLI/USP
Prêmio Itautec (1992)

Mestre em Ciência da Computação IME/USP
Prêmio Sociedade Brasileira de Computação (1999)

Projeto Sistema Único de Saúde/Datasus
Prêmio Duke's Choice Award JavaOne San Francisco (2003)

Projeto Sistema Integrado de Agendamento de Pacientes de São Paulo
Prêmio Duke's Choice Award JavaOne San Francisco (2005)

Projeto Central de Cessão de Crédito – Câmara Interbancária de Pagamentos
Prêmio Duke's Choice Award JavaOne Latin America (2012)

Fabio Velloso

Consultor da Summa Technologies

Co-Fundador e Diretor SouJava

Bacharel em Ciência da Computação - UFSCar
!
Professor de Arquitetura Orientada a Serviços - UFSCar

Projetos com Java desde 1996
Ü
Atualmente trabalhando em projetos de Integração, Big Data e Cloud Computing
Y
Palestrante em JavaOne, Abaporu, TDC, JustJava, Dia de Java, Café Brasil,
Campus Party

Tópicos
! Motivação → POR QUÊ?
! Características → O QUÊ?
! Pontos de Atenção → QUANDO?
! Frameworks e tecnologias → COMO?
! Exemplos → QUEM?

POR QUÊ?
Motivação
Componentização em serviços independentes
!
!
Flexibilidade
!
Escalabilidade
!
Agilidade
!
Liberdade tecnológica
!
Especialização
!
Isolamento de falhas
!
Testes

Características

Componentização e modularização

Serviços autônomos e desacoplados
O QUÊ?
Monolítico
 Escopo e responsabilidade limitada

Gerenciamento descentralizado
Micro-serviços

Deploy e execução isolada

O QUÊ?
Características
K
Equipes multifuncionais por funcionalidade
CSS
JAVA
EJBs
JAVAScript
MVC
Micro-serviços
Serviços
Acesso a Dados
Baseado em http://www.slideshare.net/mstine/microservices-cf-summit
Funcionalidade
de negócio
HTML
Equipes
Multifuncionais
Funcionalidade
de negócio
Monolítico
Especialistas
Em Front END
Funcionalidade
de negócio
Equipes
Especializadas
Especialistas
Em JAVA EE,
Administração
Middleware e
de Dados e
Integração
DBAS

O QUÊ?
Características
Contexto A

Conceitos de negócio

Bounded Context

Domain Driven Design
Contexto b

Características
 Produtos e não projetos

Desenvolvedor:

Ciclo de vida completo

Software em produção
g Contato com usuários
O QUÊ?

O QUÊ?
Características
!
Bases de dados descentralizadas
Microserviços
Monolíticos
Monolítico
Monolítico
Monolítico
Micro-serviço
Micro-serviço
Micro-serviço
Micro-serviço

Características
 Comunicação remota via rede

APIs

REST e HTTP
"
AMQP

Smart Endpoints e Dumb Pipes
O QUÊ?

Características

Cultura de automação

Design para falhas
! Design evolutivo

Interdependência de serviços
⧉ Composição
O QUÊ?

QUANDO?
Dificuldades
!
Controle transacional

Segurança
"
Monitoração

Performance
 Resiliência

Testes
 Service discovery
"
Roteamento
 Legado

Fallacies of distributed computing
!
Topology doesn't change
K
There is one administrator
"
Bandwidth is infinite

Transport cost is zero

The network is secure

The network is homogeneous
!
The network is reliable
 Latency is zero
Fonte: http://en.wikipedia.org/wiki/Fallacies_of_distributed_computing

Check-list

Melhorias frequentes?

Atualizações independentes?

Transação isolada?

Interface bem definida?

Impacto em performance?

Alta complexidade?

Impacto cultural?
QUANDO?

DevOps
K
Equipes mistas

Integração Contínua

Entrega Contínua
Fonte: http://www.rightscale.com/blog/cloud-industry-insights/cloud-computing-trends-2015-state-cloud-survey
Computação em nuvem: Infra virou código!

DevOps

Agilidade
"
Cenários reais

Parceria

Feedback

Responsabilidade

Instrumentação

Proatividade

Docker
COMO?
!
Container
!
Sem overhead de VMs
!
Isolamento de recursos
!
Gerenciamento como processo de SO

Microframeworks
!
Core mínimo e simples
!
Web e REST
!
JVM ou Servidor leve
!
Deploy em containers
!
Não padronizado
COMO?

Dropwizard
!
Jetty
!
JAX-RS (Jersey)
!
Jackson
!
Metrics
COMO?

Dropwizard
COMO?

VERT.x
COMO?
!
Executa na direto na JVM
!
Inspirado em Erlang/OTP e Node.js
!
Event bus
!
Java, JavaScript, CoffeeScript, Ruby,
Python ou Groovy
!
Plugins

VERT.x
COMO?

spring boot
COMO?
!
Simplificar o desenvolvimento Spring
!
Sem XML e starter POMs
!
Tomcat embutido
!
Declarar dependências
!
JAX-RS
Spring Boot
Spring
Data, Batch, Integration,
Web, JDBC, Security

spring boot
COMO?

Spark Java
!
Inspirado no Sinatra
!
Jetty
!
Maven
!
Dependências no POM
!
Java 8 na versão 2
COMO?

COMO?
Monitoração e Log
!
!
Monitoração
!
Log
!
JMX
!
Graylog2
!
Graphite
!
ELK stack
!
Jolokia
!
Log4j
!
Metrics
!
Janitor
Mecanismos de segurança: circuit breaker e
timeout

“PRoblemas com Application servers”
!
Conflitos de ClassLoaders
!
Uma aplicação por domain
!
Uma Aplicação impacta na outra
!
JVM isoladas
!
Estrutura Complexa
!
Libs, Heap e ClassLoader por aplicação
!
Processo único em memória
!
Upgrades isolados
!
Dificulta Continuous Delivery
!
Monitoração por aplicação
Modularização e isolamento

WebLogic server 12.2.1
!
Cloud
!
Multitenancy
!
Partition ou “tenant”
!
Isolamento
!
Aplicações inalteradas
Fonte: Oracle Weblogic Server Strategy and Roadmap bit.ly/oow14cafsessions
COMO?

WebLogic server 12.2.1

Memória e CPU isoladas
!
Árvore JNDI

por “partition”

Virtual host

WorkManager

Security realm
!
Gerenciamento
Fonte: Oracle Weblogic Server Strategy and Roadmap bit.ly/oow14cafsessions
COMO?

Wildfly swarm (Red hat)
COMO?
!
WildFly 9 modular
!
Core mínimo
!
Jar com App Server, dependências e aplicação
!
Dependências explícitas
!
Cada micro-serviço em um pacote

PAyara
COMO?
!
Baseado no Glassfish 4.1
!
Modular
!
Full Java EE, Web Profile e versão Micro
!
JAX-RS, Web Sockets, CDI, JPA, EJB…
!
java -jar payara-micro.jar --deploy teste.war

Java EE
!
JAX-RS
!
JPA
!
CDI
!
Jetty / Tomcat
!
Web profile
COMO?

Java EE
COMO?

COMO?
Exemplos de Arquitetura
HTTP
HTTP
HTTP
HTTP
AMQP
HTTP
HTTP
HTTP
HTTP
AMQP
Microserviço #3
Microserviço #1
Microserviço #2
JAX-RS
DropWizard
Spring Boot
JPA
Jetty
Tomcat
Glassfish
Microserviço #4
CXF
Open JPA
Karaf
Jetty
Microserviço #5
JVM

COMO?
Exemplos de Arquitetura
HTTP
HTTP
HTTP
HTTP
HTTP
HTTP
HTTP
HTTP
AMQP
Domain #1
JAX-RS
Docker
Docker
Docker
DropWizard
Spring Boot
Jetty
Tomcat
JAX-RS
JPA
Glassfish
JPA
AMQP
Domain #2
JAX-RS
JPA
Docker
JVM

semelhanças com SOA
!
Componentes e encapsulamento
!
Alta coesão
!
Funcionalidades de negócio
!
Independentes de linguagem
!
Comunicação HTTP

diferenças com SOA
!
Hub Central X Smart Endpoints e Dumb Pipes
!
Orquestração (BPEL e BPM)
!
SOAP X REST
!
DevOps, cultura e organização

QUEM?
Netflix
!
50 milhões de assinantes
!
800 devices
!
2 bilhões requisições/dia
!
500 microserviços
!
30 equipes
!
Múltiplas versões
Fonte: http://www.slideshare.net/stonse/pros-and-cons-of-a-microservices-architecture-talk-at-aws-reinvent

QUEM?
Netflix
!
Falhas parciais
!
Simulação em produção
!
Monkeys
!
Chaos
!
Latency
!
Conformity
!
Security
!
Janitor
Fonte: http://www.slideshare.net/betclicTech/betclic-mini-trainingnetflixsimianarmy

QUEM?
Netflix
Fonte: http://techblog.netflix.com/2012/07/embracing-differences-inside-netflix.html

Arquitetura
Micro Service #1
Micro Service #2
Micro Service #3
Banco Relacional
Banco Orientado
a Documentos
Key/Store
Data Base
Micro Service #4
Graph
Data Base

API Gateway
HTTP
HTTP
Micro Service #1
Banco Relacional
HTTP
HTTP
Micro Service #2
Banco Orientado
a Documentos
HTTP
HTTP
Micro Service #3
Key/Store Data Base
HTTP
AMQP
AMQP
Micro Service #4
Graph Data Base

Amazon

Equipes descentralizadas

Serviços/estruturas independentes

Q&A descentralizado

Simulações de erros

DevOps
QUEM?

CONCLUSÃO
!
Prós x Cons
!
Arquitetura
!
Integração/Entrega Contínua
!
DevOps
!
Testes de Falhas
!
Impacto Cultural
!
Estratégia de Migração
Perguntas ??
Obrigado !!
Einar Saukas
Fabio Velloso
@fabiovelloso
Download

Baixar apresentação (PDF - Português)