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.

Code Freeze 2018: There is no such thing as a microservice!

7,532 views

Published on

This is a talk I gave at Code Freeze 2018:

The microservice architecture is becoming increasingly popular. However, frequent references to using “a microservice to solve a problem” suggest that the concept is not universally well understood. In this talk, I define the microservice architecture as an architectural style and explain what that actually means. I also describe how the primary goal of the microservice architecture is to enable continuous delivery and deployment, and how it achieves that. You will learn why the architecture that you pick for your application matters. And you will learn how to solve key challenges with decomposing an application into microservices. This talk explains why there is no such thing as a microservice!

Published in: Software

Code Freeze 2018: There is no such thing as a microservice!

  1. 1. @crichardson There is no such thing as a microservice! Chris Richardson Founder of Eventuate.io Founder of the original CloudFoundry.com Author of POJOs in Action @crichardson chris@chrisrichardson.net http://microservices.io http://eventuate.io http://plainoldobjects.com Copyright © 2017. Chris Richardson Consulting, Inc. All rights reserved
  2. 2. @crichardson Presentation goal Define the Microservice Architecture as an architectural style Explain what that means and why it matters
  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 40% off ctwcodefreeze18
  7. 7. @crichardson Agenda A brief refresher on software architecture From monolith to microservices Microservices != silver bullet Applying the microservice pattern language
  8. 8. About software architecture “The software architecture of a computing system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both.” Documenting Software Architectures, Bass et al
  9. 9. @crichardson Architecture = (elements, relations, properties)
  10. 10. @crichardson Architecture = Boxes and lines 😄
  11. 11. @crichardson Architecture is multi-dimensional e.g. Structural, electrical, plumbing, mechanical Described by multiple views View = (elements, relations, properties)
  12. 12. 4+1 view model Logical View Process View Deployment View Implementation View Scenarios
  13. 13. 4+1 Logical view Logical View Process View Deployment View Implementation View Scenarios Elements: classes and packages Relations: inheritance, associations, …
  14. 14. 4+1 Implementation view Logical View Process View Deployment View Implementation View Scenarios Elements: modules and components Relations: dependencies
  15. 15. 4+1 Process view Logical View Process View Deployment View Implementation View Scenarios Elements: processes Relations: IPC
  16. 16. 4+1 Deployment view Logical View Process View Deployment View Implementation View Scenarios Elements: “machines” Relations: networking
  17. 17. 4+1 Scenarios Logical View Process View Deployment View Implementation View Scenarios Derived from use cases/stories Animate the views
  18. 18. @crichardson ""… An architectural style determines the vocabulary of components and connectors that can be used in instances of that style, together with a set of constraints on how they can be combined….. ”” David Garlan and Mary Shaw, An Introduction to Software Architecture
  19. 19. @crichardson Layered architectural style Layer N Layer N - 1 Layer N - 2 Well defined responsibilities Constrained dependencies Uses Uses UsesUses
  20. 20. The role of architecture Requirements = Functional requirements + Non-functional requirements (-ilities) Domain knowledge Architecture
  21. 21. Important -ilities Maintainability Testability Deployability Evolvability Scalability Security Reliability … https://en.wikipedia.org/wiki/Non-functional_requirement Development velocity Sunday afternoon 😀
  22. 22. @crichardson Businesses must innovate faster Build better software faster
  23. 23. @crichardson Reducing lead time Increasing deployment frequency
  24. 24. @crichardson Modern software development: moving fast and not breaking things! 46x 440x 24x 5x lower Amazon: ~0.001% Netflix: 16 minutes
  25. 25. @crichardson Modern software development Architecture: Process: Small, autonomous teams ??? DevOps/Continuous delivery/deployment Organization:
  26. 26. Agenda A brief refresher on software architecture From monolith to microservices Microservices != silver bullet Applying the microservice pattern language
  27. 27. @crichardson Tomcat/App. Server Traditional: Monolithic architecture Browser/ Client WAR/EAR MySQL Database Review Management Catalog Management Recommendation Management StoreFrontUI Order Management HTML REST/JSON Logical view Implementation view
  28. 28. @crichardson The monolithic architecture is an architectural style that structures the application as a single executable component Implementation view
  29. 29. -ilities of small monoliths Maintainability Testability Deployability … https://en.wikipedia.org/wiki/Non-functional_requirement 😄
  30. 30. @crichardson But successful applications keep growing…. Development Team Application
  31. 31. @crichardson … and growing Development Team A ApplicationDevelopment Team B Development Team C
  32. 32. @crichardson Eventually: agile development and deployment becomes impossible = monolithic hell
  33. 33. @crichardson Technology stack becomes increasingly obsolete BUT A rewrite is not feasible
  34. 34. -ilities of large monoliths Maintainability Testability Deployability … https://en.wikipedia.org/wiki/Non-functional_requirement 😭
  35. 35. The microservice architecture is an architectural style that structures an application as a set of loosely coupled, services organized around business capabilities
  36. 36. @crichardson Application Service = business capability Acme, Inc Order Taking Inventory management Delivery management Business Capability = something a business does to deliver value … Order Service Inventory Management Service Delivery Management Service … Service
  37. 37. @crichardson Service = independently deployable component Command Query API Event Publisher Event Subscriber API Client Consumer facing Implementation Synchronous: REST, gRPC, … Asynchronous: Command/Reply, Notification Service database Events Events Synchronous: REST, gRPC, … Asynchronous: Command/Reply, Notification Data owned by the service Data replicated from elsewhere SLA
  38. 38. Service size is secondary microservice architecture
  39. 39. Service: Meaningful business functionality Developed by a small team Minimal lead time/high deployment frequency
  40. 40. Microservices = Microservice architecture = Application architecture No such thing as a microservice
  41. 41. @crichardson 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 …. Supplier Inbound Gateway Catalog update messages Supplier System
  42. 42. -ilities of a microservice architecture Maintainability Testability Deployability … https://en.wikipedia.org/wiki/Non-functional_requirement 😄
  43. 43. @crichardson Microservices DevOps/Continuous delivery/deployment of large/complex applications
  44. 44. @crichardson Process: Continuous delivery/deployment Organization: Small, agile, autonomous, cross functional teams Architecture: Microservice architecture Enables Enables Enables Successful Software Development Services improve testability and deployability Teams own services
  45. 45. @crichardson Microservices evolve the technology stack Pick a new technology when Writing a new service Making major changes to an existing service Let’s you experiment and fail safely
  46. 46. @crichardson Agenda A brief refresher on software architecture From monolith to microservices Microservices != silver bullet Applying the microservice pattern language
  47. 47. @crichardson No silver bullets http://en.wikipedia.org/wiki/Fred_Brooks
  48. 48. @crichardson Drawbacks of microservices Complexity Development: IPC, partial failure, distributed data Testing: Integration, end to end, … Deployment …
  49. 49. @crichardson Are microservices a good fit for my application?
  50. 50. @crichardson Do I have the pre-requisites in place: automated testing automated provisioning ….. ?
  51. 51. @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?
  52. 52. @crichardson It depends!
  53. 53. @crichardson Microservice pattern language = collection of patterns that solve these architecture, design, development and operational problems
  54. 54. @crichardson What’s a pattern? Reusable solution to a problem occurring in a particular context
  55. 55. @crichardson The structure of a pattern encourages objectivity Resulting context aka the situation Name Context Problem Related patterns (conflicting) issues etc to address Forces Solution Benefits Drawbacks Issues to resolve Alternatives Solutions to issues
  56. 56. @crichardson Microservices pattern language: http://microservices.io
  57. 57. @crichardson Agenda A brief refresher on software architecture From monolith to microservices Microservices != silver bullet Applying the microservice pattern language
  58. 58. @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
  59. 59. @crichardson Key patterns
  60. 60. Issue: What’s the deployment architecture? Forces Maintainability Deployability Testability … Monolithic architecture Microservice architecture Single deployable/ executable OR Tightly coupled services Multiple loosely coupled services
  61. 61. 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
  62. 62. @crichardson Issue: how to maintain data consistency? 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
  63. 63. @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 API Composition
  64. 64. @crichardson The rest are generic technical architecture patterns = Undifferentiated heavy lifting!
  65. 65. @crichardson Issue: How do services communicate? Messaging Remote Procedure Invocation Domain-specific Forces Services must communicate Usually processes on different machines …
  66. 66. @crichardson Issue: How to handle cross cutting concerns? Microservice Chassis Forces Every service must implement logging; externalize configuration; health check endpoint; metrics; …
  67. 67. 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
  68. 68. @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
  69. 69. @crichardson Issue: how to monitor the behavior of your application? Exception tracking Distributed tracing Audit logging Application metrics Log aggregation Health check API
  70. 70. @crichardson Summary The goal of architecture is to satisfy non-functional requirements For continuous delivery/deployment use the appropriate architectural style Small applications Monolithic architecture Complex applications Microservice architecture Use the pattern language to guide your decision making
  71. 71. @crichardson @crichardson chris@chrisrichardson.net http://learnmicroservices.io Thank you! 40% off ctwcodefreeze18

×