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