Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lessons Learned — Testimonial of a brand new mi...

Andreas Evers
November 07, 2015

Lessons Learned — Testimonial of a brand new microservices architecture in production - JavaDay Kiev

At a major telco company in Belgium we have designed and implemented a cutting-edge architecture using microservices and hypermedia (REST level 3 / hateoas) for the entire customer- and business-facing web portfolio. During this talk we will shed a light on the migration path we went through to get Spring Cloud microservices based on Netflix deployed to production. Migrating from a monolith to containerized microservices doesn't always go smoothly in a rigid regulated enterprise. This is not your regular microservice talk. This is a journey through our struggles to reform both technically and culturally (inverse Conway's maneuvre) towards a devops distributed architecture which actually runs on production. E.g. gradually evolving from a manual infrastructure deploying on JBoss and using dedicated apache load balancers, to a PaaS private cloud solution.

Andreas Evers

November 07, 2015
Tweet

More Decks by Andreas Evers

Other Decks in Technology

Transcript

  1. WHOAMI • Work for Ordina Belgium • Open source enthusiast

    • Spring contributor • Speaker • Technical lead & coding architect @ Proximus • Marathon runner
  2. The Early Days webshop services
 site public
 site corporate
 site

    ESB Browser SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc Datastore Datastore Datastore Datastore
  3. Code reuse attempt webshop services
 site public
 site corporate
 site

    ESB Browser SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc shared library
  4. Code reuse attempt webshop services
 site public
 site corporate
 site

    ESB Browser SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc shared library
  5. Common API monolith webshop services
 site public
 site corporate
 site

    ESB Browser SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc shared library webshop services
 site public
 site corporate
 site api monolith
  6. Common API monolith blic
 e corporate
 site ESB Browser webshop

    services
 site public
 site corporate
 site api monolith api Client api Client api Client api Client JSON over HTTP Shared domain model Shared domain model Shared domain model Shared domain model Shared domain model
  7. Common API monolith webshop servicing
 site public
 site corporate
 site

    ESB Browser SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc shared library webshop services
 site public
 site corporate
 site api monolith
  8. Proof Of Concept R&D Spring Boot vs DropWizard vs …

    HAL vs Siren vs … Netflix Eureka vs Zookeeper vs …
  9. Microservices Migration webshop servicing
 site public
 site corporate
 site ESB

    Browser SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc SOA svc shared library webshop servicing site public
 site corporate
 site api monolith
  10. Microservices Migration c
 corporate
 site ESB Browser webshop webshop servicing


    site public
 site corporate
 site Gateway μS μS μS μS μS μS μS μS μS μS μS μS μS Registry Config
  11. PaaS Deployment Migration c
 corporate
 site ESB Browser eShop webshop

    servicing
 site public
 site corporate
 site Gateway μS μS μS μS μS μS μS μS μS μS μS μS μS Registry Config
  12. PaaS Monitoring Migration c
 corporate
 site ESB Browser eShop webshop

    servicing
 site public
 site corporate
 site Gateway μS μS μS μS μS μS μS μS μS μS μS μS μS Registry Config Hystrix Kibana Boot
 Admin Turbine
  13. PaaS Monitoring Migration c
 corporate
 site ESB Browser eShop webshop

    servicing
 site public
 site corporate
 site Gateway μS μS μS μS μS μS μS μS μS μS μS μS μS Registry Config Hystrix Kibana Boot
 Admin Turbine
  14. Testing Migration Browser webshop servicing
 site public
 site corporate
 site

    Gateway μS μS ESB SOA svc SOA svc SOA svc SOA svc SOA svc SOA atastore Datastore Datastore Datastore
  15. this.mockMvc.perform(get("/").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(document("index", links( linkWithRel("alpha").description("Link to the alpha resource"), linkWithRel("bravo").description("Link

    to the bravo resource")))); this.mockMvc.perform(get("/user/5").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(document("index", responseFields( fieldWithPath("contact").description("The user's contact details"), fieldWithPath("contact.email").description("The user's email address"))));
  16. Thank you for your attention @andreasevers https://netflix.github.io/ http://projects.spring.io/spring-cloud/ http://cloud.spring.io/spring-cloud-sleuth/ https://github.com/openzipkin/zipkin

    https://github.com/codecentric/spring-boot-admin https://github.com/mikekelly/hal-browser https://api-sandbox.foxycart.com/hal-browser/browser.html#/ http://projects.spring.io/spring-hateoas/ https://github.com/spring-projects/spring-restdocs https://github.com/DennisJaamann/micro-services-gui/tree/dev