Architecture
Mission Control has a micro-service architecture with a shared data source with multiple deployment models.
- CLI
- Kubernetes (Helm Chart)
- SaaS
Communication Model
Communication between services happen in 3 ways:
- Database - A shared database with interface library enables services to query the data owned by other services by directly hitting the database using an interface provided by a shared library
- Messaging - A postgres based message bus is used, database triggers insert events into queues which are then consumed by various services
- HTTP/REST - This model is primarily used when the service need to interact with services outside the DB (e.g. the APM hub needs to connect to log stores to retrieve logs)
Postgres
Postgres is the only data store used by Mission Control and relies heavily on JSON and queuing support in Postgres. This limits the dependencies and complexity especially when self-hosting.
All services use a shared database and model via the duty project, this provides the following benefits:
- Limit RPC calls improving latency and performance
- Services can run with slightly different versions of the library, limiting the need for coordinated migrations
- Library updates happen automatically using dependabot