Enterprise Distributed Application Service (EDAS) は、マイクロサービスアプリケーションの構築に Apache Dubbo をサポートします。本ガイドでは、Dubbo のサービスプロバイダーインタフェース (SPI) 拡張システム、フレームワークの内部構造、および設計原則について説明します。
SPI 拡張システムの仕組み
Dubbo は、コアをモジュール化するために軽量な SPI メカニズムを採用しています。主要なコンポーネント(プロトコル、ロードバランサー、ルーター、レジストリなど)はすべて、プラグイン可能な拡張ポイントとして定義されています。これにより、以下の操作が可能です。
組み込み実装の差し替え:フレームワークのコードを変更せずに、単一の設定プロパティを変更するだけで実現できます。
カスタム実装の追加:Java インターフェイスを実装し、SPI ファイルを通じて登録することで実現できます。
動作の透過的拡張:Dubbo はサードパーティ製の拡張と組み込み実装を同等に扱います。
基盤となるアーキテクチャについては、以下の「フレームワーク設計」と「SPI 読み込み」のトピックから始めることを推奨します。
SPI 拡張の実装
Dubbo では、機能別に分類された 20 を超える拡張ポイントが定義されています。各拡張ポイントは、カスタム実装をサポートする Java インターフェイスです。
RPC およびトラフィック管理
| 拡張ポイント | 制御対象 |
|---|---|
| Protocol | リモート呼び出しのネットワークプロトコル |
| Filter | ロギングや認証などの横断的関心事に対応する、リクエストおよび応答のフィルターチェーン |
| Cluster | 呼び出しが失敗した際のフォールトトレランス戦略(例:フェールオーバー、フェールファスト、フォーク) |
| Router | トラフィックをどのプロバイダーに配信するかを決定するルーティングルール |
| LoadBalance | 複数のプロバイダー間でのリクエスト配信戦略 |
| Merger | フォーク呼び出しにおける結果のマージロジック |
サービスディスカバリーおよび構成管理
| 拡張ポイント | 制御対象 |
|---|---|
| Registry | サービスレジストリとの連携 |
| Monitor | メトリクス収集およびモニタリングデータの報告 |
トランスポートおよびシリアル化
| 拡張ポイント | 制御対象 |
|---|---|
| Transporter | ネットワークトランスポート層 |
| Exchanger | トランスポート層上でのリクエスト・応答交換パターン |
| Networker | マルチレジストリシナリオにおけるネットワークトポロジ管理 |
| Serialization | データのシリアル化フォーマット |
ライフサイクルおよびプロキシ処理
| 拡張ポイント | 制御対象 |
|---|---|
| InvokerListener | サービス呼び出しイベントが発生した際にトリガーされるコールバック |
| ExporterListener | サービス公開イベントが発生した際にトリガーされるコールバック |
| ExtensionFactory | 拡張インスタンスの作成および管理を行うファクトリ |
| ProxyFactory | サービスプロキシの作成を行うファクトリ |
| Compiler | 動的な Java ソースコードのコンパイル |
| Dispatcher | 受信メッセージに対するスレッド配信戦略 |
| ThreadPool | サービス実行時のスレッドプール戦略 |
診断およびユーティリティ
| 拡張ポイント | 制御対象 |
|---|---|
| TelnetHandler | telnet 経由のランタイム管理コマンドを処理するハンドラー |
| StatusChecker | サービスステータス報告のためのヘルスチェックロジック |
| PageHandler | 組み込み HTTP サーバー向けのステータスページレンダリング |
| Container | サービスコンテナのライフサイクル管理 |
| Cache | 繰り返し呼び出しに対する結果キャッシュ戦略 |
| Validation | 呼び出し前のパラメーター検証 |
| LoggerAdapter | 異なるロギングフレームワークを統合するためのアダプター |
フレームワークの内部構造
これらのトピックでは、Dubbo の構築方法および SPI メカニズムの内部動作について説明します。
| トピック | 内容 |
|---|---|
| Source code build | リポジトリから Dubbo のソースコードをビルドする方法 |
| Framework design | 全体のアーキテクチャ、レイヤード設計、およびモジュール間依存関係 |
| SPI loading | Dubbo が SPI 拡張を検出し、読み込み、インスタンス化する仕組み |
| Implementation details | コアコンポーネントの内部実装 |
| Configuration center | 分散サービス向けの集中型構成管理 |
| Public agreement | Dubbo コンポーネント間で共有される公開プロトコル規則および契約 |
設計原則
Dubbo フレームワークは、これらのトピックで文書化された一連の設計原則に従って開発されています。フレームワークへの貢献やカスタム拡張の構築時には、本項を参照してください。
| トピック | 内容 |
|---|---|
| Attention to detail | フレームワークコードにおいて、エッジケースや細かな設計判断が重要である理由 |
| Foundational design patterns | コードベース全体で使用されるコア設計パターンおよび規則 |
| Extensibility and incremental extension | 後方互換性と合成可能性を備えた拡張の設計方法 |
| Configuration design | 構成パラメーターおよびデフォルト値の設計に関するガイドライン |
| Robustness | フレームワークにおけるエラー処理、レジリエンスパターン、防御的コーディング |
| Fool-proof design | 明確な API、妥当なデフォルト値、入力検証によって誤用を防止する設計 |
| Extension point refactoring | 拡張ポイントインタフェースのリファクタリングを行うタイミングおよび方法 |
コード品質基準
| トピック | 内容 |
|---|---|
| Versioning | バージョン番号付けの規則および互換性保証 |
| Checklist | フレームワーク変更に対するリリース前検証チェックリスト |
| Code smells | Dubbo フレームワークコードで回避すべき一般的なアンチパターン |
| Coding conventions | コードスタイル、命名規則、およびフォーマット基準 |
| Compatibility testing | 後方互換性および前方互換性のテスト戦略 |