web-dev-qa-db-ja.com

Logic Appの次の番号

Logic Appsが生成するファイルの種類ごとに次の番号を生成する必要があります。私のロジックアプリは、WMSと顧客のERPの間でいくつかの変換を行っています。問題は、お客様がファイルに配置するシーケンス番号を生成して維持するように要求していることです。要件の完全なリストは次のとおりです。

  1. 一意のシーケンス番号を生成します。同じファイルタイプの2つの呼び出しで同じ結果が得られることはありません。
  2. 番号シーケンスは、ファイルタイプごとに個別に保持されます。 3つのファイルタイプがあるため、それぞれに独自のシーケンスがあります。
  3. 一度に数秒間、1秒間に10コールのスパートを処理できる必要があります。これは、同じファイルタイプにすることができます。
  4. データはAzureに保存する必要があります。

これを行うには、Azure関数を作成する必要があることを知っています。これは、1つのパラメーター「fileType」を受け入れて、返すシーケンス番号を決定します。また、現在の数値を「どこかに」格納する必要があることと、Azure関数自体またはデータベース/ファイル(ロックによる)が本質的に悲観的である必要があることも知っています。コストの観点から、このシナリオに最適なAzureストレージオプションや、そのテクノロジーの決定で使用するロック/リリースを確認することはできません。私には、データベースを使用して3つの数値を格納するのはやり過ぎのように思えます。

1

他の人が興味を持っている場合は、HOT設定のコンテナーを使用してAzure Blob Storageを使用することにしました。テストではうまく機能するようです。まだライブは行っていません。

.NETコードは、StorageInfo、CloudBlobClient、CloudBlobContainer、およびCloudBlockBlobクラスを使用します。また、CloudBlockBlobへの参照を取得するために、LockingEntityルーチンを「ロックまたは解放を待機」するように調整する必要がありました。

1

楽しい質問-インタビューの質問のように聞こえます。

なんらかの永続化が必要になります。どちらでもかまいません。私はこれを行います:

  1. 「100」をディスクに書き込む(またはディスクから以前の数値を読み取る)
  2. カウンターをゼロに設定する
  3. ロックおよびインクリメントまたはインターロックされたインクリメントおよび番号の配布
  4. カウンターが「100」に達した場合、ディスクに「200」を書き込みます
  5. 3へ

クラッシュした場合、ギャップが生じますが、すべての呼び出しで同期I/Oを実行する必要はありません。

1
Martin K