Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia

265 views

Published on

COMO MANEJAR LA COMPLEJIDAD DE MIGRAR MAS DE 10 AÑOS DE CÓDIGO DE ARQUITECTURA MONOLÍTICA A MICROSERVICIOS

Published in: Software

2018 MONOLITICH TO MICROSERVICES - Conferencia Javeros colombia

  1. 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. 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. 3. Legacy: Is our monolithic @betoSalazar Source: 97 Things Every Software Architect Should Know
  4. 4. Legacy: How it looks after 10 years of code @betoSalazar
  5. 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. 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. 7. asalazar@advlatam.com @betoSalazar The motivation to migrate from Monolith to Microservices
  8. 8. Microservices @betoSalazar
  9. 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. 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.
  11. 11. The journey @betoSalazar
  12. 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. 13. asalazar@advlatam.com @betoSalazar The fact - 10 years of code The Monolithic
  14. 14. Legacy: Is our monolithic @betoSalazar
  15. 15. The Monolith @betoSalazar How it looks http://microservices.io/patterns/monolithic.html
  16. 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. 17. How start this legacy @betoSalazar 1 Year of code Always the goal was to keep the modularization
  18. 18. Team work on the legacy @betoSalazar 5 Years of code Modularization ?
  19. 19. Really ? @betoSalazar 10 Years of code Modular WTF
  20. 20. 10 Years of code @betoSalazar OMG
  21. 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. 22. asalazar@advlatam.com @betoSalazar The path - Tips, tricks, pros , cons Microservices
  23. 23. The Monolith to Microservices @betoSalazar How it looks http://microservices.io/patterns/monolithic.html http://microservices.io/patterns/microservices.html
  24. 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. 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. 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. 27. @betoSalazar Split the frontend from the backend JSF Controller Code Call the Facade The path -> Split the frontend from the backend
  28. 28. @betoSalazar Split the frontend from the backend Facade Code Call the Business Logic The path -> Split the frontend from the backend
  29. 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. 30. @betoSalazar Split the frontend from the backend Use Camel Routes Request - reply Call the Processor The consumer
  31. 31. @betoSalazar The consumer Split the frontend from the backend Camel Processor Code Call the Facade
  32. 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. 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. 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. 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. 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
  37. 37. @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
  38. 38. @betoSalazar https://vertx.io/docs/vertx-core/java/ Vert.x The path -> Split the frontend from the backend Rest API
  39. 39. @betoSalazar https://javaee.github.io/tutorial/jaxrs003.html JAX-RS JEE 8 The path -> Split the frontend from the backend Rest API
  40. 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. 41. @betoSalazar https://auth0.com/blog/securing-spring-boot-with-jwts/ JWT + + Springboot + Spring Security The path -> Secure your API
  42. 42. @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
  43. 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. 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. 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
  46. 46. Microservices Architecture @betoSalazar
  47. 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. 48. asalazar@advlatam.com @betoSalazar Summary & Code blueprints repositories
  49. 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. 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. 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. 52. asalazar@advlatam.com @betoSalazar code blueprints: https://github.com/lasalazarr/fastdev https://github.com/lasalazarr/guide-monolithic-to- microservices
  53. 53. asalazar@advlatam.com @betoSalazar THANK YOU Auth0 Ambassadors. Helping the developer community make the internet safer.

×