この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 5085|答える: 1

[出典] バーチャル俳優:Dapr vs Orleans

[リンクをコピー]
掲載地 2022/12/29 14:24:52 | | | |
先週、私はバーチャルアクターの概念を研究することでソフトウェア開発に取り組みました。 結局、DaprとOrleansという2つの異なるフレームワークを調べました。

どちらも非常に簡潔なプロジェクトで、興味深いユースケースがたくさんあります。 どちらも「バーチャル」アクターという考え方を使っています。 バーチャルアクターとは、以下のような状態および論理ユニットのことです。

  • IDによって一意に識別できます
  • シングルスレッドです
  • インメモリでも永続的でも構いません。そのライフサイクルはフレームワークによって管理されます


私はバーチャルアクターのアイデアがとても好きで、複雑なタスクフローを扱うためのスケーラブルで信頼性の高いツールを構築する際に非常に役立っています。 各タスクがシングルスレッドの仮想参加者であれば、レースコンディション問題は消えます。

OrleansとDaprはどちらもMicrosoftのプロジェクトなので、Microsoftのカフェテリアで『Western Story』のような対決の日を想像しています。

オルレアン

YouTubeで動画を見てしばらく気になっていたOrleansから始めました。 最初は本当にひどい展開でした。なぜなら、すべてのNuGetパッケージの4.xバージョンを使うと思っていたからです。 しかし、彼らのドキュメントは4.xパッケージには全く対応していません。 結局バージョン3.6.2を使いました。

グレイン / 状態 / タイマー

自身の状態を追跡し、動作を実行するグレインを作成するのは非常に簡単です。 さらに、Grain Persistenceのドキュメントに従い、自分でCosmosDB(SQL API)のIGrainStorage実装を作成することができました。

アラーム

リマインダーの設定も簡単です。 しかし、現実世界の永続性を設定しようとしました。 今のところ、私の調査ではすべてをきちんと整理し、ComsosDBに保存しようとしています。 残念ながら、Orleansのリマインダー永続化パッケージは全く動作しません。 結局、AzureStorageパッケージに切り替えざるを得ませんでした。 つまり、データは半分がSQL APIアカウントに、半分がテーブルAPIアカウントに入っています。

ストリーム

そこがうまくいかなかったところです。 Orleansでは、フローはGUIDとオプションの名前空間で識別されます。 ストリームをGUIDで識別しなければならない理由があるのは確かですが、それは実用的ではありません。

ストリームは簡単に作成できたのに、一度停止してプロジェクトを再起動し、新しいイベントをトリガーすると、すべてがクラッシュしてしまい、とてもフラストレーションを感じています。

続いて非常に貴重な情報があります。オルレアンのコードを逆解析するのに8時間かかったのです。

グレインがストリームサブスクライバーの場合、そのチャンネルはOnActivateAsyncメソッドでサブスクリプションハンドルでResumeAsyncを呼び出す必要があります。そうでなければ、認識されないエラーでクラッシュします。

同じサブスクリプションが重複する問題もあったので、そのコードを使ってすべての穀物のサブスクリプションを削除し、再作成しました:


その他のオーリンズのトラブル/ヒント

StreamsはAzure Event Hubs(AddEventHubStreams経由)とうまく連携します。

CosmosDBB SQL APIのGrain名に特別な文字や他の文字は使わないでください!

オルレアンの結論

オルレアンは好きで、可能性を感じています。 ただし、習得曲線は非常に急です。 ストリーミングに長年苦労したため、クラスターやデプロイメントの仕組みを勉強する時間がありません。

ダプル

オルレアンの代替を探してDaprを見つけました。 しかもMicrosoftが支援するプロジェクトでもあるのは少し奇妙です。 おそらく彼らは適者生存のアプローチを取るためにここにいるのでしょう。 もしそうなら、Daprは生き残ると思います。

まず、DaprのREST/gRPCベースの設計により、アクターは任意のプログラミング言語で実装可能です。 また、参加者、ステータス、タイマー、リマインダー、イベントなどすべてを単一のRedisインスタンスで管理するのは簡単だと感じました。 さらに、Daprを使い始めるのにかかる時間は約3分の1程度でした。 これほど速い立ち上げ時間は、Daprの優れたドキュメントのおかげです。

俳優 / タイマー / リマインダー

今、Daprのドキュメントが素晴らしいと言いましたか? まあ、JavaScriptの例以外はどこにでも載っています。 私はDAPRでほとんどの時間を過ごし、アクターのメソッドを呼び出す方法を模索しています。 Dapr Javascriptサンプルのコードは以下の通りです:

これは明らかに時代遅れです。 この3行をDaprのテスト/サンプルコード探索で誘導するのに多くの時間を費やさなければなりませんでした

状態の取得や設定のコード例にも似た問題があるので、GitHubのイシューを作成しました。

そういった小さな問題を除けば、俳優のセットアップは簡単です。

キャストのタイマーやリマインダーの設定もとても簡単です。

状態

私はDaprをPostgresで非常に簡単に永続させる設定できました。

私が気づいたことの一つは、リマインダーの保存方法にスケーラビリティの問題があるかもしれないということです。 Daprは特定の参加者タイプに関するすべてのアラートを単一のJSON配列に保存します。 もし誰かが大量のリマインダーを持っていたらどうなるのでしょうか?



その他のDAPRに関する落とし穴・ヒント

JavaScript SDKのコードを閲覧して気づいたことの一つは、コードベースにコメントがほとんどないことです。 そのため、何かを突き止めるのはほぼ不可能になります。 例えば、状態管理者のaddOrUpdateStateメソッドにはupdateValueFactoryという3つ目のパラメータがあります。 コードにコメントがなければ、コールバックの目的を特定するのはほぼ不可能です。

また、「dapr init」コマンドを使ってredisコンテナをセットアップ・実行しようとするのがどれほど好きかもわかりません。 もしすでにredisコンテナを持っていたらどうしますか? もしPostgreを使いたい場合はどうすればいいですか? dapr init機能の変更方法を説明するドキュメントが見つかりません。

pubsubの使い方に困っている方への注意書きです。 出版社と購読者の両方を動かすには「dapr run」を必ず使わなければなりません:

アクターやpubsubの場合、--app-portパラメータを使ってdaprにサービスがどのポートで動作しているかを知らせることが重要です。 pubsubイベントやアクターコールはDaprサイドカーからhttpコールを通じてサービスに送信されるため、どこに送るかを知る必要があります:

私は自宅ネットワークの2台の異なるマシンでpubsub加入者インスタンスを起動して、小さなDaprのセルフホスト「クラスター」をテストしました。 ちょうどうまくいったんです!

DAPR結論

分散アプリケーションやバーチャルアクターについてもっと知りたいなら、まずはDaprから始めることをお勧めします。 『オルレアン』はオリジナルの先駆者であり、『ダプル』は次のレベルに進んだリブート作品でした。

元のリンク:ハイパーリンクのログインが見えます。





先の:閲覧。 PDBファイルの内容情報
次に:.NET/C#はRdisを使ってBitMapベースのブルームアルゴリズムを実装しています
 地主| 掲載地 2022/12/29 14:25:28 |
マイクロソフト・オーリンズ

Orleansは、信頼性が高くスケーラブルかつ分散型アプリケーションを構築するためのクロスプラットフォームフレームワークです。 分散アプリケーションとは、複数のプロセスにまたがるアプリケーションと定義され、しばしばピアツーピア通信を用いてハードウェアの境界を超越します。 Orleansは、単一のオンプレミスサーバーから、クラウド上の数百の分散型高可用性アプリケーションへとスケールします。 Orleansは馴染み深い概念やC#の慣用句をマルチサーバー環境に拡張しています。 Orleansは弾力性と拡張性を重視して設計されています。 ホストがクラスターに参加すると、新たなアクティベーションを受け入れることができます。 ホストがスケールインやコンピュータ障害によりクラスタを退出すると、そのホストでの以前のアクティベーションは必要に応じて残りのホストで再活性化されます。 オルレアンのクラスターは単一のホストに縮小できます。 弾性スケーリングを可能にするのと同じ特性が、フォールトトレランスも可能にします。 クラスターは自動的に障害を検出し、迅速に復旧します。

Orleansの主な設計目標の一つは、共通のパターンとAPIセットを提供することで分散アプリケーション開発の複雑さを簡素化することです。 シングルサーバーアプリケーション開発に慣れた開発者は、Orleansを使ってレジリエンスでスケーラブルなクラウドネイティブサービスやその他の分散アプリケーションを簡単に構築できます。 そのため、Orleansはしばしば「分散型.NET」と呼ばれ、クラウドネイティブアプリケーションを構築するための最適なフレームワークとなっています。 Orleansは.NETをサポートするどこでも動作可能です。 これにはLinux、Windows、macOSでのホスティングも含まれます。 OrleansアプリはKubernetes、仮想マシン、Azure App ServiceやAzure Container AppsなどのPaaSサービスに展開可能です。

ドキュメンテーション:https://learn.microsoft.com/zh-cn/dotnet/orleans/overview

免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com