construindo microservices auto-curáveis com spring cloud e ... · construindo microservices...

46
Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Upload: others

Post on 09-Feb-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSSRodrigo Cândido da Silva @rcandidosilva

Page 2: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

About Me• Software Architect

• http://integritastech.com • JUG Leader do GUJavaSC

• http://gujavasc.org • Twitter

• @rcandidosilva • Contatos

• http://rodrigocandido.me

Page 3: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Agenda• Monolito vs. Microservices • Principais Desafios • Spring Cloud + Netflix OOS

• Spring Cloud Config + Bus • Netflix Eureka • Netflix Ribbon • Netflix Hystrix + Turbine • Netflix Zuul • Spring Cloud Security

• Conclusões • Perguntas

Page 4: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Monolito vs. Microservices

Page 5: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Monolito vs. Microservices

Page 6: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Microservices

• Características • Pequenos • Deployment interdependentes • Independente de tecnologia • Independente de infra-estrutura

"Small independent component with well-defined boundaries that’s doing one thing, but

doing it well"

Page 7: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Microservices• Como torná-los auto-curáveis?

• Gerenciamento de configuração • Registro e descoberta dos serviços • Roteamento • Balanceamento de carga • Tolerância à falhas • Monitoramento

Page 8: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Gerenciamento de Configuração

Page 9: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Registro e Descoberta de Serviços

Page 10: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Roteamento

Page 11: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Tolerância à Falhas

Page 12: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Balanceamento de Carga

Page 13: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva
Page 14: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

• API • Routing / Health check • Microservices • Logging • Data Management

• Eureka • Hystrix + Turbine • Ribbon • Zuul • + alguns outros…

Page 15: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva
Page 16: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud

• Conjunto de bibliotecas / componentes • Não é apenas uma ferramenta

• Integrado ao Spring Boot • Suporta diferentes arquiteturas e tecnologias em Cloud

• AWS, Netflix, Heroku, Cloud Foundry, etc • Facilita a implementação de padrões necessários aos sistemas distribuídos

“Toolset designed for building distributed systems”

Page 17: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud• Principais Componentes

Page 18: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud + Netflix OSS"Casamento perfeito para criação de

microservices auto-curáveis"

Gerenciamento de configuração Spring Cloud Config + Bus

Descoberta de serviços Netflix Eureka

Balanceamento de carga Netflix Ribbon

Tolerância à falhas Netflix Hystrix + Turbine

Roteamento Netflix Zuul

Segurança Spring Cloud Security

Page 19: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud + Netflix OSSExemplo de Utilização

Page 20: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud Config

“Gerenciamento de configuração para microservices"

• Centraliza a configuração da aplicação • Permite atualizações dinâmicas • Versionado • Suporte à rollback • Suporta configuração via repositórios

• Git, SVN, filesystem • Permite atualização via barramento

• Spring Cloud Bus

Page 21: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud Config

Page 22: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud Config (Server)

@SpringBootApplication @EnableConfigServerpublic class ConfigServer {...}

spring.cloud.config.git.uri: https://github.com/...

ConfigServer.java

application.yml

Page 23: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud Config (Client)

spring.cloud.config.uri: ${vcap.services.configserver.credentials.uri}

application.yml

Page 24: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Demo• Gerenciamento de Configuração

• Spring Cloud Config + Spring Cloud Bus • https://github.com/rcandidosilva/spring-cloud-sample

Page 25: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Eureka"Transparência de localização aos microservices"

• Registro de serviços REST based • Suporte à replicação • Cache aplicado no stub cliente • Resiliente • Rápido… mas não consistente • Fornece o alicerce para outros serviços • Mantém registro de clientes com metadados

Page 26: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Eureka

Page 27: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Eureka@SpringBootApplication @EnableEurekaServerpublic class EurekaServer {...}

@SpringBootApplication @EnableEurekaClientpublic class Application {...}

EurekaServer.java

Application.java

Page 28: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Demo• Transparência de Localização

• Spring Cloud + Netflix Eureka • https://github.com/rcandidosilva/spring-cloud-sample

Page 29: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Ribbon

• Balanceamento decentralizado no cliente • Resiliente • Suporte à tolerância a falhas • Trabalha com múltiplos protocolos

• HTTP, TCP, UDP • Modelo assíncrono e reativo • Suporte à caching e batching • Múltiplos algoritmos de balanceamento

"Balanceamento de carga para microservices"

Page 30: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Ribbon

Page 31: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Demo• Balanceamento de Carga

• Spring Cloud + Netflix Ribbon • https://github.com/rcandidosilva/spring-cloud-sample

Page 32: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Hystrix“Tolerância à falhas para microservices"

• Implementa padrão circuit breakers • Fornece monitoramento aos serviços

• Hystrix dashboard • Suporta comandos assíncronos • Utiliza diferentes thread pools • Pode implementar timeouts

Page 33: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Hystrix• Circuit Breaker Pattern

• Máquina de estados • Closed, Open, Half-Open

• Falha não é propagada para chamada do cliente

Page 34: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Hystrix

Page 35: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Hystrix Dashboard

Page 36: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Hystrix Dashboard + Turbine

Page 37: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Demo• Tolerância a Falhas

• Spring Cloud + Netflix Hystrix • https://github.com/rcandidosilva/spring-cloud-sample

Page 38: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Zuul“Roteamento centralizado para microservices"

• Fornece único ponto de entrada para os serviços • Roteamento e balanceamento na JVM • Cria uma rota para cada serviço no Eureka • Define filtros para pontos de entrada • Similar outros roteamentos

• httpd, nginx, CF go router

Page 39: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Netflix Zuul

Page 40: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Demo• Roteamento centralizado

• Spring Cloud + Netflix Zuul • https://github.com/rcandidosilva/spring-cloud-sample

Page 41: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud Security

“Segurança aplicada para microservices"

• Integração Spring Security + OAuth2 • SSO com OAuth2 e OpenID Connect • Proteção dos serviços com tokens (JWT) • Transmissão tokens entre SSO e apps • OAuth2 + OpenID Connect + JWT ;)

Page 42: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Spring Cloud Security

Discovery

Client Relying Party

Resource Server

Get an access token

& an ID Token (JWT)

Use an access token

Authorization Server

Iden.tyProviderorIDPor

OpenIDProviderorOP

Authorization Endpoint

Token Endpoint

Important Stuff

Userinfo Endpoint

Registration Endpoint

JWKS Endpoint

JWKS Endpoint

Validate (JWT)

ID Token

/.well-known /webfinger /openid-configura.on

Check Session IFrame

End Session Endpoint

Page 43: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Conclusões…• Microservices são sistemas distribuídos • Sistemas distribuídos são complexos • Netflix OSS define ótimas ferramentas para

implementação com microservices • Spring Cloud

• Ótima abstração para Netflix OSS • Fácil utilização (via anotações) • Integração com ecossistema Spring • Enjoy it ;)

Page 44: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Perguntas

?

Page 45: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Referências• http://projects.spring.io/spring-boot/ • http://projects.spring.io/spring-cloud/ • https://netflix.github.io/ • https://github.com/Netflix/zuul • https://github.com/Netflix/eureka • https://github.com/Netflix/ribbon • https://github.com/Netflix/Hystrix • http://www.pwc.com/us/en/technology-forecast/2014/cloud-computing/features/

microservices.html • http://martinfowler.com/articles/microservices.html • http://callistaenterprise.se/blogg/teknik/2015/04/10/building-microservices-with-

spring-cloud-and-netflix-oss-part-1/ • http://www.javaworld.com/article/2927920/cloud-computing/build-self-healing-

distributed-systems-with-spring-cloud.html

Page 46: Construindo Microservices Auto-curáveis com Spring Cloud e ... · Construindo Microservices Auto-curáveis com Spring Cloud e Netflix OSS Rodrigo Cândido da Silva @rcandidosilva

Muito obrigado! @rcandidosilva

rodrigocandido.me