概要
CQRSについて調べたことをメモ。
CQRSとは
- Command Query Responsibility Segregation
- CommandとQueryに責務分離するパターン
- Command
- データの更新を行う
- データではなくタスクにフォーカスしたコマンドを設計
- DDDのドメインモデルを内包することが想定されている
- Query
- データの参照を行う
- ユースケースごとに最適化されたオブジェクトとして設計
- DTO
- Command
- CommandとQueryに責務分離するパターン
- 実装方法
- イベントソーシングパターン
- CQRSでは、コマンドとクエリの連携のためにイベントが用いられることが一般的
- www.ibm.com - Command Query Responsibility Segregation (CQRS) pattern
- 段階的にCQRSへ移行していく話が語られている
- イベントソーシングパターン
- メリット
- ReadとWriteをそれぞれスケーリングすることができる
- ReadとWriteのそれぞれでデータソースを選択することができる
- データソースを分けずに同一にすることも可能
- データソースを分ける場合は同期または非同期でデータを同期する必要がある
- アプリケーション側のモデルはシンプルになる
- デメリット
- システムの構成要素が増えるためコストがかかる
- ネットワーク全体の構成が複雑になる
所感
このパターンを導入すると決めるのは結構ハードルの高さを感じる。。。
海外では事例が多そうだったが、日本ではまだまだ事例が少ないというのが分かった。
参考
- microservices.io - Pattern: Command Query Responsibility Segregation (CQRS)
- learn.microsoft.com - CQRS パターン
- learn.microsoft.com - イベントソーシングパターン
- zenn.dev - CQRSを完全に理解した
- martinfowler.com - 「イベントドリブン」とはどういう意味ですか?
- martinfowler.com - CQRS
- docs.aws.amazon.com - CQRS パターン
- logmi.jp - Chatworkのテックリードが語る、CQRSを上手に使うため方法
- logmi.jp - 「CQRSをやる」は「Event Sourcingをやる」とほぼ同義 リアクティブシステムとCQRSを反映した新アーキテクチャの設計思想
- little-hands.hatenablog.com - CQRS実践入門 [ドメイン駆動設計]
- hireoo.io -CQRSパターンを用いて統計データを処理するマイクロサービスを作成したお話
- speakerdeck.com - ざっくりCQRS/Event Sourcingを解説する
- blog.j5ik2o.me - CQRSはなぜEvent Sourcingになってしまうのか
- note.com - CQRSはEvent Sourcingなしで実現できるのか?
- appmaster.io - マイクロサービスにおけるCQRSとイベントソーシングの適用
- www.ibm.com - Command Query Responsibility Segregation (CQRS) pattern
- www.eventstore.com - CQRS
- blog.risingstack.com - When should you use CQRS?
- logmi.jp - “自律性”は独立で機能しないと意味がない コマンド・クエリの要件から考えるCQRSの利点と欠点
- pages.awscloud.com - CQRS & Event Sourcing モダンアーキテクチャにおける役割と実装