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