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.

Spring Days NYC - A pattern language for microservices

1,017 views

Published on

This is a presentation that I gave at Spring Days NYC

When architecting an enterprise Java application, you need to choose between the traditional monolithic architecture consisting of a single large WAR file, or the more fashionable microservices architecture consisting of many smaller services. But rather than blindly picking the familiar or the fashionable, it’s important to remember what Fred Books said almost 30 years ago: there are no silver bullets in software. Every architectural decision has both benefits and drawbacks. Whether the benefits of one approach outweigh the drawbacks greatly depends upon the context of your particular project. Moreover, even if you adopt the microservices architecture, you must still make numerous other design decisions, each with their own trade-offs. A software pattern is an ideal way of describing a solution to a problem in a given context along with its tradeoffs. In this presentation, we describe a pattern language for microservices. You will learn about patterns that will help you decide when and how to use microservices vs. a monolithic architecture. We will also describe patterns that solve various problems in a microservice architecture including inter-service communication, service registration and service discovery.

Published in: Software
  • Be the first to comment

Spring Days NYC - A pattern language for microservices

  1. 1. @crichardson A pattern language for microservices Chris Richardson Founder of Eventuate.io Founder of the original CloudFoundry.com Author of POJOs in Action @crichardson chris@chrisrichardson.net http://learnmicroservices.io Copyright © 2017. Chris Richardson Consulting, Inc. All rights reserved
  2. 2. @crichardson Presentation goal Overview of the microservice architecture pattern language and how to use it to architect an application
  3. 3. @crichardson About Chris
  4. 4. @crichardson About Chris Consultant and trainer focusing on modern application architectures including microservices (http://www.chrisrichardson.net/)
  5. 5. @crichardson About Chris Founder of a startup that is creating an open-source/SaaS platform that simplifies the development of transactional microservices (http://eventuate.io)
  6. 6. @crichardson About Chris http://learnmicroservices.io
  7. 7. @crichardson Agenda Why microservices? Benefits of the microservice architecture Microservices != silver bullet The microservice pattern language Applying the microservice pattern language
  8. 8. @crichardson Modern software development: moving fast and not breaking things! 46x 440x 24x 5x lower Amazon: ~0.001% Netflix: 16 minutes
  9. 9. @crichardson How to move fast and not break things? Architecture: Process: Small, autonomous teams ???? DevOps/Continuous delivery/deployment Organization:
  10. 10. @crichardson The monolithic architecture Tomcat Browser WAR SQL database HTML REST/JSON Client App Simple to …. Develop Test Deploy Scale Catalog Module Reviews Module Orders Module StoreFront UI Module
  11. 11. @crichardson But successful applications keep growing ….
  12. 12. @crichardson … and modularity breaks down… http://www.laputan.org/mud/ “Shantytowns are squalid, sprawling slums.”
  13. 13. @crichardson Monolithic hell Agile development and deployment becomes impossible By John Martin, Public Domain, https://commons.wikimedia.org/w/index.php?curid=3353638
  14. 14. @crichardson Monolithic hell: Technology stack becomes increasingly obsolete BUT a rewrite is not feasible
  15. 15. The microservice architecture is an architectural style that structures an application as a set of loosely coupled, services organized around business capabilities
  16. 16. @crichardson The Microservice architecture tackles complexity through modularization Improved scalability is secondary *
  17. 17. @crichardson Microservice architecture Browser Mobile Device Content Router API Gateway Catalog Service Review Service Order Service … Service Catalog Database Review Database Order Database … Database HTTP /HTML REST REST Browse & Search WebApp Product Detail WebApp ….
  18. 18. @crichardson Agenda Why microservices? Benefits of the microservice architecture Microservices != silver bullet The microservice pattern language Applying the microservice pattern language
  19. 19. @crichardson Microservices enable continuous delivery/deployment Process: Continuous delivery/deployment Organization: Small, agile, autonomous, cross functional teams Architecture: Microservice architecture Enables Enables Enables Successful Software Development Services = testability and deployability Teams own services
  20. 20. @crichardson Smaller, simpler applications Easier to understand, develop and test Less jar/classpath hell - who needs OSGI? Faster to build, test and deploy Reduced startup time - improves MTTR
  21. 21. Scales development: develop, deploy and scale each service independently Small, autonomous teams Clearly defined responsibilities Catalog Service Review Service Order Service … Service Catalog Team Review Team Order Team … Team Responsible for
  22. 22. @crichardson Easier to scale
  23. 23. @crichardson Improves fault isolation
  24. 24. @crichardson Easily evolve your technology stack ... and fail safely
  25. 25. @crichardson Agenda Why microservices? Benefits of the microservice architecture Microservices != silver bullet The microservice pattern language Applying the microservice pattern language
  26. 26. @crichardson No silver bullets http://en.wikipedia.org/wiki/Fred_Brooks
  27. 27. @crichardson Complexity http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html
  28. 28. @crichardson Complexity of developing a distributed system
  29. 29. @crichardson Multiple databases & Transaction management Must use event-driven eventual consistency
  30. 30. @crichardson Complexity of testing a distributed system
  31. 31. @crichardson Complexity of deploying and operating a distributed system You need a lot of automation: VM/container orchestration or PaaS
  32. 32. @crichardson Developing and deploying features that span multiple services requires careful coordination
  33. 33. @crichardson Agenda Why microservices? Benefits of the microservice architecture Microservices != silver bullet The microservice pattern language Applying the microservice pattern language
  34. 34. @crichardson Are microservices a good fit for my application?
  35. 35. @crichardson When using microservices: How to decompose an application into services? How to deploy an application’s services? How to handle cross cutting concerns? Which communication mechanisms to use? How do external clients communicate with the services? How does a client discover the network location of a service instance? How to prevent a network or service failure from cascading to other services? How to maintain data consistency and implement queries? How to make testing easier? How to understand the behavior of an application and troubleshoot problems? How to implement a UI screen or page that displays data from multiple services?
  36. 36. @crichardson Microservice pattern language = collection of patterns that solve these architecture, design, development and operational problems
  37. 37. @crichardson What’s a pattern? Reusable solution to a problem occurring in a particular context
  38. 38. @crichardson The structure of a pattern encourages objectivity Resulting context The situationName Context Problem Related patterns The issues that must be addressed Forces Solution Benefits Drawbacks IssuesPatterns that are alternative solutions Patterns that address the issues
  39. 39. @crichardson Microservice architecture pattern Context Developing large, complex architecture Problem What’s the runtime architecture? Benefits Faster development Easy adopt new technologies Drawbacks Complexity of a distributed system Issues Decomposition Distributed system issues: IPC, discovery, … Alternative patterns Monolithic architecture Successor patterns Service Registry, API Gateway, …
  40. 40. @crichardsonMicroservice patterns Communication patterns Core Cross-cutting concerns Security Deployment Maintaining data consistency Database architecture External API Reliability Discovery Communication style Testing Observability UI Decomposition API gateway Client-side discovery Server-side discovery Service registry Self registration 3rd party registration Multiple Services per host Single Service per Host Service-per- Container Service-per-VM Messaging Remote Procedure Invocation Database per Service Event-driven architectureShared database Microservice Chassis Backend for front end Event sourcing Transaction log tailing Database triggers Application events Monolithic architecture Microservice architecture CQRS Motivating Pattern Solution Pattern Solution A Solution B General Specific Serverless deployment Circuit BreakerAccess Token Domain-specific Externalized configuration Service Integration Contract Test Service Component Test Exception tracking Distributed tracing Audit logging Application metrics Log aggregation Health check API Service deployment platform Server-side page fragment composition Client-side UI composition Decompose by business capability Decompose by subdomain Application patterns Infrastructure patterns Application Infrastructure patterns Microservices pattern language: http://microservices.io
  41. 41. @crichardson Agenda Why microservices? Benefits of the microservice architecture Microservices != silver bullet The microservice pattern language Applying the microservice pattern language
  42. 42. @crichardson The pattern language guides you when developing an architecture What architectural decisions you must make For each decision: Available options Trade-offs of each option
  43. 43. @crichardson Key patterns
  44. 44. Issue: What’s the deployment architecture? Forces Maintainability Deployability Testability Extensibility … Monolithic architecture Microservice architecture Single deployable/ executable OR Tightly coupled services Multiple loosely coupled services
  45. 45. Issue: How to decompose an application into services? Forces Stability Cohesive Loosely coupled Not too large Decompose by business capability Decompose by subdomain Organize around business capabilities Organize around DDD subdomains
  46. 46. @crichardson Issue: how to maintain data consistency? Event-driven architecture Event sourcing Transaction log tailing Database triggers Application events Context • Each service has its own database • Data is private to a service Forces Transactional data consistency must be maintained across multiple services 2PC is not an option
  47. 47. @crichardson Issue: how to perform queries? CQRS Context Each service has its own database Forces Queries must join data from multiple services Data is private to a service Maintain query views by subscribing to events
  48. 48. @crichardson Issue: How do services communicate? Messaging Remote Procedure Invocation Domain-specific Forces Services must communicate Usually processes on different machines …
  49. 49. @crichardson The rest are generic technical architecture patterns = Undifferentiated heavy lifting!
  50. 50. @crichardson Issue: How to handle cross cutting concerns? Microservice Chassis Forces Every service must implement logging; externalize configuration; health check endpoint; metrics; …
  51. 51. Issue: How to deploy an application’s services? Multiple Services per host Single Service per Host Service-per- Container Service-per-VM Serverless deployment Service deployment platform Forces Multiple languages Isolated Constrained Monitor-able Reliable Efficient
  52. 52. @crichardson Issue: How to discover a service instance’s network location? Client-side discovery Server-side discovery Service registry Self registration 3rd party registration Forces Client needs IP address of service instance Dynamic IP addresses Dynamically provisioned instances
  53. 53. @crichardson Issue: how to monitor the behavior of your application? Exception tracking Distributed tracing Audit logging Application metrics Log aggregation Health check API
  54. 54. @crichardson Summary The monolithic architecture is a good choice for small/simple applications Use the microservice architecture for large/complex applications Microservice architecture != silver bullet Use the microservice architecture pattern language to guide your decision making
  55. 55. @crichardson @crichardson chris@chrisrichardson.net http://learnmicroservices.io Thank you!

×