A Pattern Language for Microservices (@futurestack)


Published on

When architecting an application, you need to choose between the traditional monolithic architecture consisting of a single large application, 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.

Published in: Software
1 Comment
No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

A Pattern Language for Microservices (@futurestack)

  1. 1. @crichardson A pattern language for microservices Chris Richardson Founder of the original CloudFoundry.com Author of POJOs in Action @crichardson chris@chrisrichardson.net http://plainoldobjects.com http://microservices.io http://eventuate.io
  2. 2. @crichardson Presentation goal Why patterns and pattern languages? A pattern language for microservices
  3. 3. @crichardson About Chris
  4. 4. @crichardson About Chris Consultant and trainer focusing on microservices (http://www.chrisrichardson.net/)
  5. 5. @crichardson About Chris Founder of a startup that is creating a platform that makes it easy for application developers write microservices (http://eventuate.io)
  6. 6. @crichardson For more information https://github.com/cer/event-sourcing-examples http://microservices.io http://plainoldobjects.com/ https://twitter.com/crichardson http://eventuate.io/
  7. 7. @crichardson Agenda Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns and more
  8. 8. @crichardson In 1986… http://en.wikipedia.org/wiki/Fred_Brooks
  9. 9. @crichardson Yet almost 30 years later developers are still passionately arguing over “silver bullets”
  10. 10. @crichardson Suck/Rock Dichotomy Spring vs. Java EE JavaScript vs. Java Functional programming vs. Object-oriented http://nealford.com/memeagora/2009/08/05/suck-rock-dichotomy.html Containers vs. Virtual Machines
  11. 11. @crichardson Gartner Hype Cycle http://upload.wikimedia.org/wikipedia/commons/b/bf/Hype-Cycle-General.png It’s awesome It’s not awesome Trade-offs understood
  12. 12. @crichardson How we make decisions Decide using emotions Rationalize with our intellect http://en.wikipedia.org/wiki/Mahout
  13. 13. @crichardson We need a better way to discuss and think about technology
  14. 14. @crichardson What’s a pattern? Reusable solution to a problem occurring in a particular context
  15. 15. @crichardson The structure of a pattern = Great framework for discussing and thinking about technology
  16. 16. @crichardson The structure of a pattern Resulting context aka the situation Name Context Problem Related patterns (conflicting) issues etc to address Forces Solution
  17. 17. @crichardson Resulting context Benefits Drawbacks Issues to resolve
  18. 18. @crichardson Related patterns Alternative solutions Solutions to problems introduced by this pattern
  19. 19. Pattern language A collection of related patterns that solve problems in a particular domain Relationships Pattern A results in a context that has a problem solved by Pattern B Patterns A and B solve the same problem Pattern A is a specialization of pattern B http://en.wikipedia.org/wiki/A_Pattern_Language Access to Water Promenade Local townhall Intimacy gradient Light on two sides
  20. 20. @crichardson Meta-pattern Problem: How to talk/reason about technology? Solution: Use the pattern format Benefit: More objective Drawback: Less exciting Context: Emotional software development culture Related patterns: It’s awesome!
  21. 21. @crichardson Work in progress http://microservices.io/ Monolithic architecture Microservice architecture 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 Deployment Discovery Data Communication Service-per-VM Partitioning Messaging Remote Procedure Invocation Style Core Database per Service Event-driven architecture Event sourcing Motivating Pattern Solution Pattern Solution A Solution B General Specific
  22. 22. @crichardson Agenda Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns and more
  23. 23. @crichardson
  24. 24. @crichardson Let’s imagine you are building an online store Browser/ Client SQL Database Review Service Product Info Service Recommendation Service StoreFrontUI Order Service HTML REST/JSON
  25. 25. @crichardson Problem: what’s the deployment architecture?
  26. 26. @crichardson Forces There is a team of developers that must be productive The application must be easy to understand and modify Do continuous deployment Run multiple instances for scalability and availability Use emerging technologies (frameworks, programming languages, etc)
  27. 27. @crichardson Tomcat Pattern: Monolithic architecture Browser/ Client WAR/EAR MySQL Database Review Service Product Info Service Recommendation Service StoreFrontUI Order Service HTML REST/JSON develop test deploy Simple to scale
  28. 28. @crichardson Examples everywhere
  29. 29. @crichardson But when the application is large …
  30. 30. @crichardson Intimidates developers
  31. 31. @crichardson Obstacle to frequent deployments Need to redeploy everything to change one component Interrupts long running background (e.g. Quartz) jobs Increases risk of failure Fear of change Updates will happen less often - really long QA cycles e.g. Makes A/B testing UI really difficult Eggs in one basket
  32. 32. @crichardson Overloads your IDE and container Slows down development
  33. 33. @crichardson Lots of coordination and communication required Requires lots of coordination I want to update the UI But the backend is not working yet!
  34. 34. @crichardson Requires long-term commitment to a technology stack
  35. 35. @crichardson Pattern: Microservice architecture
  36. 36. @crichardson Apply functional decomposition X axis - horizontal duplication Z axis -data partitioning Y axis - functional decomposition Scale by splitting sim ilar things Scale by splitting different things
  37. 37. @crichardson Product Info Microservice architecture Product Info Service Recommendation Service Review Service Order Service Browse Products UI Checkout UI Order management UI Account management UI Apply X-axis and Z-axis scaling to each service independently
  38. 38. @crichardson Examples http://highscalability.com/amazon-architecture http://techblog.netflix.com/ http://www.addsimplicity.com/downloads/ eBaySDForum2006-11-29.pdf http://queue.acm.org/detail.cfm?id=1394128 ~600 services 100-150 services to build a page
  39. 39. @crichardson Benefits Smaller, simpler apps Easier to understand and develop Less jar/classpath hell - who needs OSGI? Faster to build and deploy Scales development: develop, deploy and scale each service independently Improves fault isolation Eliminates long-term commitment to a single technology stack System level architecture vs. service level architecture Easily and safely experiment with new technologies
  40. 40. @crichardson Drawbacks Complexity of developing a distributed system Implementing inter-process communication Handling partial failures Implementing business transactions that span multiple databases (without 2PC) Complexity of testing a distributed system Complexity of deploying and operating a distributed system Managing the development and deployment of features that span multiple services Fortunately solutions exists
  41. 41. @crichardson The benefits typically outweigh the drawbacks for large, complex applications
  42. 42. @crichardson Issues to address How to deploy the services? How do the services communicate? How do clients of the application communicate with the services? How to partition the system into services? How to deal with distributed data management problems? ….
  43. 43. @crichardson Agenda Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns and more
  44. 44. @crichardson We have applied the microservices pattern: How to deploy the services?
  45. 45. @crichardson Forces Services are written using a variety of languages, frameworks, and framework versions Each service consists of multiple service instances for throughput and availability Building and deploying a service must be fast Service must be deployed and scaled independently Service instances need to be isolated Resources consumed by a service must be constrained Deployment must be cost-effective
  46. 46. @crichardson
  47. 47. @crichardson Pattern: Multiple service instances per host Host (Physical or VM) Service-A Instance-1 Service-B Instance-2 Service-C Instance-2 Process WAR OSGI bundle
  48. 48. Benefits and drawbacks Benefits Efficient resource utilization Fast deployment Drawbacks Poor/Terrible isolation Poor visibility (with WAR/OSGI deployment) Difficult to limit resource utilization Risk of dependency version conflicts Poor encapsulation of implementation technology
  49. 49. @crichardson Pattern: Service instance per host
  50. 50. @crichardson Pattern: Service per VM host Service VM image VM Service VM Service VM Service packaged as deployed as
  51. 51. @crichardson Example http://techblog.netflix.com/ ~600 services packer.io is a great tool
  52. 52. Benefits and drawbacks Benefits Great isolation Great manageability VM encapsulates implementation technology Leverage AWS infrastructure for Autoscaling/Load balancing
 Drawbacks Less efficient resource utilization Slow deployment
  53. 53. @crichardson VM VM Pattern: Service per Container host Service Container image Container Service Container Service Container Service packaged as deployed as
  54. 54. @crichardson Examples
  55. 55. Benefits and drawbacks Benefits Great isolation Great manageability Container encapsulates implementation technology Efficient resource utilization Fast deployment Drawbacks Immature infrastructure for deploying containers
  56. 56. @crichardson Agenda Why a pattern language for microservices? Core patterns Deployment patterns Communication patterns and more
  57. 57. @crichardson Communication issues System Client Service A Service B Service C The System How do clients of the system interact with the services? How do services within the system interact?
  58. 58. @crichardson How do external clients interact with the microsevices?
  59. 59. @crichardson How do services communicate with each other?
  60. 60. @crichardson How does a client determine the network location of a service?
  61. 61. @crichardson What’s the database architecture?
  62. 62. Database per Service Orders Service Customer Service Order Database Customer Database Sharded SQL NoSQL DB
  63. 63. How to solve distributed data management challenges? How to implement transactions that span multiple services? How to implement queries that span multiple services?
  64. 64. @crichardson Summary: Patterns and pattern languages are a great way to … Think about technology Discuss technology Apply technology
  65. 65. @crichardson Summary: The Microservices pattern language is a great way to … Think about microservices Discuss microservices Apply microservices (or not)
  66. 66. @crichardson @crichardson chris@chrisrichardson.net http://eventuate.io http://plainoldobjects.com http://microservices.io Questions?