Remind: What are Microservices? === Microservices are - **independently deployable services** - **modeled around a business domain** From a technology viewpoint: - microservices expose the business capabilities that they encapsulate via one or more network endpoints - encapsulate data storage and retrieval, exposing data, via well-defined interfaces ### Independent Deployability - releasing changes to a single microservice into production without having to deploy any thing else - need explicit, well-defined, and stable contracts between services ### Modeled Around a Business Domain - This is an architecture in which we have **high cohesion of related technology, but low cohesion of business functionality**. ![](https://i.imgur.com/iQ1e5Hp.png) - If we want to make it easier to make changes, instead we need to change how we group code — **we choose cohesion of business functionality, rather than technology**. ![](https://i.imgur.com/5Aztgj7.png) **Our business domain becomes the primary force driving our system architecture**, hopefully making it easier to make changes, and making it easier for us to organize our teams around our business domain ### Own Their Own Data - Don't shared database between microservices - Having stable interfaces between services is essential if we want independent deployability - By hiding the database that backs our service, we also ensure we reduce coupling ### What Advantages Can Microservices Bring? flexibility: - improving the scale and robustness of systems - allows you to mix and match technology - can be worked on in parallel - easier for those developers to understand their part of the system, as they can focus their attention on just one part of it ### What Problems Do They Create? - One of the main challenges: networks - network call can and will fail - system behavior unpredictable ### And Ownership