qcon 2016 - spring cloud

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

Upload: buiphuc

Post on 07-Jan-2017

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: QCon 2016 - Spring Cloud

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

Page 2: QCon 2016 - Spring Cloud

About Me• Software Architect

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

• http://gujavasc.org • Twitter

• @rcandidosilva • Contatos

• http://rodrigocandido.me

Page 3: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Monolito vs. Microservices

Page 5: QCon 2016 - Spring Cloud

Monolito vs. Microservices

Page 6: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Gerenciamento de Configuração

Page 9: QCon 2016 - Spring Cloud

Registro e Descoberta de Serviços

Page 10: QCon 2016 - Spring Cloud

Roteamento

Page 11: QCon 2016 - Spring Cloud

Tolerância à Falhas

Page 12: QCon 2016 - Spring Cloud

Balanceamento de Carga

Page 13: QCon 2016 - Spring Cloud
Page 14: QCon 2016 - Spring Cloud

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

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

Page 15: QCon 2016 - Spring Cloud
Page 16: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Spring Cloud• Principais Componentes

Page 18: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Spring Cloud + Netflix OSSExemplo de Utilização

Page 20: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Spring Cloud Config

Page 22: QCon 2016 - Spring Cloud

Spring Cloud Config (Server)

@SpringBootApplication @EnableConfigServerpublic class ConfigServer {...}

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

ConfigServer.java

application.yml

Page 23: QCon 2016 - Spring Cloud

Spring Cloud Config (Client)

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

application.yml

Page 24: QCon 2016 - Spring Cloud

Demo• Gerenciamento de Configuração

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

Page 25: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Netflix Eureka

Page 27: QCon 2016 - Spring Cloud

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

@SpringBootApplication @EnableEurekaClientpublic class Application {...}

EurekaServer.java

Application.java

Page 28: QCon 2016 - Spring Cloud

Demo• Transparência de Localização

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

Page 29: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Netflix Ribbon

Page 31: QCon 2016 - Spring Cloud

Demo• Balanceamento de Carga

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

Page 32: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Netflix Hystrix• Circuit Breaker Pattern

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

• Falha não é propagada para chamada do cliente

Page 34: QCon 2016 - Spring Cloud

Netflix Hystrix

Page 35: QCon 2016 - Spring Cloud

Hystrix Dashboard

Page 36: QCon 2016 - Spring Cloud

Hystrix Dashboard + Turbine

Page 37: QCon 2016 - Spring Cloud

Demo• Tolerância a Falhas

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

Page 38: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Netflix Zuul

Page 40: QCon 2016 - Spring Cloud

Demo• Roteamento centralizado

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

Page 41: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Perguntas

?

Page 45: QCon 2016 - Spring Cloud

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: QCon 2016 - Spring Cloud

Muito obrigado! @rcandidosilva

rodrigocandido.me