Command Query Responsibility Segregation (CQRS)
Model for read and write are different
CQRS fits well with event-based programming models. It's common to see CQRS system split into separate services communicating with Event Collaboration. This allows these services to easily take advantage of Event Sourcing.
Having separate models raises questions about how hard to keep those models consistent, which raises the likelihood of using eventual consistency.
CQRS is useful in some places, but not in others. Many systems do fit a CRUD mental model, and so should be done in that style. CQRS is a significant mental leap for all concerned, so shouldn't be tackled unless the benefit is worth the jump. While I have come across successful uses of CQRS, so far the majority of cases I've run into have not been so good, with CQRS seen as a significant force for getting a software system into serious difficulties.
Main benefit is in handling high performance applications. CQRS allows you to separate the load from reads and writes allowing you to scale each independently.
Last updated