Daprとは

Dapr(Distributed Application Runtime)」は、その名の通り分散アプリケーションランタイムです。マイクロサービス間の通信パターンとして、「サービス呼び出し型」と「イベントドリブンのPub/Sub型」の両方をサポートします。

サイドカーパターンが適用され、サービス呼び出しや通信の暗号化といった業務ロジックに直接関係ない要素をアプリケーションから分離することができ、業務ロジックの開発に集中することができます。

  • Dapr

    Daprの全体像/出典:Daprの公式サイト

DaprはCNCF(Cloud Native Computing Foundation)のIncubationプロジェクトで、本稿執筆時点(2022年6月8日)での最新バージョンはv1.7.4です。

Daprが提供する機能

Daprが提供する主な機能をアーキテクチャの中で表現すると、以下のようになります。サービス間の呼び出し(Service Invocation)や、Pub/Subによるイベント駆動のサービスの起動(Publish & Subscribe)、秘匿情報の管理(Security Management)など、分散アプリケーションに関わるさまざまな機能が提供されています。

  • Dapr

    Daprの主な機能/出典:Daprの公式サイト

それぞれの機能の概要は以下の通りです。各機能はカプセル化されており、「ビルディングブロック」とも呼ばれます。これにより、機能を柔軟に組み合わせられる点が特徴です。

分類 機能名 概要
サービス間連携方式(呼び出し) 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つとして紹介されています

  • Dapr

    ビルディングブロック/出典:Daprの公式サイト

対応プラットフォーム

対応するプラットフォームは以下の通りです。さまざまな環境に広く対応していることがおわかりいただけるかと思います。

分類
言語 .NET、Python、JavaScript、Java、Go、PHP、Rust、C++、JavaScript
基盤 AWS、GCP、Azure、Alibaba Cloud、Kubernetes、virtual/physical machines
通信・セキュリティ mTLS、spiffe、OAuth2BearerOpen 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)の更新管理やエンドポイントの管理
  • Dapr

    Kubernetes上の構成/出典:Daprの公式サイト