SlideShare a Scribd company logo
1 of 53
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
19th May 2018
Alberto Salazar
● Speaker, Java Developer, #Community, Author
● Auth0 Ambassador
● Java User Group Leader, JCP Member
● Working 17 years with monolithic
● Founder and CTO: AdvanceLatam &
Cloudbanco
@EcuadorJUG
@Auth0Ambassador
www.advlatam.com www.cloudbanco.com www.ecuadorjug.org
lasalazarr
@betoSalazar
● SCJP, SCBCD, Oracle Certified Master Java
EE5 Enterprise Architect, SOA Professional,
Apache AMQ & Camel advanced developer …..
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
asalazar@advlatam.com
@betoSalazar
THANK YOU
Auth0 Ambassadors.
Helping the developer community make the
internet safer.

More Related Content

Similar to 2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia

SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptxSH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
MongoDB
 
SignalR Intro + WPDev integration @ Codetock
SignalR Intro + WPDev integration @ CodetockSignalR Intro + WPDev integration @ Codetock
SignalR Intro + WPDev integration @ Codetock
Sam Basu
 

Similar to 2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia (20)

Oracle Developer Tour Latam Nowadays Architecture Trends, from Monolith to Mi...
Oracle Developer Tour Latam Nowadays Architecture Trends, from Monolith to Mi...Oracle Developer Tour Latam Nowadays Architecture Trends, from Monolith to Mi...
Oracle Developer Tour Latam Nowadays Architecture Trends, from Monolith to Mi...
 
ES~Conference Mexico Nowadays Architecture Trends, from Monolith to Microserv...
ES~Conference Mexico Nowadays Architecture Trends, from Monolith to Microserv...ES~Conference Mexico Nowadays Architecture Trends, from Monolith to Microserv...
ES~Conference Mexico Nowadays Architecture Trends, from Monolith to Microserv...
 
Jbcnconf Nowadays Architecture Trends, from Monolith to Microservices and Ser...
Jbcnconf Nowadays Architecture Trends, from Monolith to Microservices and Ser...Jbcnconf Nowadays Architecture Trends, from Monolith to Microservices and Ser...
Jbcnconf Nowadays Architecture Trends, from Monolith to Microservices and Ser...
 
Oracle Code Javaday Sao Paulo Nowadays Architecture Trends, from Monolith to ...
Oracle Code Javaday Sao Paulo Nowadays Architecture Trends, from Monolith to ...Oracle Code Javaday Sao Paulo Nowadays Architecture Trends, from Monolith to ...
Oracle Code Javaday Sao Paulo Nowadays Architecture Trends, from Monolith to ...
 
Voxxed days cluj-napoca Nowadays architecture trends alberto_salazarv2
Voxxed days cluj-napoca Nowadays architecture trends alberto_salazarv2Voxxed days cluj-napoca Nowadays architecture trends alberto_salazarv2
Voxxed days cluj-napoca Nowadays architecture trends alberto_salazarv2
 
Rocking the microservice world with Helidon-LAOUCTour2023.pdf
Rocking the microservice world with Helidon-LAOUCTour2023.pdfRocking the microservice world with Helidon-LAOUCTour2023.pdf
Rocking the microservice world with Helidon-LAOUCTour2023.pdf
 
Sail In The Cloud
Sail In The CloudSail In The Cloud
Sail In The Cloud
 
Js foo - Sept 8 upload
Js foo - Sept 8 uploadJs foo - Sept 8 upload
Js foo - Sept 8 upload
 
DEVBCN_Jakarta EE! The future of enterprise application behind the myths. _Al...
DEVBCN_Jakarta EE! The future of enterprise application behind the myths.
_Al...DEVBCN_Jakarta EE! The future of enterprise application behind the myths.
_Al...
DEVBCN_Jakarta EE! The future of enterprise application behind the myths. _Al...
 
Red Hat Agile integration workshop - Atlanta
Red Hat Agile integration workshop - AtlantaRed Hat Agile integration workshop - Atlanta
Red Hat Agile integration workshop - Atlanta
 
Agile integration workshop Atlanta
Agile integration workshop   AtlantaAgile integration workshop   Atlanta
Agile integration workshop Atlanta
 
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech TalkCloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
Cloud-Native Modernization or Death? A false dichotomy. | DevNation Tech Talk
 
KUBEBOOT - SPRING BOOT DEPLOYMENT ON KUBERNETES
KUBEBOOT - SPRING BOOT DEPLOYMENT ON KUBERNETESKUBEBOOT - SPRING BOOT DEPLOYMENT ON KUBERNETES
KUBEBOOT - SPRING BOOT DEPLOYMENT ON KUBERNETES
 
(java2days) Is the Future of Java Cloudy?
(java2days) Is the Future of Java Cloudy?(java2days) Is the Future of Java Cloudy?
(java2days) Is the Future of Java Cloudy?
 
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptxSH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
SH 1 - SES 4 - Microservices - Andrew Morgan TLV.pptx
 
[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』
[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』
[db tech showcase Tokyo 2018] #dbts2018 #B33 『DBA 18.0 - Life after 18c』
 
SignalR Intro + WPDev integration @ Codetock
SignalR Intro + WPDev integration @ CodetockSignalR Intro + WPDev integration @ Codetock
SignalR Intro + WPDev integration @ Codetock
 
FEVR - Micro Frontend
FEVR - Micro FrontendFEVR - Micro Frontend
FEVR - Micro Frontend
 
How to build a SaaS solution in 60 days
How to build a SaaS solution in 60 daysHow to build a SaaS solution in 60 days
How to build a SaaS solution in 60 days
 
Stay productive while slicing up the monolith
Stay productive while slicing up the monolithStay productive while slicing up the monolith
Stay productive while slicing up the monolith
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 

Recently uploaded (20)

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 

2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia

  • 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 19th May 2018
  • 2. Alberto Salazar ● Speaker, Java Developer, #Community, Author ● Auth0 Ambassador ● Java User Group Leader, JCP Member ● Working 17 years with monolithic ● Founder and CTO: AdvanceLatam & Cloudbanco @EcuadorJUG @Auth0Ambassador www.advlatam.com www.cloudbanco.com www.ecuadorjug.org lasalazarr @betoSalazar ● SCJP, SCBCD, Oracle Certified Master Java EE5 Enterprise Architect, SOA Professional, Apache AMQ & Camel advanced developer …..
  • 3. Legacy: Is our monolithic @betoSalazar Source: 97 Things Every Software Architect Should Know
  • 4. Legacy: How it looks after 10 years of code @betoSalazar
  • 5. 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
  • 6. 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
  • 7. asalazar@advlatam.com @betoSalazar The motivation to migrate from Monolith to Microservices
  • 9. 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….
  • 10. 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.
  • 12. 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
  • 13. asalazar@advlatam.com @betoSalazar The fact - 10 years of code The Monolithic
  • 14. Legacy: Is our monolithic @betoSalazar
  • 15. The Monolith @betoSalazar How it looks http://microservices.io/patterns/monolithic.html
  • 16. 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
  • 17. How start this legacy @betoSalazar 1 Year of code Always the goal was to keep the modularization
  • 18. Team work on the legacy @betoSalazar 5 Years of code Modularization ?
  • 19. Really ? @betoSalazar 10 Years of code Modular WTF
  • 20. 10 Years of code @betoSalazar OMG
  • 21. 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
  • 22. asalazar@advlatam.com @betoSalazar The path - Tips, tricks, pros , cons Microservices
  • 23. The Monolith to Microservices @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 ! Split the 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 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
  • 27. @betoSalazar Split the frontend from the backend JSF Controller Code Call the Facade The path -> Split the frontend from the backend
  • 28. @betoSalazar Split the frontend from the backend Facade Code Call the Business Logic The path -> Split the frontend from the backend
  • 29. @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
  • 30. @betoSalazar Split the frontend from the backend Use Camel Routes Request - reply Call the Processor The consumer
  • 31. @betoSalazar The consumer Split the frontend 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 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
  • 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 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
  • 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 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
  • 36. @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
  • 38. @betoSalazar https://vertx.io/docs/vertx-core/java/ Vert.x The path -> Split the frontend from the backend Rest API
  • 39. @betoSalazar https://javaee.github.io/tutorial/jaxrs003.html JAX-RS JEE 8 The path -> 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
  • 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 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
  • 45. @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
  • 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)
  • 49. @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.
  • 50. @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
  • 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
  • 53. asalazar@advlatam.com @betoSalazar THANK YOU Auth0 Ambassadors. Helping the developer community make the internet safer.