Orleans について調べてみた

592 Views

November 25, 22

スライド概要

Orleans が .NET チームに異動になり、今回 .NET 7 のリリースで Orleans 7 が .NET 7 の新機能として紹介されました。そこで、Orleans がどういうものなのかを調べてみました。

profile-image

SIerの人。Xamarin.iOS が好き。Azure と戯れるのが仕事。Visual Studio for Mac が Win版と同等になる日を切望。Microsoft MVP Developer Technologies 2017-

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

Orleans について調べてみた Tomohiro Suzuki @hiro128_777 2022-11-26 C# Tokyo

2.

自己紹介 鈴木友宏 Microsoft 製品を用いたシステムの構築のPMをしています。 Twitter:@hiro128_777 blog:https://hiro128.hatenablog.jp/ 2

3.

.NET 7 がリリースされましたが… なにやら見慣れないものがありました(私が不勉強なだけかもですが) Orleans is 何? 3

4.

Orleans(オーリンズ) とは とりあえず、Microsoft learn の公式ドキュメントを一通り見てみるが、 いつも通りよくわかりません… • Orleans は何者なのか • Orleans がどういう動機で開発されたのか • Orleans を採用するとどんなことが嬉しいのか 本日のゴール これらを理解して learn のドキュメントを読む 下地を作る のようなことがよくわかりにくい… 4

5.

結局 Orleans is 何? Orleans は Microsoft による「仮想アクターモデルの実装」です。 アクターモデルとは、1973年にカール・ヒューイットらによって提唱された、「近い将来、数 百・数千のマイクロプロセッサから構成され、個々にローカルメモリを持ち、高性能通信 ネットワークで通信を行う並列コンピュータが登場するとの予測」から開発された、ロック ベースの同期の必要性を取り除き並行計算を行うための方法論です。 ※ロックこそが並行計算の一番の妨げであるため、それをなくしたいという動機 アクターモデルと仮想アクターモデルの主な違いは、後者はアクターの物理的なインスタン ス化を完全に抽象化し、それをランタイムで管理できるようにしたものです。 仮想アクターは、仮想的に常に存在する論理エンティティであり、明示的に作成したり破 棄したりすることはできません。また、その仮想的な存在は、それを実行するサーバーの障 害に影響されません。 アクターは常に存在し続け、常にアドレス指定が可能です。 5

6.

Orleans 何がうれしいの すごく、簡単に言えば、 「分散アプリケーションを開発するときに発生するいろいろな面倒な ことについて自前で実装することなく、いい感じで面倒を見てくれる ので、メリットだけを享受することができます」ということでした。 ちなみに、Teams や HALO のバックエンドでも利用されています。 6

7.

Orleans の動機 7

8.

古典的なWebアプリの問題点 www • 読み取り要求のたびにデータベースにアクセ スするため、 データベースの負荷が大きい Load Balancer App App App • アプリのインスタンスの状態をお互いが把握 できず、データベースへの書き込み競合が発 生する • 各々のアプリのインスタンスが状態を個別に 持ちリソースの効率が悪い。 DB 8

9.

対策としてキャッシュ、キューなどを追加するも新たな問題が • 読み取り要求のデータベース負荷対策とし てキャッシュを追加 →キャッシュの一貫性の問題が発生 www Load Balancer App Cache App Queue • データベースへの書き込み競合対策として キューを追加 →非同期書き込みの待ちが発生 App DB 問題は軽減しているが、インフラを追加して厄介 ごとをオフロードしているだけなので根本的な解決 ではない… スケーラビリティが確保できない 9

10.

Orleans のコンセプト • アプリインスタンスがお互いに会話し互いに 連携することで分散アプリの問題を解決し たい www Load Balancer App • データベースを唯一の「真実のソース」とし、 キャッシュやキューなどの余計なインフラ自体 をなくしたい App App スケーラビリティを確保したい Cache DB (True Source) Queue 10

11.

Orleans とは Orleans は、アプリケーションのフロントエンド とDB(永続化ストレージ)の間のスマートな中間 層を提供するフレームワークです。 www Load Balancer App App App Orleans DB 11

12.

Orleans の概念と機能 1

13.

Orleans の 構成 www HTTP Response HTTP Request REST APIが定義されたエンドポイント HTTP リクエストを適切なグレインにルーティン グする Silo Silo Glain Glain Glain Glain Glain Glain Glain Data Query Glain Glain Glain Data Glain Glain Orleans Cluster Silo Orleans Cluster Grain Call Orleans Cluster Grain Response Front End (Orleans External Client) クラスターを1つの巨大なコンピューターのよ うに扱う スケールアウトやアップグレードによるインス タンス追加や、障害時のインスタンスの突 然停止に対応するため、サイロは、 Container Apps、App Service、マネージ ド k8s などの SaaS にデプロイする DB (Persistent Storage) 13

14.

Orleans の 構成要素 フロントエンド(外部クライアント) • 外部クライアントは、www と Orleans のゲートウェイの役割を果たします。 公開されている REST API への HTTP リクエストを受信して、リクエストを処理すべき Grain に対してメソッドをコールし、 Grain からレスポンスを受け取り、 HTTP リクエストにレスポンスを 返します。 • Minimum なアプリケーションの実装としては、ASP.NET Core Web API のプロジェクトで REST API を定義し、Generic Host で DI された、Grain インスタンスのメソッドをコールし、戻 り値を返します。 14

15.

Orleans の 構成要素:フロントエンド(外部クライアント) 15

16.

Orleans の 構成要素:フロントエンド(外部クライアント) 16

17.

Orleans の 構成要素:グレイン • グレインは Orleans における仮想アクターの役割を果たします。 • グレインは Orleans においてサービスの構成要素となり、ビジネスロジックをメソッドとして提供 します。 • グレインはユーザー定義のID(identity)、動作(behavior)、および状態(state)をカプ セル化し、他のグレインとメッセージを送受信したり、クライアントからの要求に対するレスポン スを返します。 • GrainID で呼び出すと、どのフロントエンドで呼び出したとしてもアプリインスタンスのクラスタ 内の同じ場所にルーティングされます。 17

18.

Orleans の 構成要素:グレイン • グレインはシングルスレッド実行が保証され、ロックや一貫性の問題の考慮が不要です。 • 個々のグレインは Orleans のランタイムによって、開発者は意識することなく、必要に応じて ページイン(アクティブ化)・ページアウト(非アクティブ化)されるため、メモリの使用量やグ レインのロードバランシングは動的に最適化されます。 • アプリケーションコードはグレインの障害や呼び出された時点で当該のグレインが非アクティブ になっているなどの状態とは無関係に、物理的な位置を意識することなくグレインと通信でき ます。開発者はグレインの物理的な場所に関して意識する必要がありません。 18

19.

Orleans の 構成要素:グレイン インターフェース 19

20.

Orleans の 構成要素:グレイン インプリメント 20

21.

Orleans の 構成要素:サイロ • サイロは複数の仮想アクターをホストするコンテナです。サイロは単一ではその効力を発揮でき ません。複数のサイロによって構成されるグループを一緒に実行しクラスターを形成することでス ケーラビリティや耐障害性を提供する役割を果たします。 • サイロのクラスターにより、アプリケーションの状態は物理的に暗黙的・透過的に分割され、 負荷に応じて並列に処理が実行されますが、開発者はそれを意識する必要はなくプロキシ オブジェクトであるグレインの呼び出しを行うだけでスケーラビリティを確保することができます。 • サイロのクラスターにより、分割されたアプリケーションの状態のバックアップを使用することで、 回復力が向上し、障害からの回復性が高まります。 21

22.

Orleans の 構成要素:サイロ 本来サイロは複数展開すべきですが、ローカルで起動しているので単一サイロです。 22

23.

その他、Orleans のメリット(データベース関連) • ホットデータもウォームデータもすべてクラスターのどこかのメモリに保存されるため、データベース の読み取り回数が減り、データベースの読み込み負荷を軽減することができます。 • 上記により別途キャッシュを用意する必要もないため、キャッシュの一貫性の問題が発生し ません。 • 各グレインが独自の状態を持ち、データベースへの書き込みを調整し実行するため、複数の 場所から一度に書き込まれるようなホットな行がデータベース内に発生することはなく、書き 込み競合の調整が不要です。 • 上記によりレイテンシも低く抑えられるため、書き込みの調整に非同期の Queue Worker などを使用する必要がなく、グレインから直接データベースに対して非常に迅速な書き込みが 実行できます。 23

24.

Orleans においてスケーラビリティが向上する理由 スケーラビリティが向上する理由は以下の2つです。 • データベースへの負荷が減るから • すべてのアプリケーション・インスタンスをより有効に活用できるから。 たとえば、メモリもより有効に活用できるから。 24

25.

終わりに これまでご説明した予備知識がある状態で、公式ドキュメントを読むとかなり読 みやすくなると思います。 というわけで、.NET 7 の注目機能だと(私が勝手に思っている)Orleans で遊 んでみましょう! https://learn.microsoft.com/ja-jp/dotnet/orleans/ 25

26.

ご清聴ありがとうございました