Example application
Our sample application is a simple distributed system consisting of three services. The three main services, product, search and authentication, have a dependency on a database which they use to store their state. For simplicity, we are using MySQL; however, in a real production environment, you would want to choose the most appropriate data store for your use case. The three services are connected via the messaging system for which we are using NATS.io, which is a provider-agnostic system, which we looked at in Chapter 9, Event-Driven Architecture.

To provision this system, we have broken down the infrastructure and source code into four separate repositories:
- Shared infrastructure and services (https://github.com/building-microservices-with-go/chapter11-services-main)
- Authentication service (https://github.com/building-microservices-with-go/chapter11-services-auth)
- Product service (https://github.com/building-microservices-with-go/chapter11-services-product)
- Search service...