asalazar@advlatam.com
@betoSalazar
Part I - Second Edition: The Journey
How to Handle the Complexity
of Migrate to Microservices from Monolithic Ten year
Alberto Salazar,
CTO Advance Latam,
Auth0 Ambassador
21th June 2018
Alberto Salazar
● Speaker, Java Consultant, #Community
● Auth0 Ambassador
● Author -> new challenge
● Java User Group Leader, JCP Member
● Working 17 years with monolithic
● Founder and CTO:
AdvanceLatam & Cloudbanco
@betoSalazar
@EcuadorJUG
@Auth0Ambassador
www.advlatam.com www.cloudbanco.com www.ecuadorjug.org
www.javaday.ec
Legacy: Is our monolithic
@betoSalazar
Source: 97 Things Every Software Architect Should Know
Legacy: How it looks after 10 years of code
@betoSalazar
The journey
● The evolution of 10 years of code on Enterprise App
● Why to move from Monolith to Microservices
● The fact - 10 years of code
● The path - Tips, tricks, pros & cons of Microservices
● Conclusions
@betoSalazar
The evolution of more than 10 years of code
J2EE , JEE
App Server
or
Apache Felix OSGI
Apache Karaf
SOA
Industry approach
ESB
BPM
BAM
(-) external influence
Evolution
Frontend:
Html 5 Css3
Mobile
Split the monster
Microservices
the beginning
Microservices
Rest End points
Vert.x | Spring boot |
Micro-profile |
JEE -> Jakarta EE
NodeJS, Angular,
React, Native,
VueJS………………
……………………….
Devops
Docker
Kubernetes
Istio
Serverless
The vision behind the scenes
@betoSalazar
asalazar@advlatam.com
@betoSalazar
The motivation to migrate
from Monolith to Microservices
Microservices
@betoSalazar
Microservices ?
@betoSalazar
The buzz word
Microservices is the architectural approach that everybody talks about and everybody wants it,
but be prepare to manage a distributed system….
The Goal
@betoSalazar
VELOCITY
TIME
TO MARKET
The goal that organizations need is to increasing velocity & agility;

Get into production as soon as posible;

Deploy new features as soon as posible.
The journey
@betoSalazar
The reasons of this talk
@betoSalazar
The plan of move forward (Microservices -> cloud -> serverless ?)
Everybody are talking about the result (microservices architectural style)
but just a few are showing the painpath
asalazar@advlatam.com
@betoSalazar
The fact - 10 years of code
The Monolithic
Legacy: Is our monolithic
@betoSalazar
The Monolith
@betoSalazar
How it looks
http://microservices.io/patterns/monolithic.html
The Monolith
@betoSalazar
Characteristics
! Attachment to the environment(language, platform & OS)
! Single logical executable, deploy everything at once or nothing at all
! Bottlenecks and Failure of part == failure of whole
! Take months even years getting into production
! Centralized authority slows the delivery process (DBA, OPS, QA)
! Coordinated releases are hard, because brings many changes
together from different teams
How start this legacy
@betoSalazar
1 Year of code
Always the goal was to keep the modularization
Team work on the legacy
@betoSalazar
5 Years of code
Modularization ?
Really ?
@betoSalazar
10 Years of code
Modular WTF
10 Years of code
@betoSalazar
OMG
Migrate several years of code, It will be Easy ?
@betoSalazar
The challenge
! > 2MM lines of highly coupled code
! Build one microservice is easy, but what
about a complete microservice architecture
based on 2MM lines of code
! Time to delivery features are between: 6 to
12 months & project overhead $$
! Working on production environment for
several years
asalazar@advlatam.com
@betoSalazar
The path - Tips, tricks, pros , cons
Microservices
The Monolith to Microservices
@betoSalazar
How it looks
http://microservices.io/patterns/monolithic.html http://microservices.io/patterns/microservices.html
Microservices
@betoSalazar
Characteristics
! Deployable, executable & scaled independently
! Smaller code modules are easier to understand
! High cohesion, low coupling
! Failure is isolated (Fail one part of the system)
! Independent Teams (decide their own
architecture)
! Polyglot “Plus”
https://martinfowler.com/articles/microservices.html
https://martinfowler.com/bliki/MicroservicePrerequisites.html
The path
@betoSalazar
Microservices
! Split the frontend from the backend & keep
the centralized data
! Secure your API
! Containers, logs, monitoring
! Split the data
! Don’t forget the frontend
JEE application server
The path -> Split the frontend from the backend
@betoSalazar
The Monolith
Database
JEE application server
theApp.ear
MODULE1.war
MODULE1-JS.jar
MODULE2.war
MODULE3.war
css.war
MODULE4.war
businesslogic.jar
businesslogic.jar
businesslogic.jar
businesslogic.jar
@betoSalazar
Split the frontend from the backend
JSF Controller Code
Call the Facade
The path -> Split the frontend from the backend
@betoSalazar
Split the frontend from the backend
Facade Code
Call the Business
Logic
The path -> Split the frontend from the backend
@betoSalazar
The communication
JEE application server
theApp-backend.ear
businesslogi
businesslogi
businesslogibusinesslogic.jar
JEE application server
theApp.ear
MODULE1.war
MODULE1-JS.jar
MODULE2.war
MODULE3.war
css.war
MODULE4.war
Database
Message
Queue
Apache ActiveMQ
RabbitMQ
Apache Kafka……
http://activemq.apache.org
https://www.rabbitmq.com
https://kafka.apache.org
producer.jar
http://camel.apache.org/mdc-logging.html
consumer.jar
The path -> Split the frontend from the backend
@betoSalazar
Split the frontend from the backend
Use Camel Routes
Request - reply
Call the Processor
The consumer
@betoSalazar
The consumer
Split the frontend from the backend
Camel Processor Code
Call the Facade
@betoSalazar
JEE application server
theApp.ear
MODULE1.war
MODULE1-JS.jar
MODULE2.war
MODULE3.war
css.war
MODULE4.war
Database
Message
Queue
producer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
Split the backend
The path -> Split the frontend from the backend
@betoSalazar
Split the backend
https://projects.spring.io/spring-boot/
https://microprofile.io/
https://vertx.io/
https://www.docker.com/
https://github.com/fabric8io/docker-maven-plugin
https://github.com/spotify/docker-maven-plugin
Spring boot
install just
what you need
in a Docker
Container
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
The path -> Split the frontend from the backend
@betoSalazar
The path
Logging, trace & Monitoring
http://www.baeldung.com/mdc-in-log4j-2-logback
https://www.elastic.co/products/elasticsearch
https://www.elastic.co/products/logstash
https://www.elastic.co/products/kibana
logstash
1) Use Mapped Diagnostic Context (MDC)
Enrich log files
2) Introduce a correlationId
3) Collect the logs
4) Search by rest API or use Kibana
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
businesslogic.jar
consumer.jar
The path -> Split the frontend from the backend
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
@betoSalazar
JEE application server
theApp.ear
MODULE1.war
MODULE1-JS.jar
MODULE2.war
MODULE3.war
css.war
MODULE4.war
Database
Message
Queue
producer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jar
JEE application server
theApp-backend.ear
businesslogic.jar
consumer.jarRest API
rest-client.jar
Rest-api-layer
Rest-api-layer
Rest-api-layer
Rest-api-layer
Rest-api-layer
The path -> Split the frontend from the backend
@betoSalazar
https://docs.spring.io/spring/docs/current/spring-framework-
reference/web.html#mvc-introduction
Spring MVC
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
The path -> Split the frontend from the backend
Rest API
@betoSalazar
https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux
Spring Webflux
The path -> Split the frontend from the backend
Rest API
@betoSalazar
https://vertx.io/docs/vertx-core/java/
Vert.x
The path -> Split the frontend from the backend
Rest API
@betoSalazar
https://javaee.github.io/tutorial/jaxrs003.html
JAX-RS JEE 8
The path -> Split the frontend from the backend
Rest API
@betoSalazar
The path -> Secure your API
POST bank.com/api/v1/accouts
POST bank.com/api/v1/accouts
Secure your API
JWT
JSON WEB TOKEN
&
Authorization Server
https://jwt.io/
https://auth0.com
https://auth0.com/blog/implementing-jwt-authentication-on-
spring-boot/
https://auth0.com/blog/securing-spring-boot-with-jwts/
fat jar
api-gateway.jar
Services
api rest
logstash
Database
Login
Angular nodejs
Transaction
Angular nodejs
Module n
Angular nodejs
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Rest-api-layer
Rest-api-layer
Rest-api-layer
Rest-api-layer
Rest-api-layer
Rest-api-layer
@betoSalazar
https://auth0.com/blog/securing-spring-boot-with-jwts/
JWT + + Springboot + Spring Security
The path -> Secure your API
@betoSalazar
https://medium.com/@ryanchenkie_40935/angular-authentication-using-route-guards-bf7a4ca13ae3
https://github.com/auth0/angular2-jwt
JWT + AuthGuard with AngularSecure
App
The path -> Secure your Application
@betoSalazar
The path -> Discovery Services
https://hazelcast.org/
Discovery services to inspect or rely on the contents of any named IMap
Hazelcast
Discovery Services via IMDG
backbone of your Microservices architecture
POST bank.com/api/v1/accouts
Rest endpoints & API Gateway
fat jar
api-gateway.jar
Services
api rest
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
@betoSalazar
The path
Split de database
https://flywaydb.org/
https://developers.redhat.com/promotions/migrating-
to-microservice-databases/
- Consistency Models:

Strong vs Eventual consistency

- Materalized views

- ETL Tools
Automate your database
migration
fat jar
api-gateway.jar
Services
api rest
logstash
POST bank.com/api/v1/accouts
POST bank.com/api/v1/accouts
Login
Angular nodejs
Transaction
Angular nodejs
Module n
Angular nodejs
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
@betoSalazar
The path
Don’t forget the frontend & the agility
https://jwt.io/
https://nodejs.org/es/
https://facebook.github.io/react/
https://angular.io/
https://facebook.github.io/react-native/
fat jar
api-gateway.jar
Services
api rest
POST bank.com/api/v1/accouts
POST bank.com/api/v1/accouts
logstash
Login
Angular nodejs
Transaction
Angular nodejs
Module n
Angular nodejs
Osgi container
engine-orchestrator.jar
Osgi container
dynamic-camel-routes.jar
fat jar
batch.jar
fat jar
services.jar
fat jar
business-module1.jar
fat jar
business-module-n.jar
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
Service
some api
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
businesslogic.jar
Rest-api-layer
JWT
JSON WEB TOKEN
&
Authorization Server
Microservices Architecture
@betoSalazar
Containers - Orchestrators - Cloud
@betoSalazar
Istio: Service Mesh
Containers (Docker) ->
Manage the same code + environment in diferente stages
Orchestrators (Kubernetes, Docker Swarm, Mesos) ->
We need to orchestrated our containers
Cloud (eg. Oracle Cloud, Google Cloud, AWS, Azure, Bluemix)
asalazar@advlatam.com
@betoSalazar
Summary &
Code blueprints repositories
@betoSalazar
The conclusion
Microservices Architecture Losses
! Transactions
! Single data repository
! Better problems solver needed (Developers /
architects)
! the system and services have to deal with
network communications, failures, rebalances,
splits.
@betoSalazar
The conclusion
Recommendations
Design your application modular (either monolith, OSGi or microservices)
Continuously refactor your modules or microservices to achieve optimal boundaries
Monolithic apps only look simple from the outside, but you just open the box
Care about logs, monitoring and always use a CORRELATIONID and MDC (Mapped Diagnostic Context)
We need to deal with service load balance, monitoring, security
@betoSalazar
Recommendations
Use Docker + Kubernates + Istio
Automate the deployment and delivery process -> CI & CD -> DEVOPS Culture
Design for failover, Service load balancing and automatic scaling, data Separation,
Integrity, Performance
Use lightweight frameworks or java containers (Karaf, Vert.x, Spring boot, Microprofile
(Payara, WildFly Swarm, OpenLiberty, TomEE))
Secure your APIs - JWT json web token, Json Web Signature, Json Web Encryption
The conclusion
asalazar@advlatam.com
@betoSalazar
code blueprints:
https://github.com/lasalazarr/fastdev
https://github.com/lasalazarr/guide-monolithic-to-
microservices
@betoSalazar
#Community
Quito - Ecuador
September 8th
https://www.javaday.ec
asalazar@advlatam.com
@betoSalazar
THANK YOU
Auth0 Ambassadors.
Helping the developer community make the
internet safer.

Oracle Code Javaday Sao Paulo Monolith_to Microservices

  • 1.
    asalazar@advlatam.com @betoSalazar Part I -Second Edition: The Journey How to Handle the Complexity of Migrate to Microservices from Monolithic Ten year Alberto Salazar, CTO Advance Latam, Auth0 Ambassador 21th June 2018
  • 2.
    Alberto Salazar ● Speaker,Java Consultant, #Community ● Auth0 Ambassador ● Author -> new challenge ● Java User Group Leader, JCP Member ● Working 17 years with monolithic ● Founder and CTO: AdvanceLatam & Cloudbanco @betoSalazar @EcuadorJUG @Auth0Ambassador www.advlatam.com www.cloudbanco.com www.ecuadorjug.org www.javaday.ec
  • 3.
    Legacy: Is ourmonolithic @betoSalazar Source: 97 Things Every Software Architect Should Know
  • 4.
    Legacy: How itlooks after 10 years of code @betoSalazar
  • 5.
    The journey ● Theevolution of 10 years of code on Enterprise App ● Why to move from Monolith to Microservices ● The fact - 10 years of code ● The path - Tips, tricks, pros & cons of Microservices ● Conclusions @betoSalazar
  • 6.
    The evolution ofmore than 10 years of code J2EE , JEE App Server or Apache Felix OSGI Apache Karaf SOA Industry approach ESB BPM BAM (-) external influence Evolution Frontend: Html 5 Css3 Mobile Split the monster Microservices the beginning Microservices Rest End points Vert.x | Spring boot | Micro-profile | JEE -> Jakarta EE NodeJS, Angular, React, Native, VueJS……………… ………………………. Devops Docker Kubernetes Istio Serverless The vision behind the scenes @betoSalazar
  • 7.
    asalazar@advlatam.com @betoSalazar The motivation tomigrate from Monolith to Microservices
  • 8.
  • 9.
    Microservices ? @betoSalazar The buzzword Microservices is the architectural approach that everybody talks about and everybody wants it, but be prepare to manage a distributed system….
  • 10.
    The Goal @betoSalazar VELOCITY TIME TO MARKET Thegoal that organizations need is to increasing velocity & agility; Get into production as soon as posible; Deploy new features as soon as posible.
  • 11.
  • 12.
    The reasons ofthis talk @betoSalazar The plan of move forward (Microservices -> cloud -> serverless ?) Everybody are talking about the result (microservices architectural style) but just a few are showing the painpath
  • 13.
    asalazar@advlatam.com @betoSalazar The fact -10 years of code The Monolithic
  • 14.
    Legacy: Is ourmonolithic @betoSalazar
  • 15.
    The Monolith @betoSalazar How itlooks http://microservices.io/patterns/monolithic.html
  • 16.
    The Monolith @betoSalazar Characteristics ! Attachmentto the environment(language, platform & OS) ! Single logical executable, deploy everything at once or nothing at all ! Bottlenecks and Failure of part == failure of whole ! Take months even years getting into production ! Centralized authority slows the delivery process (DBA, OPS, QA) ! Coordinated releases are hard, because brings many changes together from different teams
  • 17.
    How start thislegacy @betoSalazar 1 Year of code Always the goal was to keep the modularization
  • 18.
    Team work onthe legacy @betoSalazar 5 Years of code Modularization ?
  • 19.
    Really ? @betoSalazar 10 Yearsof code Modular WTF
  • 20.
    10 Years ofcode @betoSalazar OMG
  • 21.
    Migrate several yearsof code, It will be Easy ? @betoSalazar The challenge ! > 2MM lines of highly coupled code ! Build one microservice is easy, but what about a complete microservice architecture based on 2MM lines of code ! Time to delivery features are between: 6 to 12 months & project overhead $$ ! Working on production environment for several years
  • 22.
    asalazar@advlatam.com @betoSalazar The path -Tips, tricks, pros , cons Microservices
  • 23.
    The Monolith toMicroservices @betoSalazar How it looks http://microservices.io/patterns/monolithic.html http://microservices.io/patterns/microservices.html
  • 24.
    Microservices @betoSalazar Characteristics ! Deployable, executable& scaled independently ! Smaller code modules are easier to understand ! High cohesion, low coupling ! Failure is isolated (Fail one part of the system) ! Independent Teams (decide their own architecture) ! Polyglot “Plus” https://martinfowler.com/articles/microservices.html https://martinfowler.com/bliki/MicroservicePrerequisites.html
  • 25.
    The path @betoSalazar Microservices ! Splitthe frontend from the backend & keep the centralized data ! Secure your API ! Containers, logs, monitoring ! Split the data ! Don’t forget the frontend
  • 26.
    JEE application server Thepath -> Split the frontend from the backend @betoSalazar The Monolith Database JEE application server theApp.ear MODULE1.war MODULE1-JS.jar MODULE2.war MODULE3.war css.war MODULE4.war businesslogic.jar businesslogic.jar businesslogic.jar businesslogic.jar
  • 27.
    @betoSalazar Split the frontendfrom the backend JSF Controller Code Call the Facade The path -> Split the frontend from the backend
  • 28.
    @betoSalazar Split the frontendfrom the backend Facade Code Call the Business Logic The path -> Split the frontend from the backend
  • 29.
    @betoSalazar The communication JEE applicationserver theApp-backend.ear businesslogi businesslogi businesslogibusinesslogic.jar JEE application server theApp.ear MODULE1.war MODULE1-JS.jar MODULE2.war MODULE3.war css.war MODULE4.war Database Message Queue Apache ActiveMQ RabbitMQ Apache Kafka…… http://activemq.apache.org https://www.rabbitmq.com https://kafka.apache.org producer.jar http://camel.apache.org/mdc-logging.html consumer.jar The path -> Split the frontend from the backend
  • 30.
    @betoSalazar Split the frontendfrom the backend Use Camel Routes Request - reply Call the Processor The consumer
  • 31.
    @betoSalazar The consumer Split thefrontend from the backend Camel Processor Code Call the Facade
  • 32.
    @betoSalazar JEE application server theApp.ear MODULE1.war MODULE1-JS.jar MODULE2.war MODULE3.war css.war MODULE4.war Database Message Queue producer.jar JEEapplication server theApp-backend.ear businesslogic.jar consumer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jar Split the backend The path -> Split the frontend from the backend
  • 33.
    @betoSalazar Split the backend https://projects.spring.io/spring-boot/ https://microprofile.io/ https://vertx.io/ https://www.docker.com/ https://github.com/fabric8io/docker-maven-plugin https://github.com/spotify/docker-maven-plugin Springboot install just what you need in a Docker Container Osgi container engine-orchestrator.jar Osgi container dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar The path -> Split the frontend from the backend
  • 34.
    @betoSalazar The path Logging, trace& Monitoring http://www.baeldung.com/mdc-in-log4j-2-logback https://www.elastic.co/products/elasticsearch https://www.elastic.co/products/logstash https://www.elastic.co/products/kibana logstash 1) Use Mapped Diagnostic Context (MDC) Enrich log files 2) Introduce a correlationId 3) Collect the logs 4) Search by rest API or use Kibana Osgi container engine-orchestrator.jar Osgi container dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar businesslogic.jar consumer.jar The path -> Split the frontend from the backend
  • 35.
    JEE application server theApp-backend.ear businesslogic.jar consumer.jar JEEapplication server theApp-backend.ear businesslogic.jar consumer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jar @betoSalazar JEE application server theApp.ear MODULE1.war MODULE1-JS.jar MODULE2.war MODULE3.war css.war MODULE4.war Database Message Queue producer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jar JEE application server theApp-backend.ear businesslogic.jar consumer.jarRest API rest-client.jar Rest-api-layer Rest-api-layer Rest-api-layer Rest-api-layer Rest-api-layer The path -> Split the frontend from the backend
  • 36.
    @betoSalazar https://docs.spring.io/spring/docs/current/spring-framework- reference/web.html#mvc-introduction Spring MVC Osgi container engine-orchestrator.jar Osgicontainer dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer The path -> Split the frontend from the backend Rest API
  • 37.
  • 38.
  • 39.
    @betoSalazar https://javaee.github.io/tutorial/jaxrs003.html JAX-RS JEE 8 Thepath -> Split the frontend from the backend Rest API
  • 40.
    @betoSalazar The path ->Secure your API POST bank.com/api/v1/accouts POST bank.com/api/v1/accouts Secure your API JWT JSON WEB TOKEN & Authorization Server https://jwt.io/ https://auth0.com https://auth0.com/blog/implementing-jwt-authentication-on- spring-boot/ https://auth0.com/blog/securing-spring-boot-with-jwts/ fat jar api-gateway.jar Services api rest logstash Database Login Angular nodejs Transaction Angular nodejs Module n Angular nodejs Osgi container engine-orchestrator.jar Osgi container dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api Rest-api-layer Rest-api-layer Rest-api-layer Rest-api-layer Rest-api-layer Rest-api-layer
  • 41.
    @betoSalazar https://auth0.com/blog/securing-spring-boot-with-jwts/ JWT + +Springboot + Spring Security The path -> Secure your API
  • 42.
  • 43.
    @betoSalazar The path ->Discovery Services https://hazelcast.org/ Discovery services to inspect or rely on the contents of any named IMap Hazelcast Discovery Services via IMDG backbone of your Microservices architecture POST bank.com/api/v1/accouts Rest endpoints & API Gateway fat jar api-gateway.jar Services api rest Osgi container engine-orchestrator.jar Osgi container dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer
  • 44.
    @betoSalazar The path Split dedatabase https://flywaydb.org/ https://developers.redhat.com/promotions/migrating- to-microservice-databases/ - Consistency Models: Strong vs Eventual consistency - Materalized views - ETL Tools Automate your database migration fat jar api-gateway.jar Services api rest logstash POST bank.com/api/v1/accouts POST bank.com/api/v1/accouts Login Angular nodejs Transaction Angular nodejs Module n Angular nodejs Osgi container engine-orchestrator.jar Osgi container dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer
  • 45.
    @betoSalazar The path Don’t forgetthe frontend & the agility https://jwt.io/ https://nodejs.org/es/ https://facebook.github.io/react/ https://angular.io/ https://facebook.github.io/react-native/ fat jar api-gateway.jar Services api rest POST bank.com/api/v1/accouts POST bank.com/api/v1/accouts logstash Login Angular nodejs Transaction Angular nodejs Module n Angular nodejs Osgi container engine-orchestrator.jar Osgi container dynamic-camel-routes.jar fat jar batch.jar fat jar services.jar fat jar business-module1.jar fat jar business-module-n.jar Service some api Service some api Service some api Service some api Service some api Service some api businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer businesslogic.jar Rest-api-layer JWT JSON WEB TOKEN & Authorization Server
  • 46.
  • 47.
    Containers - Orchestrators- Cloud @betoSalazar Istio: Service Mesh Containers (Docker) -> Manage the same code + environment in diferente stages Orchestrators (Kubernetes, Docker Swarm, Mesos) -> We need to orchestrated our containers Cloud (eg. Oracle Cloud, Google Cloud, AWS, Azure, Bluemix)
  • 48.
  • 49.
    @betoSalazar The conclusion Microservices ArchitectureLosses ! Transactions ! Single data repository ! Better problems solver needed (Developers / architects) ! the system and services have to deal with network communications, failures, rebalances, splits.
  • 50.
    @betoSalazar The conclusion Recommendations Design yourapplication modular (either monolith, OSGi or microservices) Continuously refactor your modules or microservices to achieve optimal boundaries Monolithic apps only look simple from the outside, but you just open the box Care about logs, monitoring and always use a CORRELATIONID and MDC (Mapped Diagnostic Context) We need to deal with service load balance, monitoring, security
  • 51.
    @betoSalazar Recommendations Use Docker +Kubernates + Istio Automate the deployment and delivery process -> CI & CD -> DEVOPS Culture Design for failover, Service load balancing and automatic scaling, data Separation, Integrity, Performance Use lightweight frameworks or java containers (Karaf, Vert.x, Spring boot, Microprofile (Payara, WildFly Swarm, OpenLiberty, TomEE)) Secure your APIs - JWT json web token, Json Web Signature, Json Web Encryption The conclusion
  • 52.
  • 53.
  • 54.
    asalazar@advlatam.com @betoSalazar THANK YOU Auth0 Ambassadors. Helpingthe developer community make the internet safer.