The following are three compelling factors for using CQRS:
- Collaboration
- Model separation
- Independent scalability
With separate services, we can then maintain, deploy, and scale these services independently. This increases the level of collaboration we can achieve between the development teams.
By having separate services, we can use a model that best fits our service. The command service might use simple SQL statements directly against a database, as that is the most familiar technology to the team responsible, while the team building the query service might use a framework for handling complex statements against the database.
Most solutions tend to have a higher level of reads than writes (or vice versa) so splitting the services along this criterion makes sense in many scenarios.