Skip to content
This repository has been archived by the owner on Feb 6, 2025. It is now read-only.

System design

Piotr Gankiewicz edited this page Dec 9, 2016 · 11 revisions

The design of Coolector system is heavily based on the microservices and CQRS patterns. What does it mean in practice? Let's see:

  • Each service is an independent project (as well as the repository), therefore it can be developed with its own lifecycle without interfering the other parts of the system.
  • Services focus on a single domain and responsibilities that are related to the entities. For example handling user authentication is a totally different task than filtering the remarks.
  • Services can easily scale independently from each other. All you need to do is to spawn a new instance of the particular service - the horizontal scaling has a much bigger advantage over the vertical one.
  • Services have no idea about the other parts of the system - they're just "unit of work" that processes the commands and publishes events. Loose coupling is the key while designing microservices.
  • CQRS allows separating reads from writes, which eventually turns into much easier scaling as you can easily distinguish between the commands and the queries.
  • Data is being held in a very efficient, read-only storage that contains already "flattened" objects ready to be returned to the end-user directly.
Clone this wiki locally