適用於 Knative 的 Mixer 轉接器
展示一個 Mixer 的進程外轉接器,它實現了 Knative 的從零擴展邏輯。
這篇文章展示了如何使用 Mixer 將應用程式邏輯推入 Istio。它描述了一個 Mixer 轉接器,它使用簡單的程式碼實現了 Knative 的從零擴展邏輯,並且具有與原始實現相似的效能。
Knative 服務
Knative 服務建立在 Kubernetes 之上,以支援無伺服器應用程式的部署和服務。無伺服器平台的一個核心功能是從零擴展功能,它可以減少非活動工作負載的資源使用和成本。當閒置的應用程式收到新的請求時,需要一種新的機制來從零擴展。
下圖表示目前 Knative 從零擴展的架構。
閒置應用程式的流量會透過使用 VirtualServices
和 DestinationRules
編程 Istio 被重新導向到 Activator 元件。當 Activator 收到新的請求時,它會
- 緩衝傳入的請求
- 觸發 Autoscaler
- 在應用程式擴展後將請求重新導向到應用程式,包括重試和負載平衡(如果需要)
一旦應用程式再次啟動並執行,Knative 會將路由從 Activator 還原到執行中的應用程式。
Mixer 轉接器
Mixer 在 Istio 元件和基礎架構後端之間提供了一個豐富的中介層。它被設計為一個獨立的元件,與 Envoy 分開,並且具有簡單的可擴展模型,使 Istio 能夠與廣泛的後端互通。Mixer 本質上比 Envoy 更容易擴展。
Mixer 是一個屬性處理引擎,它使用運算符提供的配置,將 Istio 代理的請求屬性映射到透過可插拔的轉接器組對基礎架構後端系統的調用。轉接器使 Mixer 能夠公開單一一致的 API,而與使用的基礎架構後端無關。運行時使用的確切轉接器集透過運算符配置確定,並且可以輕鬆擴展以針對新的或自定義的基礎架構後端。
為了實現 Knative 從零擴展,我們使用 Mixer 的 進程外轉接器 來調用 Autoscaler。Mixer 的進程外轉接器允許開發人員使用任何程式語言,並將您的擴展建構和維護為獨立的程式,而無需建構 Istio 代理。
下圖表示使用 Mixer 轉接器的 Knative 設計。
在這個設計中,與原始的 Knative 設置一樣,不需要變更從/到 Activator 的閒置應用程式路由。當由入口網關元件表示的 Istio 代理收到閒置應用程式的新請求時,它會通知 Mixer,包括所有相關的中繼資料資訊。然後,Mixer 會調用您的轉接器,該轉接器會使用原始的 Knative 協定觸發 Knative Autoscaler。
Istio 使用 Mixer 轉接器使得可以將原本複雜的基於網路的應用程式邏輯替換為更直接的實作,如 Knative 轉接器 中所示。
當轉接器從 Mixer 接收到訊息時,它會使用 Knative 協定直接向 Autoscaler 元件傳送 StatMessage
。Autoscaler 所需的中繼資料資訊(namespace
和 service name
)由 Istio 代理傳輸到 Mixer,然後從那裡傳輸到轉接器。
總結
我比較了原始 Knative 參考架構和新的 Istio Mixer 轉接器參考架構的冷啟動時間。結果顯示冷啟動時間相似。使用 Mixer 轉接器的實作具有更高的簡潔性。不需要處理底層的基於網路的機制,因為這些都由 Envoy 處理。
下一步是將此 Mixer 轉接器轉換為在入口網關內執行的 Envoy 特定篩選器。這將允許進一步改善延遲開銷(不再調用 Mixer 和轉接器)並移除對 Istio Mixer 的依賴。