我有多種 ETL 型別的任務,我計劃執行無服務器。任務的執行時間從 5 分鐘到 30 分鐘不等(取決于實體的資料量)。由于函式的超時時間為 10 分鐘,因此這些任務不能在一個函式中一起執行。我最近在 Azure 中遇到了用于編排不同功能的 Durable Functions。我想知道 Durable 函式是否也有 10 分鐘的超時時間,或者我可以在其中有多個函式(每個函式運行 3-5 分鐘)。
例如,任務 1 需要 3 分鐘,任務 2 需要 5 分鐘,任務 3 需要 7 分鐘,任務 4 需要 3 分鐘,任務 5 需要 2 分鐘。我可以將所有這些任務安排在一個持久函式中嗎?
我目前的方法是為每個任務分別設定一個佇列觸發功能,但是這種作業流程很安靜。我覺得持久功能最適合簡化作業流程。
uj5u.com熱心網友回復:
我可以將所有這些任務安排在一個持久函式中嗎?
簡而言之:是的。但這里有一些背景。
Durable Functions是 Azure Functions 的擴展,可讓您在無服務器計算環境中撰寫有狀態函式。該擴展允許您通過撰寫協調器函式來定義有狀態作業流,并通過使用 Azure Functions 編程模型撰寫物體函式來定義有狀態物體。在幕后,擴展為您管理狀態、檢查點和重啟,讓您專注于業務邏輯。
聽起來您的方案最適合函式鏈接模式。
函式鏈
在函式鏈模式中,一系列函式按特定順序執行。在這種模式中,一個函式的輸出應用于另一個函式的輸入。
代碼相對簡單:
[FunctionName("Chaining")]
public static async Task<object> Run(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
try
{
var x = await context.CallActivityAsync<object>("F1", null);
var y = await context.CallActivityAsync<object>("F2", x);
var z = await context.CallActivityAsync<object>("F3", y);
return await context.CallActivityAsync<object>("F4", z);
}
catch (Exception)
{
// Error handling or compensation goes here.
}
}
此示例中的每個單獨的功能(F1 到 F4)都是它自己的功能。這意味著它有自己的超時。
請考慮到不同型別的托管計劃可能更適合您的問題。查看Azure Functions 托管選項 - 服務限制以了解選項及其各自的(超時)限制是什么。
uj5u.com熱心網友回復:
默認情況下,在消耗計劃中運行的函式有五分鐘的超時。如果超過此限制,Azure Functions 主機將被回收以停止所有執行并防止出現失控的計費情況。功能超時是可配置的。
持久功能的參考。
運行時間少于 60 分鐘的 Azure 函式。高級計劃中的 azure Function 支持有保證60 minutes的。但是對于長期運行的場景,您可以使用 Durable Function,該功能旨在解決復雜的場景,讓您將作業拆分為更小的垃圾。函式被設計為短暫的并在有限的時間內運行。函式在吞吐量低或不可預測的短期執行中表現出色。
將巨大的函式重構為更小的函式集,這些函式集可以一起作業并盡可能快速地生成回復。例如,Webhook 或 HTTP 觸發函式可能需要在特定時間限制內的確認回應;webhook 經常需要立即回應。HTTP 觸發器有效負載可以放置在佇列中并由佇列觸發器函式處理。此方法允許您推遲實際任務并快速回應。
看看以下內容:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-best-practices#avoid-long-running-functions
使用 Durable Functions,您可以輕松地支持長時間運行的行程,應用異步 HTTP API。如果您正在處理需要一些時間來處理有效負載或請求的功能,那么在“應用服務計劃、WebJob 或持久功能”下運行是正確的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/444669.html
上一篇:使用可以回傳成功或失敗以及串列的函式的zsh習慣用法是什么
下一篇:用戶輸入用作函式c 中的引數

