Microsoft + CNCF Incubating のクラウドネイティブアプリケーションランタイム。Distributed Application Runtime、サイドカーパターン + Building Blocks で State / Pub-Sub / Bindings / Actors 等を提供、Kubernetes + Edge で活用。
Dapr(ダプル、Distributed Application Runtime)は、Microsoft が 2019 年 10 月に公開、2021 年に CNCF Incubating プロジェクト昇格したクラウドネイティブアプリケーションランタイムです。「分散アプリケーションを書きやすくする」というビジョンで、Microsoft 元 Azure CTO の Mark Russinovich(マーク・ルシノビッチ)+ Haishi Bai(ハイシ・バイ)が中心に開発を主導しました。
技術アーキテクチャは、(1)サイドカーパターン(Sidecar)・(2)Building Blocks(分散システムの共通機能を抽象化した API)、の 2 つの中核概念で構成されます。サイドカーパターンとは、アプリケーションプロセスと並行して動作するヘルパープロセス(daprd、Dapr ランタイム)が分散システム機能を提供する設計で、アプリ自体は HTTP / gRPC で daprd を呼び出すだけで、複雑な分散ロジックを Dapr に委譲できます。
Building Blocks は 8 種類の API で構成されます。(1)State Management: 分散ステート + キーバリューストア、Redis / Cassandra / Cosmos DB / DynamoDB / etcd / MongoDB / PostgreSQL 等のバックエンド抽象化・(2)Publish & Subscribe: メッセージング Pub/Sub、Kafka / RabbitMQ / Azure Service Bus / Google Pub/Sub / NATS 等・(3)Bindings: 外部システム連携、Twilio / SendGrid / S3 / Cosmos DB / GraphQL / GitHub / 70+ サービス・(4)Service Invocation: サービス間呼出、リトライ + サーキットブレーカー + mTLS 暗号化・(5)Actors: 分散アクターモデル、Erlang / Akka 風・(6)Workflows: 分散ワークフロー、Temporal / Step Functions 風・(7)Secrets: シークレット管理、Vault / Azure Key Vault / AWS Secrets Manager・(8)Observability: 分散トレース(OpenTelemetry)+ メトリクス(Prometheus)、です。
Dapr の最大の利点は言語非依存性です。アプリケーションは HTTP / gRPC で daprd を呼び出すだけで Building Blocks が利用可能で、Java / Python / Go / Node.js / .NET / Rust / PHP / Ruby などほぼあらゆる言語で実装可能です。クラウドベンダー非依存性も重要で、Building Blocks のバックエンドコンポーネント(Redis / Kafka / Vault 等)を YAML 設定で切り替えるだけで、AWS / Azure / GCP / オンプレ間の移行が容易です。
主な利用場面は、(1)マイクロサービスアプリケーション(複雑な分散ロジック簡素化)・(2)Kubernetes クラウドネイティブアプリ・(3)Edge コンピューティング(IoT デバイス + Kubernetes Edge + 軽量 Distributed App)・(4)サーバーレス + Workflow(AWS Step Functions / Azure Logic Apps の代替)・(5)CICD パイプライン(複雑なデプロイメントロジックの抽象化)、などです。
主要採用ユーザーは、Microsoft / Bosch / Roadwork(欧州道路工事)/ Defy.Trade / DeFiAccount / DocuSign / FastPair / Italtel / OroCommerce / Snowfox / Vodafone / Volvo Cars 等の大企業 + スタートアップで、特にマイクロサービス + ハイブリッドクラウド + Edge 環境で採用が広がっています。
| ランタイム | 提供 | 設計思想 |
|---|---|---|
| Dapr | Microsoft / CNCF | サイドカー + Building Blocks |
| Akka | Lightbend | アクターモデル + JVM |
| Erlang OTP | Ericsson |
| アクターモデル + Erlang VM |
| Cloud Native Workflow(Temporal) | Temporal Inc. | ワークフロー専用 |
| AWS Step Functions | AWS | クラウド SaaS ワークフロー |
| Azure Durable Functions | Microsoft | クラウド SaaS Workflow |
Dapr は通常のコンシューマ自作 PC で必要になる技術ではありませんが、ホビーホームラボ + マイクロサービス開発学習 + 自宅 Kubernetes 環境の上級者には極めて有用です。Docker Compose / Kubernetes 環境で dapr init だけで簡単に起動可能で、HTTP API 経由で State / Pub-Sub / Service Invocation 等の機能をすぐに試せます。
Java / Python / Go / Node.js / .NET 等のあらゆる言語で Dapr SDK を活用したマイクロサービス開発の学習が可能で、業務 Kubernetes + マイクロサービス + クラウドネイティブ開発スキルの習得に役立ちます。Dapr Quickstart + Tutorial も豊富で、Microsoft + CNCF コミュニティが活発で初学者にも優しい環境です。
Q1: Dapr と Service Mesh(Istio / Linkerd)の違いは? A: Service Mesh は L4-L7 ネットワーク機能(LB + 暗号化 + 観測性)を提供、Dapr はアプリケーション機能(State + Pub-Sub + Workflow + Actors)を抽象化します。両者は補完関係で、Service Mesh + Dapr を組み合わせて利用するケースも多いです。
Q2: 言語非依存とは具体的にどういうことですか? A: Java / Python / Go / Node.js / .NET / Rust 等の各言語で Dapr SDK が提供されますが、すべて HTTP / gRPC で daprd ランタイムを呼び出すだけです。例えば、Python アプリで Dapr State を保存 + Java アプリで読出、というクロス言語マイクロサービスが Dapr Building Blocks で簡単に実現できます。
Q3: 自宅で Dapr を試す方法は?
A: dapr init(無料)で Self-Hosted モードで起動可能、Docker 不要でローカル PC でも動作します。Quickstart Tutorial(GitHub: dapr/quickstarts)で 8 つの Building Blocks を実際にコード書いて学習できます。Kubernetes 環境では Helm Chart + 1 コマンドデプロイで本番運用級環境構築も容易です。