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**.

- 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**.

**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