クラウドを本格活用する時代に入り、エンタープライズアプリケーションのアーキテクチャーに変革が起きている。その一つが、スケーラブルなシステムを実現する「CQRS」(Command Query Responsibility Segregation)アーキテクチャーだ。オブジェクト指向の大家Bertrand Meyer氏やGreg Young氏によって提唱された。

 一言でいうと「書き込み(Command)と読み出し(Query)の責務を分離する設計モデル」で、データ書き込みシステムとデータ読み出しシステムを別々に用意することになる。

 CQRSアーキテクチャーを採用した場合、システムがデータ更新要求を受けると、その要求に応答してからデータを更新し、キューイングなどの仕組みを用いて読み出しシステムに非同期でデータを反映する。更新データを参照するには、別途読み出しシステムにアクセスする必要がある。

 データベースにアクセスするアプリケーション側から見れば、データ更新要求を出してから実際に更新されるまでに多少の時間差があり、読み出したデータは常に少し古い可能性がある。データベースは結果整合性のみが保たれる。

 更新要求に応答した時点ではデータを更新していないことと、読み出したデータが少し古いかもしれないこと。この2点を許容することにより、スケーラブルなシステムを作ることができる。米Googleも米Twitterも米Facebookも大量データ処理に特化したデータモデルを作り、データベースの一貫性を緩めて非同期で逐次処理を行っているという。CQRSアーキテクチャーである。

 このアーキテクチャーは、これまでのエンタープライズシステムでは当たり前の同期処理に慣れていると、違和感を覚えるだろう。ただ、用途を考えてみると、意外と広範囲に利用できることが分かる。