Microservices is an approach to software design that decomposes functionality into small autonomous services. This allows large scale functionality to be implemented with manageable units. The following are architecture and design principles associated with microservices.
SmallMicroservices are small. They are implemented and operated by a small team.ReplaceableA microservice is small enough to be replaced without much impact.CohesiveEverything in a microservice feels like it belongs together. Anything that doesn't fit is moved to a separate microservice.AutonomousMicroservices can be deployed independently.ScalableMicroservices are designed to be scalable and can be scaled independently.
DisposableDesign for fast starts and don't allow a service to fall into an unstable state when hardware suddenly fails.Dumb PipesIdeally, microservices communicate using standard asynchronous network communications. Avoid putting functionality in the middle between services.Loosely CoupledMicroservices offer an abstracted interface such that consumers don't need to change every time you deploy an update. Design interfaces around enduring business concepts.
ReusableInterfaces are designed to maximize use of services by diverse consumers. Avoid unnecessary assumptions and constraints.Business FunctionalityMicroservices are organized around business functionality as opposed to technology layers.Cross-functional TeamsMicroservices are completely implemented by small cross-functional teams that can change everything from the UI to the data model. This removes the organizational complexity of getting numerous teams involved in every change.
Decentralized ArchitectureAllow teams leverage in choosing their own platforms, tools and data models. Encourage teams to share what works.OwnershipMicroservices are products that are owned and operated by the build team. Microservices are evolved over time with no big upfront plan.Service CompositionMicroservices use microservices.
ResilienceExpect failure from external resources such as other microservices and behave well when failure occurs.AutomationAutomate things such as testing, deployment and service recovery.Design for ObservationGenerate useful logs using techniques such as correlation ids that simplify troubleshooting.
Software Design
This is the complete list of articles we have written about software design.
If you enjoyed this page, please consider bookmarking Simplicable.
References"Microservices", Martin Fowler and James Lewis, March 2014, https://martinfowler.com/articles/microservices.html.
© 2010-2023 Simplicable. All Rights Reserved. Reproduction of materials found on this site, in any form, without explicit permission is prohibited.
View credits & copyrights or citation information for this page.
|