Microsoftがリードするモダンな分散システム用ランタイムDaprとは?

2021年1月27日(水)
松下 康之 - Yasuyuki Matsushita
ステートレスからステートフルアプリまでカバーするDaprの最新情報をアップデート。

MicrosoftはCNCF(Cloud Native Computing Foundation)が主催するWebinarで、クラウドネイティブなシステムにおいて分散処理を実装するランタイムであるDaprを解説するセッションを実施した。CNCFのWebinarページには、CNCFにホストされている多数のプロジェクトのセッションだけではなくCNCFのメンバーによる技術解説が公開されている。今回紹介するセッションは2020年10月1日に公開されたもので、CNCFのプラチナムメンバーであるMicrosoftがコンテンツを提供したものになる。

参考:Dapr, Lego for microservices

セッションのタイトルは「Dapr, Lego for Microservices」というもので、マイクロサービスを構築する際にランタイムとして機能するDaprの最新情報を紹介する内容となった。

DaprをLegoに例えたセッションタイトル

DaprをLegoに例えたセッションタイトル

Daprに関しては2020年7月3日に公開した記事ですでに紹介しているが、今回はそれ以降の最新情報をアップデートするもので、デモなども交えてマイクロサービスの実装を解説する内容となった。登壇したのは、Azure, Office of CTOのPrincipal Program ManagerであるMark Chmarny氏だ。前述の記事で紹介したセッションは、Chmarny氏と同じグループのMark Russinovich氏が担当しているものだ。

2020年のDaprに関する記事:分散型アプリの開発と運用を分離するOAMとDapr、そしてKubernetes上の実装であるRudrとは?

動画のURL:Webinar: Dapr, Lego for microservices

Chmarny氏はまず、デベロッパーが持つインフラストラクチャー、プラットフォームに対する不満を説明し、開発言語や開発環境がプラットフォームやインフラストラクチャーに固定されていることを挙げた。これは単にOSだけではなく、クラウドやエッジデバイスも含んだ前提となっていると思われる。またモダンでクラウドネイティブなアーキテクチャーと既存のアプリケーションコード、そしてそれぞれに慣れたデベロッパーの間の乖離が起きていることを挙げた。

デベロッパーが持つ不満を解説

デベロッパーが持つ不満を解説

その回答としてMicrosoftが示したテクノロジーが、Dapr(Distributed Application Runtime)だ。次に示したスライドのサブタイトルに、Event-Driven、Portable、Microservice、Cloud and Edgeというキーワードが並ぶように、モダンなイベント駆動型のアプリケーションを、マイクロサービスとしてクラウドからエッジまでカバーできるように移行性を高めて開発するためのソフトウェアであることが透けて見える。

DaprはDistributed Application Runtimeの略

DaprはDistributed Application Runtimeの略

まずは概略としてオープンソースソフトウェアの属性であるリリースの数、プルされたイメージの回数、コンポーネントの数などが示された。ここでGitHubでの数値が目安となっているが、これは別にGitHubがMicrosoftの子会社であるからというよりは、GitHubがオープンソースプロジェクトの使用するレポジトリサービスのデファクトスタンダードということであろう。

Daprの概略

Daprの概略

Daprを設計する際の思想として挙げられたのが次のスライドだ。ここには「開発言語やフレームワークを限定しないこと」「ビルディングブロックとして必要な機能だけを組み込めること」「プラグインなどで拡張できること」「公開されたポータブルなAPIをベースとしていること」「プラットフォームを選ばないこと」などが説明された。

Daprの設計思想

Daprの設計思想

それを図示したのが次のスライドだ。

図式化されたDaprの概略

図式化されたDaprの概略

上部に開発言語やフレームワーク、下部にインフラストラクチャーを配置して、その中間に描かれるDaprは複数のブロックで機能を実装していることが明確に表されている。

Daprの機能ブロック図

Daprの機能ブロック図

このスライドでは、モダンなアプリケーションとして必須の機能がブロックとして実装されていることを説明している。特にサービスの起動やディスカバリー、メッセージを交換するためのパブサブ(Publish/Subscribe)、外部のサービスと連携するためのリソースバインディング、アクターモデルの実装などが紹介された。また自動的に採取されるオブザーバビリティのための機能や、ユーザーIDやパスワードなどのシークレットをセキュアに扱う機能も存在する辺りに、マイクロサービスやセキュリティに対する意識の高さが現れていると言える。

Daprの実装はサイドカーによるPodへのインジェクション

Daprの実装はサイドカーによるPodへのインジェクション

このスライドでは、Daprがアプリケーションのコードと同じPodにインジェクションされることで機能を実装していることが示されている。ここでは特にKubernetesを前提としていないことに注目だろう。実際、前述のMark Russinovich氏のプレゼンテーションでは、Kubernetes上のPodとして実装される場合もRaspberry Piでの実装でも、同じコードが実行できると語られている。

Daprのキーワードとしてエッジでの実装が挙げられていることでもわかるように、パブリッククラウド、オンプレミス、エッジデバイスのどこでも同じコードが実行できるという部分に、ポータビリティの高さと開発負荷の少なさを印象付けたい意図が見える。実際にDaprのコミュニティコールでも、サイドカー実装時のレイテンシーなどが紹介されていることから、Microsoftがエッジデバイスでの実装を重要だと思っていることは明らかだ。

Dapr on Kubernetesのダイヤグラム

Dapr on Kubernetesのダイヤグラム

そしてKubernetesでの実装も紹介された。ここではPodの中にサイドカーとしてDaprのランタイムが注入され、アプリケーションの通信を代替する仕組みであることがわかるだろう。すでにmTLSがDapr間の通信で実装されており、Open Policy Agent(OPA)やSecure Production Identity Framework For Everyone(SPIFFE)などとの連携などもユースケースとして挙げられているようだ。

パブサブについてCloudEventsでラップする形。

パブサブについてCloudEventsでラップする形。

Pod間のメッセージ交換にはパブサブが使われるが、Kafka、Redis、NATSなどの既存コンポーネントを選択することができると解説し、イベントのフォーマットはIBMやMicrosoftがリードするCloudEventsが使われていることが解説された。CloudEventsは2018年にCNCFでサンドボックスプロジェクトとしてホストされたプロジェクトで、アプリケーションが生成するイベントの仕様を決めることによってさまざまなシステム、アプリケーションが相互運用できることを目指している。

クレデンシャルの取り扱いもクラウドネイティブ的

クレデンシャルの取り扱いもクラウドネイティブ的

その後、外部のシステムとの連携のためのリソースバインディングを解説し、クレデンシャルの扱いについては外部のシステムと連携することを前提として、HashiCorpのVaultやパブリッククラウド各社のサービスなどとも連携が可能であることを解説した。

オブザーバビリティについて解説

オブザーバビリティについて解説

オブザーバビリティについては、新たにOpenTelemetryがサポートされることが解説された。OpenTelemetryは、Microsoftが開発をリードしていたOpenCensusがOpenTracingと統合されて登場したプロジェクトだ。またオープンソースだけではなく、DataDogなどの商用サービスも連携できるという。

アクターモデルも実装できる

アクターモデルも実装できる

ビルディングブロックとして最後に紹介されたのはアクターモデルだ。アクターモデルは並列処理の方法論として登場し、実装としてはJava/Scalaの分散フレームワークであるAkkaが有名だ。ここでの説明にはMMORPGなどのプレイヤーを想定して、シングルスレッドのステートフルなアプリケーションを分散処理するための方法論として紹介された。

さまざまなフレームワーク、SDKを利用できることを想定

さまざまなフレームワーク、SDKを利用できることを想定

次にデモとしてTwitterからTweetを読み込み、そのTweetの内容がネガティブかポジティプかを判定するアプリケーションをベースに、Daprの動作を解説した。

Twitterを使ったDaprのデモアプリケーション

Twitterを使ったDaprのデモアプリケーション

これは、以下の3つのマイクロサービスアプリケーションで構成されるシンプルなアプリケーションだ。

  • TweetProcessor:Tweetを読み込みMongoDBに格納
  • SentimentScorer:内容を判定
  • TweetViewer:UIとしてTweetと評価を表示

すべてのマイクロサービス間の通信はサイドカーとして注入されたDaprを介して行われ、Tweetのデータ保存にRedisに書き込むのもDaprのランタイムとなる。

オブザーバビリティも利用できる。ここではZipkinを利用

オブザーバビリティも利用できる。ここではZipkinを利用

デモではZipkin、Grafanaなどを使って実行されているアプリケーションを計測する部分も実演された。

Grafanaによるダッシュボード

Grafanaによるダッシュボード

最後にDaprの今後の予定が紹介された。v.011のリリースの次、2020年末にプロダクショングレードのv1.0が予定されているということだ。ここでのポイントは「セキュリティオーディットを受ける予定であること」そして「ベンダーニュートラルなガバナンスモデルに移行する」の2点だろう。セキュリティオーディットは、外部の審査を受けることで脆弱性がソフトウェアに入り込まないようなコードを実装することを目指すもので、Kubernetesも2019年に審査されている。

参考:Open sourcing the Kubernetes security audit

またベンダーニュートラルなガバナンスモデルとしては、CNCFやLinux Foundationなどが例として挙げられるだろう。2020年7月にGoogleがトレードマークの管理だけを行う組織Open Usage Commonsを創設し、Istioをその組織に寄贈したことで議論が湧きあがったことを思い出すと、Microsoftがベンダーニュートラルなガバナンスモデルを明記したことの意味は大きい。

ここでCNCFのWebinarは終了したが、Dapr関連として、2020年8月に公開された.NETConfのセッションを少しだけ紹介したい。これは「Adding a Little DAPR to Your .NET Microservices」と題されたセッションで、.NETの環境の中でマイクロサービスを実装するプラットフォームとしてDaprが紹介されている。

特に興味深いのはデモの部分だ。ここでは簡単なECサイトをマイクロサービスで実装し、そのメッセージ交換の部分にRabbitMQを使って実装している。C#のコードを編集することなく、Dockerコンテナを作り直すだけでRedisを使ったメッセージ通信に置き換えてすぐに実行できることが紹介された。またVisual Studio CodeでC#のソースコードにブレークポイントを設定して、ビルドし実行、その後、ブレークポイントで実行が止まるところを実際に示された。

Cecil Phillip氏によるプレゼンテーションとデモ

Cecil Phillip氏によるプレゼンテーションとデモ

デモは15分辺りから始まるが、商品をショッピングカートに入れてチェックアウトするというECの一部の動作を実装し、それがマイクロサービスとして動いているようすを解説するものになる。

Phillip氏によるECサイトのデモ

Phillip氏によるECサイトのデモ

実際にRabbitMQのダッシュボードを使ってECサイトのメッセージ通信の概略を説明した後に、Jaegerを使って3つのPodがメッセージ交換を行っているようすが示された。

Jaegerを使ってPod間のメッセージ通信を可視化

Jaegerを使ってPod間のメッセージ通信を可視化

Visual Studio Codeを使ったブレークポイントのデモは、Microsoftのプラットフォームやツールに慣れ親しんでいる.NETConfの参加者を対象にしていることを想定すれば、通常使っている開発ツールですぐにDaprが使えるという印象を強く与えるものとなった。マイクロサービスを検討している.NETデベロッパーには参考になったであろう。

Azure Functionsとの連携も可能に

Azure Functionsとの連携も可能に

Azureのサーバーレス実装であるAzure Functionsとの連携も解説された。

参考:Adding a Little DAPR to Your .NET Microservices

最後に、Kubernetesがプラットフォームとして優れている点の一つとして、オートヒーリング、オートスケーリングが挙げられるが、Daprが備える同様の機能を解説しているブログを紹介したい。これはKEDA(Kubernetes Event-Driven Autoscaling)を使って実装したもので、著者はベルギー在住の元Microsoftのエンジニアだ。

参考:KEDAでオートスケーリングを実装した例

以上が、2020年10月時点でのDaprの情報を集約した内容と言える。しかしコミュニティは常に活動を続けており、1.0のリリースに向けて精力的に開発が続いている。コミュニティのネット会議も頻繁に行われており、SNSでの発信も活発だ。これからもDaprの動向には要注目だろう。

DaprプロジェクトのTwitter:@DaprDev

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

システム開発イベント

OpenShift Commons Gatheringで語られたOpenShiftに最適なCI/CDとは

2021/3/2
レッドハット株式会社のクラウドソリューションアーキテクト、北山晋吾氏によるCI/CDのセッションを紹介。
働き方イベント

オンラインならではの工夫でリアル開催を凌ぐ盛り上がりに! 「3年後の未来を描け! 悩み爆発 クリエイター1000人祭り」レポート

2021/2/9
2020年12月にオンラインで開催された「3年後の未来を描け!悩み爆発クリエイター1000人祭り」を紹介します。
ITインフライベント

ビルドからリリースまでを抽象化するWaypointにディープダイブ

2021/2/4
HashiCorpがリリースしたWaypointの内部構造など詳細について解説されたセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています