47
© 2005, Summa Technologies, Inc. 1 Summa Technologies www.summa.com.br Microserviços: flexibilidade e agilidade a que preço? Einar Saukas Fabio Velloso @fabiovelloso

Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

© 2005, Summa Technologies, Inc. 1

Summa Technologies www.summa.com.br

Microserviços: flexibilidadee agilidade a que preço?

Einar Saukas Fabio Velloso @fabiovelloso

Page 2: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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)

Page 3: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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

Page 4: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Tópicos

Motivação → POR QUÊ?

Características → O QUÊ?

Pontos de Atenção → QUANDO?!

Frameworks e tecnologias → COMO?

Exemplos → QUEM?!

!

!

!

Page 5: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Componentização em serviços independentes

Especialização

Liberdade tecnológica

EscalabilidadeFlexibilidade!

Testes

Isolamento de falhas

Agilidade!

! !

!

!

!

!

Motivação POR QUÊ?

Page 6: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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Ê?

Page 7: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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Ê?

Page 8: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Características

Conceitos de negócio

Bounded Context

Domain Driven Design

Contexto A Contexto b

O QUÊ?

Page 9: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Produtos e não projetos

Contato com usuários

Desenvolvedor:

Software em produção

Ciclo de vida completo

g

Características O QUÊ?

Page 10: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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Ê?

Page 11: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Comunicação remota via rede

APIs

AMQP

REST e HTTP

"

Smart Endpoints e Dumb Pipes

Características O QUÊ?

Page 12: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Interdependência de serviços

Características

Cultura de automação

Design para falhas

Design evolutivo

Composição

!

O QUÊ?

Page 13: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Segurança

Testes

Controle transacional!

Monitoração

Dificuldades

Roteamento"

Legado

Resiliência

Service discovery

QUANDO?

"

Performance

Page 14: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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

Page 15: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Check-list

Transação isolada?

Impacto em performance?

Atualizações independentes?

Impacto cultural?

Melhorias frequentes?

Interface bem definida?

Alta complexidade?

QUANDO?

Page 16: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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

Page 17: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

DevOps

Responsabilidade

Feedback

Cenários reais"Agilidade

Proatividade

Instrumentação

Parceria

Page 18: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Docker

Sem overhead de VMs!

Container!

Isolamento de recursos!

Gerenciamento como processo de SO!

COMO?

Page 19: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Microframeworks

Web e REST!

Core mínimo e simples!

JVM ou Servidor leve!

Deploy em containers!

Não padronizado!

COMO?

Page 20: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Dropwizard

JAX-RS (Jersey)!

Jetty!

Jackson!

Metrics!

COMO?

Page 21: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Dropwizard COMO?

Page 22: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 23: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

VERT.x COMO?

Page 24: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 25: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

spring boot COMO?

Page 26: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Spark Java

Jetty !

Inspirado no Sinatra!

Maven!

Dependências no POM!

Java 8 na versão 2!

COMO?

Page 27: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 28: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

“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

!

!

!

!

!

!

!

Page 29: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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

Page 30: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 31: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 32: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 33: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Java EE

JPA!

JAX-RS!

CDI!

! Jetty / Tomcat

! Web profile

COMO?

Page 34: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Java EE COMO?

Page 35: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 36: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 37: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

semelhanças com SOA

Alta coesão!

Componentes e encapsulamento !

Funcionalidades de negócio!

! Independentes de linguagem

! Comunicação HTTP

Page 38: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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!

Page 39: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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?

Page 40: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Netflix

Simulação em produção !

Falhas parciais!

Fonte: http://www.slideshare.net/betclicTech/betclic-mini-trainingnetflixsimianarmy

!

! Conformity

! Chaos

Security!

Latency!

Monkeys

Janitor!

QUEM?

Page 41: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Netflix

Fonte: http://techblog.netflix.com/2012/07/embracing-differences-inside-netflix.html

QUEM?

Page 42: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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

Page 43: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

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

Page 44: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Amazon

Serviços/estruturas independentes

DevOps

Simulações de erros

Equipes descentralizadas

Q&A descentralizado

QUEM?

Page 45: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

CONCLUSÃO

Integração/Entrega Contínua!

Testes de Falhas!

Arquitetura!

! Prós x Cons

DevOps!

Impacto Cultural!

Estratégia de Migração!

Page 46: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Perguntas ??

Page 47: Microserviços: flexibilidade e agilidade a que preço?...Processo único em memória Estrutura Complexa Dificulta Continuous Delivery! Conflitos de ClassLoaders! JVM isoladas Upgrades

Obrigado !!

Einar Saukas Fabio Velloso @fabiovelloso