Daprとは
「Dapr(Distributed Application Runtime)」は、その名の通り分散アプリケーションランタイムです。マイクロサービス間の通信パターンとして、「サービス呼び出し型」と「イベントドリブンのPub/Sub型」の両方をサポートします。
サイドカーパターンが適用され、サービス呼び出しや通信の暗号化といった業務ロジックに直接関係ない要素をアプリケーションから分離することができ、業務ロジックの開発に集中することができます。
DaprはCNCF(Cloud Native Computing Foundation)のIncubationプロジェクトで、本稿執筆時点(2022年6月8日)での最新バージョンはv1.7.4です。
Daprが提供する機能
Daprが提供する主な機能をアーキテクチャの中で表現すると、以下のようになります。サービス間の呼び出し(Service Invocation)や、Pub/Subによるイベント駆動のサービスの起動(Publish & Subscribe)、秘匿情報の管理(Security Management)など、分散アプリケーションに関わるさまざまな機能が提供されています。
それぞれの機能の概要は以下の通りです。各機能はカプセル化されており、「ビルディングブロック」とも呼ばれます。これにより、機能を柔軟に組み合わせられる点が特徴です。
分類 | 機能名 | 概要 |
---|---|---|
サービス間連携方式(呼び出し) | Service Invocation | 通信の暗号化、リトライ制御、アクセス制御、サービスディスカバリなどサービス呼び出しに関わる機能 |
サービス間連携方式(Pub/Sub) | Publish & Subscribe | イベント管理、コンテントタイプの設定、メッセージルーティングなどPub/Subに関わる機能。Redis Streams、NATS Streaming、Azure Service Bus、or GCP pub/subなどに対応 |
データ項目管理 | Input/Output Bindings | サービス間でやりとりするデータ項目の管理(YAMLでマッピング定義)。HTTPやgRPCに対応 |
状態管理 | State Management | データの一貫性管理やアプリケーション間のデータ共有、データ暗号化など、ステートフルなアプリケーション構築のための機能。Redis、Amazon DynamoDB、Azure Cosmos DB、Cassandraなどに対応 |
セキュリティ | Secret Management | 秘匿情報の管理。AWS Secrets Manager、HashiCorp Vault、Google Key Management、Azure Key Vaultなどに対応 |
拡張性・信頼性 | Virtual Actors | 拡張性(scalability)や信頼性を担保するvirtual actor patternに関わる機能 |
可観測性 | Observability | メトリクス、ログ、トレースの3つによりシステムのデバッグ・運用監視を可能にする |
設定 | Configuration | 設定の変更・取得のためのConfiguration APIを提供。設定はConfigurationストアに格納される |
なお、ObservabilityとConfigurationについては、上図には掲載されていません。ただし、公式サイトでは下図の通りビルディングブロックの1つとして紹介されています
対応プラットフォーム
対応するプラットフォームは以下の通りです。さまざまな環境に広く対応していることがおわかりいただけるかと思います。
分類 | 例 |
---|---|
言語 | .NET、Python、JavaScript、Java、Go、PHP、Rust、C++、JavaScript |
基盤 | AWS、GCP、Azure、Alibaba Cloud、Kubernetes、virtual/physical machines |
通信・セキュリティ | mTLS、spiffe、OAuth2、Bearer、Open Policy Agent |
データストア | Redis、MongoDB、Azure Cosmos DB、PostgreSQL、Amazon DynamoDB、Memcached、Google Firestore、Cloudstate、Couchbase、HashiCorp Consul、Hazelcast、ZooKeeper、RethinkDB、Aerospike |
Pub/Sub | kafka、RabbitMQ、Azure Service Bus、Amazon SNS、Google Cloud Pub/Sub |
Observability | OpenTelemetry、Jaeger、AppInsights、Zipkin、New Relic |
Kubernetes上でどんなアーキテクチャになるか
Kubernetes上では以下の通り、4つのサービスが動作します。それぞれの役割を大まかに把握しておくと、次節で説明する実際にDaprを構築するプロセスを理解しやすくなるでしょう。
サービス名 | 下図における表記 | 説明 |
---|---|---|
dapr-placement | Actor partition placement | actorインスタンスとPodのマッピングテーブルを構成 |
dapr-sidecar-injector | Dapr runtime injector | アノテーションや環境変数の設定 |
dapr-sentry | Cert authority and identity | サービス間のmTLS通信のための認証局として動作 |
dapr-operator | Update component changes | Componentカスタムリソース(Dapr Components)の更新管理やエンドポイントの管理 |