整合事件中樞與 Azure 上的無伺服器函式

Azure 事件中樞
Azure Functions
Azure 監視器

搭配使用Azure 事件中樞的解決方案,Azure Functions受益于可調整、符合成本效益且能夠近乎即時地處理大量資料的無伺服器架構。 如同這些服務順暢地一起運作,有許多功能、設定和複雜度可增加其關聯性的複雜性。 本文提供如何有效地利用這項整合的指引,方法是強調效能、復原、安全性、可觀察性和規模的重要考慮和技術。

事件中樞核心概念

Azure 事件中樞是可高度調整的事件處理服務,每秒可接收數百萬個事件。 在深入探討Azure Functions整合的模式和最佳做法之前,最好先瞭解事件中樞的基本元件。

下圖顯示事件中樞串流處理架構:

事件中心架構

事件

事件是通知或狀態變更,表示為過去發生的事實。 事件不可變且保存在事件中樞,也稱為Kafka中的主題。 事件中樞是由一或多個 分割區所組成。

資料分割

當傳送者未指定分割區時,接收的事件會分散到事件中樞內的分割區。 每個事件都是以一個分割區撰寫,而且不會跨分割區進行多重轉換。 每個分割區的運作方式都是記錄,其中記錄是以僅限附加模式寫入。 認可 記錄 的類比經常用來描述如何將事件加入資料分割中序列結尾的本質。

寫入資料分割

使用多個分割區時,它允許從相同的事件中樞內使用平行記錄。 此行為提供多個程度的平行處理原則,並增強取用者的輸送量。

取用者和取用者群組

分割區可由多個取用者取用,每個取用者都會讀取和管理自己的位移。

分割取用者

事件中樞具有 取用者群組的概念,可讓多個取用應用程式各自擁有事件資料流程的個別檢視,並以自己的步調獨立讀取資料流程,以及自己的位移。

若要深入瞭解,請參閱 深入探討事件中樞概念和功能

使用Azure Functions取事件

Azure Functions支援事件中樞的觸發程式和輸出系結。 本節說明如何使用觸發程式,Azure Functions回應傳送至事件中樞事件資料流程的事件。

事件中樞觸發函式的每個實例都是由單一 EventProcessorHost 實例所支援。 觸發程序 (由事件中樞提供) 會確保只有 1 個 EventProcessorHost 執行個體可以在指定的分割區上取得租用。

例如,請考慮具有下列特性的事件中樞:

  • 10 個分割區。
  • 1,000 個事件平均散發所有分割區,每個分割區中訊息數目不同。

第一次啟用您的函式時,只有一個函式實例。 讓我們將第一個函式執行個體稱為 Function_1Function_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_1Function_2 都有比可以處理更多的訊息,並建立新的Function_N函式應用程式實例。 實例會建立至 N 等於或大於事件中樞分割區數目的點。 在本例中,事件中樞同樣會將分割區負載平衡,在此案例中,會跨執行個體 Function_1...Function_10 來進行。

    具有多個實例的事件中樞和函式

發生調整時,N 個實例可以是大於事件中樞分割區數目的數位。 當事件驅動調整穩定實例計數,或因為其他自動化或手動邏輯建立比分割區更多的實例時,可能會發生這種狀況。 在此情況下, EventProcessorHost 實例只會在資料分割上取得鎖定,因為它們可從其他實例取得,因為在任何指定的時間,同一個取用者群組只有一個函式實例可以從其鎖定的分割區存取/讀取。

當所有函式執行完成時 (不論有無錯誤),系統就會在相關聯的儲存體帳戶中新增檢查點。 當檢查點檢查成功時,就永遠不會再次擷取所有的 1000 個訊息。

使用使用量和進階 Azure 方案時,可以進行動態、事件型調整。 Kubernetes 裝載的函式應用程式也可以利用 事件中樞的 KEDA 縮放器。 當函式應用程式裝載于專用 (App Service) 方案中時,目前無法進行事件型調整,這需要您根據工作負載判斷正確的實例數目。

若要深入瞭解,請參閱Azure Functions的Azure 事件中樞系結,以及Azure Functions的Azure 事件中樞觸發程式

參與者

本文由 Microsoft 維護。 它原本是由下列參與者所撰寫。

主體作者:

若要查看非公用LinkedIn設定檔,請登入 LinkedIn。

下一步