DDD、イベントソーシング、CQRSに基づくシステムのためのフレームワークであるAxon Frameworkの採用が急速に拡大し、先日100万ダウンロードに到達した — アムステルダムのEvent-Driven Microservices Conferenceで先日行われた、Axonの基本概念と歴史を紹介するプレゼンテーションの中で、Allard Buijze氏はこのように報告した。
Buijze氏の講演は、イベントが極めて特殊なものだという指摘で始まった- イベントは過去の出来事の記録であり、システムの歴史の一部なのだ。過去からは問題を見つけることができ、未来には期待を持つことができる。Buijze氏にとってはこれが、イベントソーシングプラクティスを進める力となっている — アプリケーションの動作の副作用としてではなく、アプリケーションの真実のリソースとして、イベントは使用されるべきだ。
Buijze氏はさらに、サービスが自身のイベントをコンシュームすることの重要性も指摘している — これはイベントソーシングの根幹をなすものなのだ。もしもサービスがイベントではなく、内部データに基づいた判断を行っているのであれば、それは完全なイベントソーシングではない。イベント駆動アーキテクチャではあるとしても、イベントがサービスで発生した事象の真の表現であることを証明できないからだ。
Buijze氏の経験では、マイクロサービスアーキテクチャの多くはエンティティサービスに基づいており、氏はこの設計テクニックを名詞駆動(noun-driven)設計と呼んでいる。そのアイデアは、新たなシステムを記述したドキュメント内の名詞をすべて見つけ出すことにある。これらがサービスになり、すべての動詞がAPIコールになる。このテクニックは、結果的にすべてのサービスが相互に関係性を持つ、分散型の大きな泥団子(big ball of mud)になりやすい。ひとつのサービスがダウンすると、システム全体が使用不能に陥るのだ。
マイクロサービスからではなく、モノリスから始めるべきだ、とBuijze氏は言う。スケールアップは難しいが、デプロイやリファクタが容易だからだ。よく設計されたモノリスと“大きな泥団子”を混同してはならない、と氏は指摘する。明確に構造された内部構造を持ったモノリスを開始点とする、というのが、氏の推奨する戦略なのだ。コードの同じ部分で作業しなければならない人の数が多過ぎるようになったら、いくつかのコンポーネントを、可能ならば他の部分を変更することなく取り出すべき時だ。時間が経ち、必要が生まれるにつれ、より多くのコンポーネントを取り出すことができる。
コンポーネントの取り出しを支援するためには、位置の透過性が極めて重要だ。Axonの主要な機能はCQRSではなく、アプリケーション内のコンポーネント間の位置透過性にある、とBuijze氏は指摘する。コンポーネントがそれぞれの場所に依存性を持たなければ、位置の変更は簡単になる。それは同時に、どのオペレーションがどのサービスであるかを知る必要がないという意味でもある — 単にメッセージを送れば、メッセージが自分の宛先を見つけてくれる。
コンポーネントは、それが作用するコンポーネントの位置を意識したり、何らかの仮定をしたりしてはなりません。
イベントは重要だ。しかしBuijze氏は、コンポーネントが送信する理由を持つメッセージには3つのカテゴリがあることを指摘した上で、イベントとメッセージが同じものではないことを強調する。
- イベントは、何かが起きた時です。すべてのハンドラに配信されて、結果は返りません。
- コマンドは、システムに何かをさせたい時です。ただひとつのハンドラにルーティングされ、結果が返ります。
- クエリは、何かを知りたい時です。結果が返ります。
位置透過性の約束をサポートし、これら異なる種類のメッセージを処理するために、2017年のカンファレンスでAxonHubがリリースされた。Buijze氏はこれを、コンテンツではなく、メッセージの種類の違いを理解して、それぞれを適切な宛先にルーティングする機能を持ったメッセージプラットフォームである、と説明する。ハブのアイデアは、マイクロサービスで言うスマートエンドポイントとダムパイプに相当するが、パイプがメッセージの種類を認識する点が異なる、と氏は述べている。
将来に関して、氏は、マイクロサービスの進化が今後も続くとともに、Axonコンポーネントの動作方法や通信方法がサーバレス環境でも有効となり得ると考えている。同社のこの方向への第一歩はSaaSソリューションの提供だ。しかしながら、同時に氏は、サーバレス環境を効果的に利用可能にするためには、さらなる学習と作業が必要だという認識も持っている。
今年初め、Axonチームは、イベントストア専用のAxonDBをリリースした。このストアがAxonHubのイベント格納に使用されているため、同社はこの2製品をAxon Serverに統合することを決定し、カンファレンス中に発表した。このサーバはオープンソースとエンタープライズ版の両方で提供される。
Axonの次期バージョンであるバージョン4の開発はすでに始まっており、最初のマイルストンが先日リリースされた。製品版のローンチは10月18日に予定されている。
Axon FrameworkはJVMプラットフォーム用のオープンソースプロダクトで、2009年にAllard Buijze氏によって創設された。2017年にはAxonプロダクトのみを扱うために、AxonIQが別会社として設立されている。
この記事を評価
- 編集者評
- 編集長アクション