Microsoftがリードするモダンな分散システム用ランタイム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に関しては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というキーワードが並ぶように、モダンなイベント駆動型のアプリケーションを、マイクロサービスとしてクラウドからエッジまでカバーできるように移行性を高めて開発するためのソフトウェアであることが透けて見える。
まずは概略としてオープンソースソフトウェアの属性であるリリースの数、プルされたイメージの回数、コンポーネントの数などが示された。ここでGitHubでの数値が目安となっているが、これは別にGitHubがMicrosoftの子会社であるからというよりは、GitHubがオープンソースプロジェクトの使用するレポジトリサービスのデファクトスタンダードということであろう。
Daprを設計する際の思想として挙げられたのが次のスライドだ。ここには「開発言語やフレームワークを限定しないこと」「ビルディングブロックとして必要な機能だけを組み込めること」「プラグインなどで拡張できること」「公開されたポータブルなAPIをベースとしていること」「プラットフォームを選ばないこと」などが説明された。
それを図示したのが次のスライドだ。
上部に開発言語やフレームワーク、下部にインフラストラクチャーを配置して、その中間に描かれるDaprは複数のブロックで機能を実装していることが明確に表されている。
このスライドでは、モダンなアプリケーションとして必須の機能がブロックとして実装されていることを説明している。特にサービスの起動やディスカバリー、メッセージを交換するためのパブサブ(Publish/Subscribe)、外部のサービスと連携するためのリソースバインディング、アクターモデルの実装などが紹介された。また自動的に採取されるオブザーバビリティのための機能や、ユーザーIDやパスワードなどのシークレットをセキュアに扱う機能も存在する辺りに、マイクロサービスやセキュリティに対する意識の高さが現れていると言える。
このスライドでは、Daprがアプリケーションのコードと同じPodにインジェクションされることで機能を実装していることが示されている。ここでは特にKubernetesを前提としていないことに注目だろう。実際、前述のMark Russinovich氏のプレゼンテーションでは、Kubernetes上のPodとして実装される場合もRaspberry Piでの実装でも、同じコードが実行できると語られている。
Daprのキーワードとしてエッジでの実装が挙げられていることでもわかるように、パブリッククラウド、オンプレミス、エッジデバイスのどこでも同じコードが実行できるという部分に、ポータビリティの高さと開発負荷の少なさを印象付けたい意図が見える。実際にDaprのコミュニティコールでも、サイドカー実装時のレイテンシーなどが紹介されていることから、Microsoftがエッジデバイスでの実装を重要だと思っていることは明らかだ。
そしてKubernetesでの実装も紹介された。ここではPodの中にサイドカーとしてDaprのランタイムが注入され、アプリケーションの通信を代替する仕組みであることがわかるだろう。すでにmTLSがDapr間の通信で実装されており、Open Policy Agent(OPA)やSecure Production Identity Framework For Everyone(SPIFFE)などとの連携などもユースケースとして挙げられているようだ。
Pod間のメッセージ交換にはパブサブが使われるが、Kafka、Redis、NATSなどの既存コンポーネントを選択することができると解説し、イベントのフォーマットはIBMやMicrosoftがリードするCloudEventsが使われていることが解説された。CloudEventsは2018年にCNCFでサンドボックスプロジェクトとしてホストされたプロジェクトで、アプリケーションが生成するイベントの仕様を決めることによってさまざまなシステム、アプリケーションが相互運用できることを目指している。
その後、外部のシステムとの連携のためのリソースバインディングを解説し、クレデンシャルの扱いについては外部のシステムと連携することを前提として、HashiCorpのVaultやパブリッククラウド各社のサービスなどとも連携が可能であることを解説した。
オブザーバビリティについては、新たにOpenTelemetryがサポートされることが解説された。OpenTelemetryは、Microsoftが開発をリードしていたOpenCensusがOpenTracingと統合されて登場したプロジェクトだ。またオープンソースだけではなく、DataDogなどの商用サービスも連携できるという。
ビルディングブロックとして最後に紹介されたのはアクターモデルだ。アクターモデルは並列処理の方法論として登場し、実装としてはJava/Scalaの分散フレームワークであるAkkaが有名だ。ここでの説明にはMMORPGなどのプレイヤーを想定して、シングルスレッドのステートフルなアプリケーションを分散処理するための方法論として紹介された。
次にデモとしてTwitterからTweetを読み込み、そのTweetの内容がネガティブかポジティプかを判定するアプリケーションをベースに、Daprの動作を解説した。
これは、以下の3つのマイクロサービスアプリケーションで構成されるシンプルなアプリケーションだ。
- TweetProcessor:Tweetを読み込みMongoDBに格納
- SentimentScorer:内容を判定
- TweetViewer:UIとしてTweetと評価を表示
すべてのマイクロサービス間の通信はサイドカーとして注入されたDaprを介して行われ、Tweetのデータ保存にRedisに書き込むのもDaprのランタイムとなる。
デモではZipkin、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#のソースコードにブレークポイントを設定して、ビルドし実行、その後、ブレークポイントで実行が止まるところを実際に示された。
デモは15分辺りから始まるが、商品をショッピングカートに入れてチェックアウトするというECの一部の動作を実装し、それがマイクロサービスとして動いているようすを解説するものになる。
実際にRabbitMQのダッシュボードを使ってECサイトのメッセージ通信の概略を説明した後に、Jaegerを使って3つのPodがメッセージ交換を行っているようすが示された。
Visual Studio Codeを使ったブレークポイントのデモは、Microsoftのプラットフォームやツールに慣れ親しんでいる.NETConfの参加者を対象にしていることを想定すれば、通常使っている開発ツールですぐにDaprが使えるという印象を強く与えるものとなった。マイクロサービスを検討している.NETデベロッパーには参考になったであろう。
Azureのサーバーレス実装であるAzure Functionsとの連携も解説された。
参考:Adding a Little DAPR to Your .NET Microservices
最後に、Kubernetesがプラットフォームとして優れている点の一つとして、オートヒーリング、オートスケーリングが挙げられるが、Daprが備える同様の機能を解説しているブログを紹介したい。これはKEDA(Kubernetes Event-Driven Autoscaling)を使って実装したもので、著者はベルギー在住の元Microsoftのエンジニアだ。
以上が、2020年10月時点でのDaprの情報を集約した内容と言える。しかしコミュニティは常に活動を続けており、1.0のリリースに向けて精力的に開発が続いている。コミュニティのネット会議も頻繁に行われており、SNSでの発信も活発だ。これからもDaprの動向には要注目だろう。
DaprプロジェクトのTwitter:@DaprDev
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Open Source Summit NA 2023から、分散処理ランタイムのDaprで実装するワークフローを紹介
- WASM Meetup@ByteDanceで垣間見たWebAssemblyの静かな広がり
- 分散型アプリの開発と運用を分離するOAMとDapr、そしてKubernetes上の実装であるRudrとは?
- KubeCon EU開幕、前日に行われたプレカンファレンスからeBPFとTetragonを紹介
- DaprコミュニティコールからDaprのHPC関連の事例とKeycloakとの連携を紹介
- KubeCon EU 2021からセキュアでコンパクトなバイナリーフォーマットWASMのセッションを紹介
- Dapr 1.0で知るMicrosoftのガバナンス意識の高さとは?
- Observability Conference 2022から、サイボウズのオブザーバービリティ事例を紹介
- Oracle Cloud Hangout Cafe Season4 #4「Observability 再入門」(2021年9月8日開催)
- KubeCon EUレポート Alibabaが本番環境で使うKubeVelaとDaprのセッションを紹介