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