當前位置:
首頁 > 最新 > 如何創建Istio Mixer適配器——來自Circonus公司的分享

如何創建Istio Mixer適配器——來自Circonus公司的分享

作者:Fred Moyer譯者:陳冬審校:宋凈超原文地址:https://www.circonus.com/2017/12/circonus-istio-mixer-adapter

Circonus 參與開源軟體有著悠久的傳統。因此,當看到 Istio 提供了一個精心設計的介面,通過適配器連接 syndicate 服務遙測,我們就知道 Circonus 適配器可以與 Istio 很好的銜接。Istio 已經被設計成提供高性能、高可擴展的應用控制平面,並且 Circonus 也是按照高性能和可擴展性的核心原則設計的。

今天我們很高興的宣布 Istio 服務網格 的 Circonus 適配器的可用性。這篇博客文章將介紹這個適配器的開發,並向您展示如何快速啟動並運行它。我們知道你會對此非常感興趣,因為 Kubernetes 和 Istio 可以提供擴展 Circonus 的能力使其遠強於其他遙測解決方案。

如果你不知道什麼是服務網格那也沒關係,其實你已經用了很多年了。互聯網的路由基礎設施就是一個服務網格;它有利於 TCP 重傳、訪問控制、動態路由、流量規劃等。以往佔主導地位的單體web應用正在為微服務讓路。Istio 通過一個 sidecar proxy 提供基於容器的分散式應用程序的控制平面功能。它為服務的操作人員提供了豐富的功能來控制 Kubernetes 編排的服務集合,而不需要服務本身來實現任何控制平面的功能集合。

Istio Mixer 提供了一個 適配器 模型,它允許我們通過為 Mixer 創建用於外部基礎設施後端介面的 處理器 來開發適配器。Mixer 還提供了一組模版,每個模板都為適配器提供了不同的元數據集。在例如 Circonus 適配器之類的度量適配器,該元數據集包括諸如 、 、 等度量。要激活 Istio 啟用的 Kubernetes 集群中的 Circonus 適配器,只需要使用 istioctl 命令將 Circonus operator 配置 注入到 k8s 集群中,metrics 將開始流動。

以下是一個關於 Mixer 如何與這些外部後端服務交互的架構圖:

Istio 還包含了 StatsD 和 Prometheus 的 metrics 適配器。然而,Circonus 適配器與其他適配器又存在一些區別。首先,Circonus 適配器允許我們將請求持續時間作為一個直方圖來收集,而不僅僅是記錄固定的百分位數。這使我們能夠計算任何時間窗上的任意分位數,並對所收集的直方圖進行統計分析。第二,數據可以基本上永久保留。第三,telemetry 數據被保存在持久的環境中,而獨立於 Kubernetes 管理的任何短暫資源之外。

讓我們來看看,數據是如何從 Istio 到 Circonus 中的。Istio 的適配器框架暴露了很多可以給適配器開發者使用的方法。Istio 處理的每個請求都生成了一組度量實例用來調用 方法。在我們的 operator 配置中,我們可以指定我們要採用的 metric,以及它們的類型:

在這裡,我們配置了一個服從 HTTPTrap 檢查的 URL 同時間斷髮送 metric 的 Circonus 處理程序。在這個例子中,我們指定了四個 metric 的集合,以及它們的類型。請注意,我們把 作為一個 類型來收集,將作為 Circonus 中的直方圖進行處理。這將保持時間的保真度,而不是對該 metric 做平均,或者在記錄之前計算百分位數(這兩種技術都失去了信號的原始值)。

對每個請求,對每個指定的度量請求調用 方法。看如下代碼:

在這裡我們可以看到,使用一個 Mixer 的上下文以及一組 metric 實例來調用 方法,我們遍歷每個實例,確定它的類型,並調用適當的 方法。在這個框架中,metric 處理器包含一個 對象,並提交實際的度量值來實現。設置處理器還是比較複雜的,但並不是最複雜的事情:

Mixer 提供了一個生成器類型,我們定義了構建方法。再次,Mixer 的上下文被傳遞,以及表示 Mixer 配置的環境變數。我們創建了一個新的 對象,並故意禁用了自動 metrics 刷新。我們這樣做是因為 Mixer 要求我們在使用 方法時在 panic 處理器中包裝所有的 goroutines 。你會注意到我們通過 創建了自己的 。這使得我們可以通過 Mixer 提供的 方法中調用 來關閉 metrics 刷新 goroutine 。我們還希望將任何日誌事件從 發送到 Mixer 的日誌中。Mixer 提供了一個基於 glog 的 介面,但 CGM 使用的是標準的 Golang 日誌。如何解決這種不匹配的問題?通過一個 logger bridge,任何 CGM 生成的日誌記錄語句都可以傳遞給 Mixer。

全適配器的代碼,可以查看 Istio github 庫。

儘管如此,讓我們看看在執行過程中是什麼樣子的。我安裝了 Google Kubernetes Engine,使用 Circonus 載入了 Istio 的開發版本,並部署了於 Istio 一起提供的 BookInfo 示例應用程序。下圖是從請求到應用程序的請求持續時間分布的熱圖。你會注意到高亮顯示的時間片段的直方圖覆蓋。我添加了一個覆蓋,添加了一個中位數、第九十和百分位的響應時間;在任意的分位數和時間窗上生成這些數據是有可能的,因為我們將原始的數據存儲為對數線性直方圖。注意,中位數和第九十百分位數是相對固定的,而第九十五百分位數傾向於在幾百毫秒的範圍內波動。這種類型的深度可觀察性可以用來量化 Istio 本身在版本上的表現,因為 Istio 的開發正在快速迭代。或者,更可能的是,它將用來標識部署的應用程序中的問題。如果你的百分位數不符合你的內部服務水平目標 (SLO) ,這是一個很好的標識,說明你有事情需要做了。畢竟,如果有20個用戶中有一個在你的應用程序上有低於標準的體驗,難道你不想知道嗎?

這看起來很有趣,所以讓我們來安排如何讓這些東西運行起來。首先我們需要一個 Kubernetes 集群。Google Kubernetes Engine 提供了一種快速獲取集群的簡單方法。

如果你不想使用 GKE ,那麼 Istio 文檔中記錄了一些其他的方式,這些是我用來啟動和運行的注釋。在是用 web UI 的方式部署了集群之後,我使用gcloud命令行運行程序。

此時,你有了一個 Kubernetes 集群,讓我們來按照 Istio 文檔 安裝 Istio

此時,可以安裝 BookInfo 示常式序

如果你在使用 GKE ,你還需要配置網管和防火牆規則

示常式序應該啟動並運行起來了。如果你在使用 Istio 0.3 或低於此版本的程序,你需要安裝我們構建好並嵌入了 Circonus 適配器的鏡像。

載入 Circonus 的資源定義(在 Istio 0.3 或 低於此版本上執行此操作)。將此內容保存為

現在開始應用文件:

編輯 Istio 部署 以載入已經構建好的 Circonus 適配器 Docker 鏡像(同樣,如果你使用 Istio v0.4 或更高的版本,則不需要執行此操作)

修改混合器的二進位 ,來使用 istio-circonus 的鏡像:

好的,到現在。抓取一個 operator 配置 的副本,並將你的 HTTPTrap submission URL 插入其中。你需要一個Circonus 賬戶 來獲取它,如果你沒有,可以創建一個免費的賬戶,同時添加一個 HTTPTrap 檢測。

現在可以應用你的 operator 配置:

嚮應用發送些請求,你就可以看到流向你的 Circonus 儀錶盤的 metrics !如果你遇到任何問題,請隨時在 Circonus labs slack 上聯繫我們,或者直接在 Twitter 上 @phredmoyer 。

這是一個很有意思的集成,Istio 絕對是 Kubernetes 的前沿,但值得注意的是在幾個月前它已經成熟了,應該可以考慮用來部署新的微服務。我要感謝一些幫助過的人。 Matt Maier 是 Circonus gometrics 的維護者,在整合 Istio 處理器框架和 CGM 提供了寶貴的價值。Zack Butcher 和 Douglas Reid 都是 Istio 項目上的 hackers,幾個月前我在一個線下的 meetup 上與他們談論到了 Istio ,他們發出了令人鼓舞的 「send the PRs!』 。Martin Taillefer 在 Circonus 適配器開發的最後階段給予了很好的反饋和建議。Shriram Rajagopalan 在最後階段使用 CircleCI 幫助完成了測試工作。最後,感謝 Circonus 團隊贊助這項工作,以及 Istio 社區的開放文化,使這項創新成為可能。

目前200個報名名額已經報滿,無法到現場的同學可以通過IT大咖說觀看現場直播,直播鏈接屆時我們將會發出

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ServiceMesher 的精彩文章:

使用Istio控制Serverless架構Fn Project中的函數間流量路由
容器、服務網格和 API 網關:從邊緣開始

TAG:ServiceMesher |