SlideShare a Scribd company logo
Criando Micro-serviços Reativos com Java
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
Agenda
• Monolito vs. Micro-serviços
• Manifesto Reativo
• Resiliência
• Message-driven
• Demo
• Perguntas
Monolito vs. Micro-serviços
Micro-serviços
• Pequenos
• Deployment interdependente
• Independente de tecnologia
• Infra-estrutura separada
"Small independent component with well-
defined boundaries that’s doing one thing, but
doing it well"
Manifesto Reativo
Resiliência
• Como suportar isso com micro-serviços?
• Central point of configuration
• Service registry and discovery
• Routing features
• Load balancing
• Failover
• Monitoring
Spring BootSpring Cloud
Spring Cloud + Netflix OSS
Spring Cloud + Netflix OSS
“Casamento perfeito para criação de micro-
serviços resilientes“
Gerenciamento de Configuração Spring Cloud Config + Bus
Descoberta de Serviços Netflix Eureka
Balanceamento de Carga Netflix Ribbon
Circuit Breaker Netflix Hystrix + Turbine
Proxy Server Netflix Zuul
Segurança Spring Cloud Security
Spring Cloud Config
Netflix Eureka
Netflix Ribbon
Netflix Hystrix
• Circuit Breaker Pattern
Hystrix Dashboard
Netflix Zuul
Spring Cloud Security
Discovery	
Client
Relying Party
Resource
Server
Get an access token
& an ID Token (JWT)
Use an access token
Authorization
Server
Iden.ty	Provider	or	
IDP	or		
OpenID	Provider	or	
OP	
	
	
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
Message-Driven
• Como suportar isso com micro-serviços?
• Comunicação assíncrona
• Non blocking I/O
• Distribuição
• Consistência
• Event sourcing
• CQRS
Reactive Programming
• Asynchronous communication and data streams
• reactive-streams.org
Alternativas Reativas com Java EE
JMS EJB 3
Message-Driven
Beans
Asynchronous
Session Beans
CDI
Events
Observers
Servlet
Asynchronous
NIO
JAX-RS
Async on Server
Async on Client
WebSocket
Async Remote
Endpoints
Concurrency
Utilities
Project Reactor
• Biblioteca para implementação de non-blocking apps
• Interage com Java 8 functional API
• Oferece duas composable API reativas
• Flux[N] and Mono[0|1]
• Suporta escalabilidade in-memory roteando com
Bus extensions
• Suporte portável para micro-serviços
REST Endpoint
@RestController
public class UserRestController {
private static final List<User> users = new ArrayList<>();
static {
users.add(new User(1, "Rodrigo", "C", "da Silva"));
users.add(new User(2, "Israel", "B", "Rodriguez"));
users.add(new User(3, "Bruno", "", "Souza"));
users.add(new User(4, "Edson", "", "Yanaga"));
}
@RequestMapping(method = RequestMethod.GET, value = "/users")
public List<User> getUsers() {
return users;
}
@RequestMapping(method = RequestMethod.GET, value = "/user/{id}")
public User getUser(@PathVariable("id") Integer id) {
return users.stream().filter(g -> g.getId() == id)
.collect(Collectors.toList()).get(0);
}
}
REST Proxy
@Component
public class UserServiceProxy {
@Autowired UserService service;
@HystrixCommand(fallbackMethod = "defaultUsersObservable")
public Observable<List<User>> getUsersObservable() {
return new ObservableResult<List<User>>() {
@Override
public List<User> invoke() {
return service.getUsers();
}
};
}
public Observable<User> defaultUsersObservable() {
return null;
}
} @FeignClient("USER-SERVICE")
public interface UserService {
@RequestMapping(value = "/users", method = RequestMethod.GET)
List<User> getUsers();
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
User getUser(@PathVariable("id") Integer id);
}
REST Async Client
@RestController
public class APIController {
@Autowired
GroupServiceProxy groupService;
@Autowired
UserServiceProxy userService;
@RequestMapping(method = RequestMethod.GET, value = "/userGroups")
public UserGroup getUserGroups() {
Observable<List<Group>> groups = groupService.getGroupsObservable();
Observable<List<User>> users = userService.getUsersObservable();
Observable<UserGroup> userGroupObservable =
Observable.zip(groups, users, (g, u) -> new UserGroup(u, g));
return userGroupObservable.toList().toBlocking().single().get(0);
}
}
Demo
• Reactive Microservices
• https://github.com/rcandidosilva/reactive-microservices
Outras Alternativas
Perguntas
?
Referências
• http://projects.spring.io/spring-boot/
• http://projects.spring.io/spring-cloud/
• https://netflix.github.io/
• http://www.reactive-streams.org/
• http://www.reactivemanifesto.org/
• https://github.com/reactivemanifesto/website-manifesto/tree/master/public/pdf
• https://projectreactor.io/
• http://reactivex.io/
• http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring-
cloud.html
Muito Obrigado!
@rcandidosilva
rodrigocandido.me

More Related Content

What's hot (20)

PPTX
Microservices Server - MSS Workshop
WSO2
 
PPTX
Introduction to WSO2 Microservices Framework for Java (MSF4J) 2.0
Afkham Azeez
 
PPTX
WSO2 Workshop Sydney 2016 - Microservices
Dassana Wijesekara
 
PDF
Building microservices web application using scala & akka
Binh Nguyen
 
PDF
Docker+java
DPC Consulting Ltd
 
PPTX
WSO2Con 2015-us-introduction-to-mss-v2
Afkham Azeez
 
PDF
Cloud Foundry for Spring Developers
Gunnar Hillert
 
PDF
Tech Talk: DevOps at LeanIX @ Startup Camp Berlin
LeanIX GmbH
 
PDF
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
PDF
Microservices with Spring Cloud, Netflix OSS and Kubernetes
Christian Posta
 
PDF
User authentication and authorizarion in Kubernetes
Neependra Khare
 
PPTX
WSO2ConUS 2015 - Introduction to WSO2 Microservices Server (MSS)
Afkham Azeez
 
PDF
容器革命的「利」與「必」
inwin stack
 
PPTX
Microservices in Azure
Doug Vanderweide
 
PPTX
Glass fish performance tuning tips from the field
Payara
 
PDF
Microservices with Java, Spring Boot and Spring Cloud
Eberhard Wolff
 
PDF
Microservices architecture overview v3
Dmitry Skaredov
 
PDF
Refactor your Java EE application using Microservices and Containers - Arun G...
Codemotion
 
PDF
Microservices and Serverless Computing - OpenWhisk
Vidyasagar Machupalli
 
PPTX
Building microservices with vert.x 3.0
Agraj Mangal
 
Microservices Server - MSS Workshop
WSO2
 
Introduction to WSO2 Microservices Framework for Java (MSF4J) 2.0
Afkham Azeez
 
WSO2 Workshop Sydney 2016 - Microservices
Dassana Wijesekara
 
Building microservices web application using scala & akka
Binh Nguyen
 
Docker+java
DPC Consulting Ltd
 
WSO2Con 2015-us-introduction-to-mss-v2
Afkham Azeez
 
Cloud Foundry for Spring Developers
Gunnar Hillert
 
Tech Talk: DevOps at LeanIX @ Startup Camp Berlin
LeanIX GmbH
 
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
Microservices with Spring Cloud, Netflix OSS and Kubernetes
Christian Posta
 
User authentication and authorizarion in Kubernetes
Neependra Khare
 
WSO2ConUS 2015 - Introduction to WSO2 Microservices Server (MSS)
Afkham Azeez
 
容器革命的「利」與「必」
inwin stack
 
Microservices in Azure
Doug Vanderweide
 
Glass fish performance tuning tips from the field
Payara
 
Microservices with Java, Spring Boot and Spring Cloud
Eberhard Wolff
 
Microservices architecture overview v3
Dmitry Skaredov
 
Refactor your Java EE application using Microservices and Containers - Arun G...
Codemotion
 
Microservices and Serverless Computing - OpenWhisk
Vidyasagar Machupalli
 
Building microservices with vert.x 3.0
Agraj Mangal
 

Viewers also liked (20)

PDF
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
TDC 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
PDF
JavaOne 2014 - Securing RESTful Resources with OAuth2
Rodrigo Cândido da Silva
 
PPTX
Java 8 para o dia a dia
Ricardo Faria
 
PDF
Node.js: 5 razões para começar a utilizar
Filipe Falcão
 
PPT
Monitorando serviços REST com o Application Insights
Renato Groff
 
PPT
Java Básico :: Stream
Wesley R. Bezerra
 
PPTX
Arquitetura JavaScript Escalável da Netflix
Bruno Tavares
 
PPT
Design Patterns
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Unit Testing com Java EE
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Mini-curso Java EE
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Java EE 7 In Action
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
Rodrigo Cândido da Silva
 
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
PDF
Suportando Aplicações Multi-tenancy com Java EE
Rodrigo Cândido da Silva
 
PDF
Batch Processing - Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
JavaOne 2014 - Securing RESTful Resources with OAuth2
Rodrigo Cândido da Silva
 
Java 8 para o dia a dia
Ricardo Faria
 
Node.js: 5 razões para começar a utilizar
Filipe Falcão
 
Monitorando serviços REST com o Application Insights
Renato Groff
 
Java Básico :: Stream
Wesley R. Bezerra
 
Arquitetura JavaScript Escalável da Netflix
Bruno Tavares
 
Design Patterns
Rodrigo Cândido da Silva
 
GUJavaSC - Unit Testing com Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
GUJavaSC - Mini-curso Java EE
Rodrigo Cândido da Silva
 
GUJavaSC - Java EE 7 In Action
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
Suportando Aplicações Multi-tenancy com Java EE
Rodrigo Cândido da Silva
 
Batch Processing - Processamento em Lotes no Mundo Corporativo
Rodrigo Cândido da Silva
 
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
Ad

Similar to GUJavaSC - Criando Micro-serviços Reativos com Java (20)

PPTX
Micro service architecture
uEngine Solutions
 
PPTX
Microservices
SmartBear
 
PDF
Java Microservices_64 Hours_Day wise plan (002).pdf
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
PDF
Java Microservices_64 Hours_Day wise plan (002).pdf
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
PPTX
Application Centric Microservices from Redhat Summit 2015
Ken Owens
 
PPTX
Microservices development{Bangalore meetup}
Amardeep Singh
 
PPTX
2015.04.23 Azure Mobile Services
Marco Parenzan
 
PDF
Made for Mobile - Let Office 365 Power Your Mobile Apps
SPC Adriatics
 
PDF
Full lifecycle of a microservice
Luigi Bennardis
 
PDF
03 monoliths to microservices with java ee and spring boot
Ram Maddali
 
PPTX
Dmitry Petukhov (Provectus): "МИКРОСЕРВИСЫ НА ПРАКТИКЕ. НАЧАЛО."
Provectus
 
PPTX
Building multi tenancy enterprise applications - quick
uEngine Solutions
 
PDF
Surrogate dependencies (in node js) v1.0
Dinis Cruz
 
PDF
Nick Raienko ''Service-oriented GraphQL''
OdessaJS Conf
 
PDF
Easy integration of Bluemix services with your applications
Jack-Junjie Cai
 
PDF
Why and How SmartNews uses SaaS?
Takumi Sakamoto
 
PDF
170215 msa intro
Sonic leigh
 
PPTX
Monoliths to Microservices with Jave EE and Spring Boot
Tiera Fann, MBA
 
PPTX
MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
NGINX, Inc.
 
PPTX
Cloud Powered Mobile Apps with Azure
Ken Cenerelli
 
Micro service architecture
uEngine Solutions
 
Microservices
SmartBear
 
Java Microservices_64 Hours_Day wise plan (002).pdf
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
Java Microservices_64 Hours_Day wise plan (002).pdf
Puneet Kumar Bhatia (MBA, ITIL V3 Certified)
 
Application Centric Microservices from Redhat Summit 2015
Ken Owens
 
Microservices development{Bangalore meetup}
Amardeep Singh
 
2015.04.23 Azure Mobile Services
Marco Parenzan
 
Made for Mobile - Let Office 365 Power Your Mobile Apps
SPC Adriatics
 
Full lifecycle of a microservice
Luigi Bennardis
 
03 monoliths to microservices with java ee and spring boot
Ram Maddali
 
Dmitry Petukhov (Provectus): "МИКРОСЕРВИСЫ НА ПРАКТИКЕ. НАЧАЛО."
Provectus
 
Building multi tenancy enterprise applications - quick
uEngine Solutions
 
Surrogate dependencies (in node js) v1.0
Dinis Cruz
 
Nick Raienko ''Service-oriented GraphQL''
OdessaJS Conf
 
Easy integration of Bluemix services with your applications
Jack-Junjie Cai
 
Why and How SmartNews uses SaaS?
Takumi Sakamoto
 
170215 msa intro
Sonic leigh
 
Monoliths to Microservices with Jave EE and Spring Boot
Tiera Fann, MBA
 
MRA AMA Part 10: Kubernetes and the Microservices Reference Architecture
NGINX, Inc.
 
Cloud Powered Mobile Apps with Azure
Ken Cenerelli
 
Ad

More from Rodrigo Cândido da Silva (16)

PDF
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
PDF
Cloud Native Java EE
Rodrigo Cândido da Silva
 
PDF
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
PDF
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
PDF
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
PDF
Workshop Microservices - Arquitetura Microservices
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
PDF
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
PDF
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
PDF
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
PDF
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
PDF
ConFoo 2015 - Securing RESTful resources with OAuth2
Rodrigo Cândido da Silva
 
PDF
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
Cloud Native Java EE
Rodrigo Cândido da Silva
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Rodrigo Cândido da Silva
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
Workshop Microservices - Arquitetura Microservices
Rodrigo Cândido da Silva
 
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
ConFoo 2015 - Securing RESTful resources with OAuth2
Rodrigo Cândido da Silva
 
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 

Recently uploaded (20)

PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PDF
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
PDF
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PPTX
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
PPTX
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Reverse Engineering of Security Products: Developing an Advanced Microsoft De...
nwbxhhcyjv
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
NLJUG Speaker academy 2025 - first session
Bert Jan Schrijver
 
Kit-Works Team Study_20250627_한달만에만든사내서비스키링(양다윗).pdf
Wonjun Hwang
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
Agentforce World Tour Toronto '25 - Supercharge MuleSoft Development with Mod...
Alexandra N. Martinez
 
Seamless Tech Experiences Showcasing Cross-Platform App Design.pptx
presentifyai
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 

GUJavaSC - Criando Micro-serviços Reativos com Java

  • 1. Criando Micro-serviços Reativos com Java Rodrigo Cândido da Silva @rcandidosilva
  • 2. About Me • Software Architect • http://integritastech.com • JUG Leader do GUJavaSC • http://gujavasc.org • Twitter • @rcandidosilva • Contatos • http://rodrigocandido.me
  • 3. Agenda • Monolito vs. Micro-serviços • Manifesto Reativo • Resiliência • Message-driven • Demo • Perguntas
  • 5. Micro-serviços • Pequenos • Deployment interdependente • Independente de tecnologia • Infra-estrutura separada "Small independent component with well- defined boundaries that’s doing one thing, but doing it well"
  • 7. Resiliência • Como suportar isso com micro-serviços? • Central point of configuration • Service registry and discovery • Routing features • Load balancing • Failover • Monitoring
  • 8. Spring BootSpring Cloud Spring Cloud + Netflix OSS
  • 9. Spring Cloud + Netflix OSS “Casamento perfeito para criação de micro- serviços resilientes“ Gerenciamento de Configuração Spring Cloud Config + Bus Descoberta de Serviços Netflix Eureka Balanceamento de Carga Netflix Ribbon Circuit Breaker Netflix Hystrix + Turbine Proxy Server Netflix Zuul Segurança Spring Cloud Security
  • 13. Netflix Hystrix • Circuit Breaker Pattern
  • 16. Spring Cloud Security Discovery Client Relying Party Resource Server Get an access token & an ID Token (JWT) Use an access token Authorization Server Iden.ty Provider or IDP or OpenID Provider or OP 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
  • 17. Message-Driven • Como suportar isso com micro-serviços? • Comunicação assíncrona • Non blocking I/O • Distribuição • Consistência • Event sourcing • CQRS
  • 18. Reactive Programming • Asynchronous communication and data streams • reactive-streams.org
  • 19. Alternativas Reativas com Java EE JMS EJB 3 Message-Driven Beans Asynchronous Session Beans CDI Events Observers Servlet Asynchronous NIO JAX-RS Async on Server Async on Client WebSocket Async Remote Endpoints Concurrency Utilities
  • 20. Project Reactor • Biblioteca para implementação de non-blocking apps • Interage com Java 8 functional API • Oferece duas composable API reativas • Flux[N] and Mono[0|1] • Suporta escalabilidade in-memory roteando com Bus extensions • Suporte portável para micro-serviços
  • 21. REST Endpoint @RestController public class UserRestController { private static final List<User> users = new ArrayList<>(); static { users.add(new User(1, "Rodrigo", "C", "da Silva")); users.add(new User(2, "Israel", "B", "Rodriguez")); users.add(new User(3, "Bruno", "", "Souza")); users.add(new User(4, "Edson", "", "Yanaga")); } @RequestMapping(method = RequestMethod.GET, value = "/users") public List<User> getUsers() { return users; } @RequestMapping(method = RequestMethod.GET, value = "/user/{id}") public User getUser(@PathVariable("id") Integer id) { return users.stream().filter(g -> g.getId() == id) .collect(Collectors.toList()).get(0); } }
  • 22. REST Proxy @Component public class UserServiceProxy { @Autowired UserService service; @HystrixCommand(fallbackMethod = "defaultUsersObservable") public Observable<List<User>> getUsersObservable() { return new ObservableResult<List<User>>() { @Override public List<User> invoke() { return service.getUsers(); } }; } public Observable<User> defaultUsersObservable() { return null; } } @FeignClient("USER-SERVICE") public interface UserService { @RequestMapping(value = "/users", method = RequestMethod.GET) List<User> getUsers(); @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) User getUser(@PathVariable("id") Integer id); }
  • 23. REST Async Client @RestController public class APIController { @Autowired GroupServiceProxy groupService; @Autowired UserServiceProxy userService; @RequestMapping(method = RequestMethod.GET, value = "/userGroups") public UserGroup getUserGroups() { Observable<List<Group>> groups = groupService.getGroupsObservable(); Observable<List<User>> users = userService.getUsersObservable(); Observable<UserGroup> userGroupObservable = Observable.zip(groups, users, (g, u) -> new UserGroup(u, g)); return userGroupObservable.toList().toBlocking().single().get(0); } }
  • 24. Demo • Reactive Microservices • https://github.com/rcandidosilva/reactive-microservices
  • 27. Referências • http://projects.spring.io/spring-boot/ • http://projects.spring.io/spring-cloud/ • https://netflix.github.io/ • http://www.reactive-streams.org/ • http://www.reactivemanifesto.org/ • https://github.com/reactivemanifesto/website-manifesto/tree/master/public/pdf • https://projectreactor.io/ • http://reactivex.io/ • http://www.kennybastani.com/2016/04/event-sourcing-microservices-spring- cloud.html