Diamond Application Development Crafting Solutions with Precision
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
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
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….
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
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 ?
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
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
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
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
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
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