1

Azure Blob API は、宇宙人によって設計されたように見えることがあります。ほとんどの単純なものがフープを飛び越える必要がある場合に、いくつかの非常にエキゾチックなユースケース用に設計されています。ここにそのようなものがあります。

私は 2 つのワーカー ロールを持っています。1 つはブロブを作成し、もう 1 つはそれらを処理しています (処理が完了すると、「完了」フォルダーに移動します)。BLOB のサイズは、100 MB など、適度に大きくすることができます。明らかに、BLOB にすべてのデータが含まれる前に、2 番目のロールが BLOB の読み取りを開始することは望ましくありません。さて、Lease API の助けが期待できます: リースを取得し、BLOB をコピーし、リースを解放します。次に、リーダーも処理前にリースを取得しようとするため、待機する必要があります。いいえ、まだ存在しない BLOB でリースを取得することはできません。また、リースを「オン」にしてアトミック操作としてブロブを作成する方法も見つかりませんでした。

上手に作るコツをご存知でしたら教えてください。敬具。

4

1 に答える 1

1

明らかに、BLOB にすべてのデータが含まれる前に、2 番目のロールが BLOB の読み取りを開始することは望ましくありません。

を作成していると仮定するとBlockBlob、すべての意図と目的のために BLOB がコミットされるまで (つまり、すべてのデータが BLOB に書き込まれるまで)、BLOB は存在せず、BLOB リストの結果には表示されません ( BLOB を一覧表示するときに、具体的にはコミットされていない BLOB を要求します)。ですから、特別なことをする必要はないと思います。

さて、Lease API の助けが期待できます: リースを取得し、BLOB をコピーし、リースを解放します。次に、リーダーも処理前にリースを取得しようとするため、待機する必要があります。

これには別の解決策があります。あなたができることは、を利用することですAzure Queues。BLOB 作成者のワーカー ロールが BLOB のアップロードを完了すると、BLOB を処理するワーカー ロールによってポーリングされるキューにメッセージが書き込まれます。プロセッサ ワーカー ロールのインスタンスが多数あると仮定すると、各インスタンスはGET、このキューからのメッセージを次のように処理しblob lease(メッセージは 1 つのインスタンスでのみ使用可能)、BLOB の処理を​​開始できます。

于 2015-01-23T04:11:11.167 に答える