2017-09-14 17 views
0

動的に拡大/縮小するC#Azure関数App(消費計画)があります。つまり、すべてのインスタンスで使用する必要があるオブジェクトが追加されましたこのAzure関数のオブジェクトは複雑なので(デリゲートを持っています)、すべてのインスタンスがそこからアクセスできるように外部キャッシュを設定することはできません。このシナリオを処理する最善の方法を提案してください。すべてのAzure関数インスタンス間でオブジェクト状態を共有する方法

+0

あなたが尋ねていることは明確ではありません。投票が終わる前に、詳細を記入してください。 – Asdfg

答えて

2

Azureファンクションインスタンスは異なるサーバーで実行されていますが、同じメモリを共有しないため、リモート呼び出し(したがってシリアル化)を行わずにすべての.NETオブジェクトにアクセスする方法はありません。

1

あなたの質問には根本的に矛盾するものがあります。つまり、a)多くのマシンに合わせて拡張できる機能と、 b)メモリ内のオブジェクトをすべて1つのマシン上で実行しているかのように共有するすべてのインスタンス。 サーバレスなことは、誰もあなたの機能を使用していない場合、すべてのインフラストラクチャをシャットダウンすることができます(つまり、お金を節約できます)。これは暗黙のうちにインメモリ状態を失い、それを直列化する。

シェアード状態を最小にし、シリアライズ可能にする(デリゲート[1]のようなものに対処するパターンがあります)、外部ストレージ(Azure Storage、Redisのようなキャッシュ)を使用します。

[1]代理人にとっては、代理人にハンドルの辞書を保持してから、ハンドルをシリアライズすることです。同様に、多型については、型名を直列化するかもしれません。

+0

私は内部的に起こると信じていることは、すべての関数インスタンスが外部プロセスによって管理されていることです。すべてのインスタンスにアクセスできるオーケストレーターは、この外部プロセスがインスタンス間の状態共有をサポートする方法です... – akhil

+0

@Akhil - トリガーを監視し、マシンを立ち上げ、最終的にはこの機能を呼び出すことにつながるいくつかの外部プロセスがここにあります。しかし、それはほとんど無関係です。まだ組み込みの状態共有はありません。 –

関連する問題