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 1 o 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?
Motivação POR QUÊ? Componentização em serviços independentes Flexibilidade Escalabilidade Agilidade Liberdade tecnológica Especialização Isolamento de falhas Testes
Características O QUÊ? Componentização e modularização Serviços autônomos e desacoplados Monolítico Escopo e responsabilidade limitada Gerenciamento descentralizado Micro-serviços Deploy e execução isolada
Características O QUÊ? K Equipes multifuncionais por funcionalidade Equipes Especializadas Especialistas Em Front END Especialistas Em JAVA EE, Middleware e Integração Administração de Dados e DBAS Equipes Multifuncionais Funcionalidade de negócio Funcionalidade de negócio Funcionalidade de negócio Monolítico HTML CSS JAVAScript MVC JAVA EJBs Serviços Acesso a Dados Micro-serviços Baseado em http://www.slideshare.net/mstine/microservices-cf-summit
Características O QUÊ? Contexto A Contexto b Conceitos de negócio Bounded Context Domain Driven Design
Características O QUÊ? Produtos e não projetos Desenvolvedor: Ciclo de vida completo Software em produção g Contato com usuários
Características O QUÊ? Bases de dados descentralizadas Monolíticos Microserviços Monolítico Monolítico Monolítico Micro-serviço Micro-serviço Micro-serviço Micro-serviço
Características O QUÊ? Comunicação remota via rede APIs REST e HTTP " AMQP Smart Endpoints e Dumb Pipes
Características O QUÊ? Cultura de automação Design para falhas Design evolutivo Interdependência de serviços Composição
Dificuldades QUANDO? Controle transacional Segurança " Monitoração Performance Resiliência Testes Service discovery " Roteamento Legado
Fallacies of distributed computing The network is reliable Topology doesn't change Latency is zero K There is one administrator " Bandwidth is infinite Transport cost is zero The network is secure The network is homogeneous Fonte: http://en.wikipedia.org/wiki/fallacies_of_distributed_computing
Check-list QUANDO? Melhorias frequentes? Atualizações independentes? Transação isolada? Interface bem definida? Impacto em performance? Alta complexidade? Impacto cultural?
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 COMO? Core mínimo e simples Web e REST JVM ou Servidor leve Deploy em containers Não padronizado
Dropwizard COMO? Jetty JAX-RS (Jersey) Jackson Metrics
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 Spring Boot Spring Data, Batch, Integration, Web, JDBC, Security JAX-RS
spring boot COMO?
Spark Java COMO? Inspirado no Sinatra Jetty Maven Dependências no POM Java 8 na versão 2
Monitoração e Log COMO? 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 COMO? Cloud Multitenancy Partition ou tenant Isolamento Aplicações inalteradas Fonte: Oracle Weblogic Server Strategy and Roadmap bit.ly/oow14cafsessions
WebLogic server 12.2.1 COMO? 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
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 COMO? JAX-RS JPA CDI Jetty / Tomcat Web profile
Java EE COMO?
Exemplos de Arquitetura COMO? HTTP HTTP HTTP HTTP AMQP HTTP HTTP HTTP HTTP AMQP Microserviço #1 DropWizard Jetty Microserviço #2 Spring Boot Tomcat Microserviço #3 JAX-RS JPA Glassfish Microserviço #4 CXF Open JPA Karaf Jetty Microserviço #5 JVM
Exemplos de Arquitetura COMO? HTTP HTTP HTTP HTTP HTTP AMQP HTTP HTTP HTTP Domain #1 JAX-RS Docker JPA AMQP Docker DropWizard Jetty Docker Spring Boot Tomcat JAX-RS Domain #2 JPA Glassfish 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
Netflix QUEM? 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
Netflix QUEM? Falhas parciais Simulação em produção Monkeys Chaos Latency Conformity Security Janitor Fonte: http://www.slideshare.net/betclictech/betclic-mini-trainingnetflixsimianarmy
Netflix QUEM? Fonte: http://techblog.netflix.com/2012/07/embracing-differences-inside-netflix.html
Arquitetura Micro Service #1 Banco Relacional Micro Service #2 Banco Orientado a Documentos Micro Service #3 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 QUEM? Equipes descentralizadas Serviços/estruturas independentes Q&A descentralizado Simulações de erros DevOps
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