搭配使用Azure 事件中樞的解決方案,Azure Functions受益于可調整、符合成本效益且能夠近乎即時地處理大量資料的無伺服器架構。 如同這些服務順暢地一起運作,有許多功能、設定和複雜度可增加其關聯性的複雜性。 本文提供如何有效地利用這項整合的指引,方法是強調效能、復原、安全性、可觀察性和規模的重要考慮和技術。
事件中樞核心概念
Azure 事件中樞是可高度調整的事件處理服務,每秒可接收數百萬個事件。 在深入探討Azure Functions整合的模式和最佳做法之前,最好先瞭解事件中樞的基本元件。
下圖顯示事件中樞串流處理架構:
事件
事件是通知或狀態變更,表示為過去發生的事實。 事件不可變且保存在事件中樞,也稱為Kafka中的主題。 事件中樞是由一或多個 分割區所組成。
資料分割
當傳送者未指定分割區時,接收的事件會分散到事件中樞內的分割區。 每個事件都是以一個分割區撰寫,而且不會跨分割區進行多重轉換。 每個分割區的運作方式都是記錄,其中記錄是以僅限附加模式寫入。 認可 記錄 的類比經常用來描述如何將事件加入資料分割中序列結尾的本質。
使用多個分割區時,它允許從相同的事件中樞內使用平行記錄。 此行為提供多個程度的平行處理原則,並增強取用者的輸送量。
取用者和取用者群組
分割區可由多個取用者取用,每個取用者都會讀取和管理自己的位移。
事件中樞具有 取用者群組的概念,可讓多個取用應用程式各自擁有事件資料流程的個別檢視,並以自己的步調獨立讀取資料流程,以及自己的位移。
若要深入瞭解,請參閱 深入探討事件中樞概念和功能。
使用Azure Functions取事件
Azure Functions支援事件中樞的觸發程式和輸出系結。 本節說明如何使用觸發程式,Azure Functions回應傳送至事件中樞事件資料流程的事件。
事件中樞觸發函式的每個實例都是由單一 EventProcessorHost 實例所支援。 觸發程序 (由事件中樞提供) 會確保只有 1 個 EventProcessorHost 執行個體可以在指定的分割區上取得租用。
例如,請考慮具有下列特性的事件中樞:
- 10 個分割區。
- 1,000 個事件平均散發所有分割區,每個分割區中訊息數目不同。
第一次啟用您的函式時,只有一個函式實例。 讓我們將第一個函式執行個體稱為 Function_1
。 Function_1
具有 EventProcessorHost 的單一實例,可保留所有 10 個分割區的租用。 這個實例正在從分割區 1-10 讀取事件。 從這裡開始,會發生下列其中一件事:
不需要新的函式實例:
Function_1
可以在 Functions 調整邏輯生效之前處理所有 1,000 個事件。 在此情況下,Function_1
會完全處理這 1000 個訊息。已新增額外的函式實例:事件型調整或其他自動化或手動邏輯可能會判斷
Function_1
訊息數目超過可以處理的訊息,然後建立新的函式應用程式實例, (Function_2
) 。 這個新的函式也會具有相關聯的 EventProcessorHost 執行個體。 當基礎事件中樞偵測到新的主機實例嘗試讀取訊息時,它會平衡主機實例之間的分割區負載。 例如,分割區 1-5 可以指派給Function_1
,並將分割區 6-10 指派給Function_2
。新增更多函式實例:事件型調整或其他自動化或手動邏輯會決定兩者
Function_1
Function_2
都有比可以處理更多的訊息,並建立新的Function_N函式應用程式實例。 實例會建立至 N 等於或大於事件中樞分割區數目的點。 在本例中,事件中樞同樣會將分割區負載平衡,在此案例中,會跨執行個體Function_1
...Function_10
來進行。
發生調整時,N 個實例可以是大於事件中樞分割區數目的數位。 當事件驅動調整穩定實例計數,或因為其他自動化或手動邏輯建立比分割區更多的實例時,可能會發生這種狀況。 在此情況下, EventProcessorHost 實例只會在資料分割上取得鎖定,因為它們可從其他實例取得,因為在任何指定的時間,同一個取用者群組只有一個函式實例可以從其鎖定的分割區存取/讀取。
當所有函式執行完成時 (不論有無錯誤),系統就會在相關聯的儲存體帳戶中新增檢查點。 當檢查點檢查成功時,就永遠不會再次擷取所有的 1000 個訊息。
使用使用量和進階 Azure 方案時,可以進行動態、事件型調整。 Kubernetes 裝載的函式應用程式也可以利用 事件中樞的 KEDA 縮放器。 當函式應用程式裝載于專用 (App Service) 方案中時,目前無法進行事件型調整,這需要您根據工作負載判斷正確的實例數目。
若要深入瞭解,請參閱Azure Functions的Azure 事件中樞系結,以及Azure Functions的Azure 事件中樞觸發程式。
參與者
本文由 Microsoft 維護。 它原本是由下列參與者所撰寫。
主體作者:
- David Barkol |主要解決方案專家 GBB
若要查看非公用LinkedIn設定檔,請登入 LinkedIn。
下一步
相關資源
- 監視無伺服器事件處理 提供監視無伺服器事件驅動架構的指引。
- 無伺服器事件處理 是一種參考架構,詳細說明此類型的一般架構,其中包含程式碼範例和重要考慮的討論。
- 使用事件中樞在無伺服器事件處理中取消批次處理和篩選 會詳細說明參考架構的這些部分的運作方式。