ドメイン駆動設計(DDD)は、しばしマイクロサービスを取り巻く境界(境界づけられたコンテキスト)を見つけ出すために用いられる。DDDにおける集約もまた永続性と整合性の範囲を定義する上で重要だ。しかし、DDDに含まれるすべてのものがマイクロサービスにとって良いわけではない、とLutz Huehnken氏はベルリンで開催されたmicroxchg 2018のプレゼンテーションのなかで主張した。氏はDDD、イベントストーミング、そしてAkkaを基盤としたLagomフレームワークを使用して、モデルと実装を1対1でマッピングしたリアクティブシステムをどうやって構築できるかを解説している。
DDDの慣例上、あなたがドメインエキスパートと名詞について話しているとき、システムの静的構造に焦点をあてている。フリーランスコンサルタントである氏にとってみれば、この静的な特性に焦点をあてることは、しばし貧弱な境界づけを引き起こすものである。氏は代わりに動的構造とイベントに着目すべきだと主張する。設計の初期段階では、それは物事ではなく出来事に着目するということだ。
イベントストーミング(Event storming)
イベントストーミングは、DDDコミュニティから生まれた複雑なビジネスドメインを素早く探求するためのワークショップである。大きな壁一面にステッカを貼ってモデルを表現していくものだ。ビジネス関係者と開発者を集め、ドメインのなかの出来事を見つけるためにイベントから始める。イベントを見つけたら、タイムラインに沿って並べられないか検討していく。その後、各イベントを発火させるコマンドを追加する。この時点で一緒に属していると思われるエンティティに基いて集約を作成する代わりに、Huehnken氏はコマンドとイベントの流れから集約が浮かび上がるようにしたいという。これは集約に対して、コマンドとイベントを論理的にまとめるという異なる見方を与える。そして、氏はこれがより良い境界を見つけ集約を適切なサービスに分割する助けになると確信している。
Huehnken氏の経験によれば、イベントストーミングは大きな描画スペースでは特に強力なツールであるが、そうでない様々なレベルでも使用できる。氏はサービスの集約まで深くモデリングするために、より技術的なレベルで使用できる可能性も発見している。ひとつの大きな利点は、DDDでは大きな価値といえるモデルと実装を一直線上にすることだ。
リアクティブシステム(Reactive systems)
リアクティブシステムは即応性と、耐障害性と、弾力性と、メッセージ駆動とを備えたシステムを構築することである。非同期メッセージングが、これを実現する方法だ。またHuehnken氏にとってマイクロサービスは、独立しており、機敏で、他システムに影響を及ぼすことなく新しいバージョンのサービスをデプロイすることができるものである。このため、両者は互いにとてもよく補完しあう。そう、リアクティブマイクロサービスが必要なのだ。
リアクティブシステムを構築するための教科書的技術はアクターモデルである。しかし、氏はこのモデルが自分が望むほど普及しておらず、その理由はモノリスシステムから離れるために精神面での大きな飛躍が必要であるからと考えている。モノリスシステムでは、すべてのものにアクセスできてしまい、論理的な境界をも越えてしまう。本来の分散システムでは、ネットワーク境界があるためシステム全体にアクセスすることはできない。いくつかの集約を必要とするビジネスプロセスは、サーガ(Saga)などのパターンが必要になることがある。現在のグローバルな状態から離れることだ。分散システムは局所的であるので、イベントで表現された過去の状態を持つ。
Huehnken氏はアクターモデルには興味深い実装技術があると主張する。ErlangやAkkaを含む2,3のフレームワークが利用可能だ。LagomはAkka、CQRS、イベントソーシングをベースにした、より新しく、より洗練されたマイクロサービスフレームワークである。人々は完璧に非同期で分離されたシステムを構築しようと精神的挑戦にもがいているが、氏はモデリング技術と実装技術を一直線上にすることに好機があると考えている。
DDDではコードがモデルの概念を表現することが重要である。我々はこれを忘れ、迂回してきたと氏は思っている。我々は実装技術を開発し、新しいモデリング技術を得た。モデリングの概念がコードに直接反映されるように、それらを統合しなければならない。そして、分散システムを構築するための本当のブレークスルーを実現させるのだ。
このカンファレンスのプレゼンテーションは既にいくつか公開され、順次追加される。
Rate this Article
- Editor Review
- Chief Editor Action