簡體   English   中英

限制Azure Webjob一次處理的Blob數量

[英]Limit number of blobs processed at one time by Azure Webjobs

我有一個Azure Webjob,可將大型CSV(500 MB至10+ GB)復制到SQL Azure表中。 我每天都會收到一個新的CSV文件,並且只保留1個月的記錄,因為將它們保留在SQL中非常昂貴,因此它們非常不穩定。

為了讓他們開始使用,我批量上傳了上個月的數據(約200 GB),並且同時看到所有30個CSV文件都在處理中。 如上圖所示,這會在上傳文件中造成相當瘋狂的備份:

Webjob結果

我大約有5頁,看起來像這樣計算所有重試次數。 如果我一次上傳2個,則一切正常! 但是從運行時間可以看出,有些可能需要14個小時以上才能完成。

我要做的是批量上傳30個CSV文件,並且Webjob一次只能處理3個文件,然后一旦完成,就開始下一個文件。 當前的SDK有可能嗎?

是的,絕對有可能。

假設您在此處使用的模式是使用計划或按需WebJob,它們將消息彈出到隊列中,然后由持續運行的WebJob拾取,該WebJob處理來自隊列的消息,然后執行可以使用JobHost的工作。 Queues.BatchSize屬性可限制一次可以處理的隊列消息數。 H

static void Main()
{
    JobHostConfiguration config = new JobHostConfiguration();

    //AzCopy cannot be invoked multiple times in the same host
    //process, so read and process one message at a time
    config.Queues.BatchSize = 1;
    var host = new JobHost(config);
    host.RunAndBlock();
}

如果您想了解實際情況,請隨時克隆我最近發布的有關如何使用WebJobs和AzCopy創建自己的Blob備份服務的GitHub存儲庫。 我遇到了同樣的問題,即我一次無法完成太多工作。

https://github.com/markjbrown/AzCopyBackup

希望對您有所幫助。

編輯,我差點忘了。 雖然您可以在上面更改BatchSize屬性,但也可以利用擁有多個VM主機並處理這些作業的優勢,這基本上可以使您將其擴展為多個獨立的並行進程。 您可能會發現,您可以擴展VM的數量並非常快速地處理數據,而不必使用BatchSize限制數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM