アクターモデルとドメイン駆動設計(DDD)を組み合わせることで、イベント駆動やヘキサゴナルアーキテクチャでよく見られるアーキテクチャオーバーヘッドを取り除けるかもしれない。Implementing Domain-Driven Designの著者であるVaughn Vernon氏が、ScalaとAkka(アクターモデルの実装)を使ったリアクティブDDDについて説明した。
「リアクティブ」という新たな用語が使われているが、実際のところまったく新しい概念というわけではない。多くの人はイベントやメッセージに反応することに馴染みがあるはずだ。でも、これは私に新たな変化をもたらしてくれた。Vaughn氏はこう言って、アクターモデルの基本特性を次のように定義した。
- ダイレクトな非同期メッセージング。アクターは別のアクターに直接かつ非同期にメッセージを送る。
- ロックフリーの並行性。アクターはロックを扱わない。インフラストラクチャだけがロックを扱う。
- 何も共有しない。アクターは他のアクターの内部状態について何も知らない。
Vaughn氏がDDDを使うモチベーションの1つは、ビジネスのコアとなる側面を、非常に明確なやり方でモデル化したいためだ。通常、イベント駆動アーキテクチャの場合、ドメインモデルで明確にし、ドメインイベントがモデルに表現力を加えるが、完全にはっきりするわけではない。というのも、ドメインイベントが発行されたとき、そのイベントに反応するコードの場所や、最終的にモデルに影響を及ぼすコードの場所を見つけるが困難だからだ。
これに対し、アクターモデルは非常に明確だと彼は考えた。アクターがメッセージを他のアクターに送るとき、それはコード上に非常に明確に現われるためだ。
Vaughn氏の疑問は、DDDでアクターモデルを使うことで、どれだけのメリットがあるかだ。すべて以前と同じアーキテクチャで、アグリゲート間でメッセージを送るだけの話なのだろうか? それに対する彼の答えは、ノーだ。彼はこれにより、イベント駆動やヘキサゴナルアーキテクチャでよく見られるアーキテクチャオーバーヘッドの多くを取り除けると考えている。適切なフレームワークを用いることで、アーキテクチャをただのコントローラとアグリゲートにすることができる。コントローラがアクターになる。これはメッセージをディスパッチしてモデルのアグリゲートとやりとりする方法を知っている。
彼はアクターモデルとDDDが使える場所に制限があるとは思っていない。それどころか、高いスケーラビリティ、高い可用性、低いレイテンシが必要とされる場所にも適用可能だと考えている。
AkkaはJVM用に作られているが、Vaughn氏はAkkaをC#およびF#に移植しようと、Akka.NET実装に取り組んでいる。
今年前半、Vaughn氏はアクターモデルとDDDの組み合わせについて語った。
2013年9月にReactive Manifestoが発表された。このコンセプトの背景にある基本アイデアが説明されている。