十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
Istio的性能問題一直是國內(nèi)外相關(guān)廠商關(guān)注的重點(diǎn),Istio對于數(shù)據(jù)面應(yīng)用請求時延的影響更是備受關(guān)注,而以現(xiàn)在Istio官方與相關(guān)廠商的性能測試結(jié)果來看,四位數(shù)的qps顯然遠(yuǎn)遠(yuǎn)不能滿足應(yīng)用于生產(chǎn)的要求。從發(fā)布以來,Istio官方也在不斷的對其性能進(jìn)行優(yōu)化增強(qiáng)。同時,Istio控制面的可靠性是Istio用于生產(chǎn)的另一項(xiàng)重要考量標(biāo)準(zhǔn),自動伸縮擴(kuò)容,自然是可靠性保證的重要手段。下面我們先從性能測試的角度入手,了解下Istio官方提供的性能測試方法與基準(zhǔn),主要分為以下四個方面展開。
創(chuàng)新互聯(lián)公司"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)公司具備承接各種類型的成都網(wǎng)站制作、成都做網(wǎng)站項(xiàng)目的能力。經(jīng)過十載的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評。
一、函數(shù)級別測試
Istio提供了函數(shù)級別的性能測試用例,開發(fā)者可用更好的有針對性的進(jìn)行性能優(yōu)化,這里不做展開,感興趣的朋友可用參考:
https://raw.githubusercontent.com/istio/istio/release-1.0/mixer/test/perf/singlecheck_test.go
二、端到端測試基準(zhǔn)
為了更好的跟蹤Istio的性能問題,Istio提供了一個專門用于Isito性能測試的測試工具——Fortio。你可以通過kubernetes集群,輕而易舉的將Forito部署起來,測試工具的安裝鏈接如下:
https://github.com/istio/istio/tree/release-1.0/tools#istio-load-testing-user-guide。
下圖是測試工具的組織結(jié)構(gòu)圖,其中上半部分為Istio服務(wù)網(wǎng)格管理的兩個服務(wù)S1與S2,其中S1服務(wù)關(guān)掉了mixer上報功能(mixer遙測功能實(shí)現(xiàn)方案一直備受爭議,業(yè)界普遍認(rèn)為sidecar向mixer上報遙測數(shù)據(jù)一定程度上損害了sidecar的請求轉(zhuǎn)發(fā)能力),請求通過ingressgateway流入系統(tǒng),再經(jīng)由sidecar分發(fā)到各個服務(wù),是典型的Istio服務(wù)訪問方式。下半部分為經(jīng)典的kubernetes集群中的服務(wù)訪問方式,請求經(jīng)由k8s的proxy的轉(zhuǎn)發(fā),負(fù)載均衡到各個pod。兩者的對比也就展示了Istio訪問模式與經(jīng)典模式相比,性能方面的損耗,下面介紹一下Fortio的幾個功能點(diǎn):
a)Fortio是一個快速,小巧,可重復(fù)使用,可嵌入的go庫以及命令行工具和服務(wù)器進(jìn)程,該服務(wù)器包括一個簡單的Web UI和結(jié)果的圖形表示;
b)Fortio也是100%開源的,除了go和gRPC之外沒有外部依賴,能夠輕松地重現(xiàn)Istio官方性能測試場景也能適應(yīng)自己想要探索的變體或場景;
c)Fortio以每秒指定的qps對服務(wù)進(jìn)行壓測,并記錄影響時延的直方圖并,計算百分比,平均值,tp99等統(tǒng)計數(shù)值。
Fortio在kubernetes中的安裝步驟:
kubectl -n fortio run fortio --image=istio/fortio:latest_release --port=8080
kubectl -n fortio expose deployment fortio --target-port=8080 --type=LoadBalancer
三、真實(shí)場景下測試基準(zhǔn)
Acmeair(又名BluePerf)是一個用Java實(shí)現(xiàn)的類似客戶的微服務(wù)應(yīng)用程序。此應(yīng)用程序在WebSphere Liberty上運(yùn)行,并模擬虛擬航空公司的運(yùn)營。
Acmeair由以下微服務(wù)組成:
a) Flight Service檢索航班路線數(shù)據(jù)。預(yù)訂服務(wù)會調(diào)用它來檢查獎勵操作的里程(Acmeair客戶忠誠度計劃)。
b) 客戶服務(wù)存儲,更新和檢索客戶數(shù)據(jù)。它由Auth服務(wù)用于登錄和預(yù)訂服務(wù)用于獎勵操作。
c) 預(yù)訂服務(wù)存儲,更新和檢索預(yù)訂數(shù)據(jù)。
d) 如果用戶/密碼有效,Auth服務(wù)會生成JWT。
e) 主服務(wù)主要包括與其他服務(wù)交互的表示層(網(wǎng)頁)。這允許用戶通過瀏覽器直接與應(yīng)用程序交互,但在負(fù)載測試期間不會執(zhí)行此操作。
這個模擬航空公司的運(yùn)營系統(tǒng)demo,能夠更好的模擬在實(shí)際生產(chǎn)環(huán)境中的Istio應(yīng)用,感興趣的朋友可用到如下鏈接了解一下:https://github.com/blueperf
四、每日構(gòu)建自動化測試結(jié)果
Istio與IBM會對Istio的每日構(gòu)建版本進(jìn)行性能測試,并將測試結(jié)果公布出來,供大家參考。自動化測試包括端對端用例fortio以及應(yīng)用級別bluePerf的性能測試結(jié)果。對Isito性能感興趣,但沒有時間精力進(jìn)行性能測試的朋友,可以關(guān)注一下官方的每日性能測試結(jié)果,跟蹤Istio性能優(yōu)化的最新進(jìn)展。
● https://fortio-daily.istio.io/
● https://ibmcloud-perf.istio.io/regpatrol/
這里,我們一起來看下IBM的性能測試結(jié)果,并進(jìn)行一下分析。
IBM的性能測試對比主要包括三部分,第一部分是各個Release版本之間的性能比較,其中列出了0.6.0,0.7.1,0.8.0版本的性能測試情況,這里的指標(biāo)數(shù)據(jù)是qps,可以看到,前三個版本之間的數(shù)據(jù)十分相近,沒有比較大的提升,且Istio與IngressOnly之間的對比可以看出,Istio造成了相當(dāng)大的性能損耗,大約只能達(dá)到無Istio時百分之三十多的qps,可見,性能方面Istio還需要進(jìn)一步優(yōu)化。
Row | Release | (A)Istio Full | (B) No Mixer | (C) Ingress Only | (A)/(C) % | (B)/(C) % |
---|---|---|---|---|---|---|
1 | 0.6.0 | 1307 | 1987 | 3804 | 34.4 | 52.2 |
2 | 0.7.1 | 1294 | 2050 | 3671 | 35.2 | 55.8 |
3 | 0.8.0 | 1335 | 2222 | 3708 | 36.0 | 59.9 |
第二部分是當(dāng)前release每日構(gòu)建版本的性能情況,可以對比出每天的修改對性能方面的影響,這里我們列出一部分,更詳細(xì)的信息大家可以到相應(yīng)鏈接中查看,可以看到近期每日構(gòu)建版本相較于1.0基線版本,有了一定的提升。
最后一部分是master分支的每日構(gòu)建性能測試結(jié)果??梢钥吹剑钚碌膍aster分支的性能測試結(jié)果,相較基線版本已經(jīng)有了較大的提升,但是QPS損耗嚴(yán)重的問題依然存在,同時,千級別的QPS也不能真正滿足生產(chǎn)需求,我們期待Istio的發(fā)展與進(jìn)步。
五、Isito的可靠性與可擴(kuò)展性
對控制面各組件的作用作用及故障影響進(jìn)行了匯總,結(jié)果如下:
組件 | 作用及故障影響 |
---|---|
istio-ingressgateway | 對外流量入口,該組件掛掉將導(dǎo)致整個應(yīng)用服務(wù)無法從外部訪問,建議設(shè)置多實(shí)例,增強(qiáng)可靠性 |
istio-telemetry Mixer | 相關(guān)組件,用于采集envoy上報的遙測數(shù)據(jù),該組件掛掉將導(dǎo)致各監(jiān)控運(yùn)維插件無法采集到數(shù)據(jù),同時,該組件在高并發(fā)情境下,會承受較大負(fù)荷,建議設(shè)置為多實(shí)例,增強(qiáng)可靠性 |
istio-policy Mixer | 相關(guān)組件,用于與envoy交互,check需要上報的數(shù)據(jù),確定緩存內(nèi)容,掛掉會影響check相關(guān)功能 |
istio-pilot | 控制sidecar中envoy的啟動與參數(shù)配置,即流量規(guī)則實(shí)際下發(fā)者,掛掉將會導(dǎo)致新策略配置失效 |
istio-sidecar-injector | 用于實(shí)現(xiàn)sidecar自動注入功能,掛掉將會導(dǎo)致sidecar無法自動注入,同時,若注入策略設(shè)置為必須注入(policy為Fail),則會導(dǎo)致新creating的pod無法啟動 |
istio-citadel | 用于安全相關(guān)功能,掛掉則會導(dǎo)致認(rèn)證,安全相關(guān)功能失效 |
a) 考量到Istio控制面的可靠性,以及對資源的有效利用,建議將重要組件設(shè)置為多實(shí)例,包括:
● ingressgateway:作為外部流量入口,服務(wù)網(wǎng)格管理的所有服務(wù)的對外流量,都要經(jīng)過gateway才能進(jìn)入到服務(wù)網(wǎng)格內(nèi)部,與業(yè)務(wù)邏輯強(qiáng)相關(guān),建議配置為多實(shí)例;
● mixer:遙測數(shù)據(jù)的搜集端,用于匯總服務(wù)網(wǎng)格內(nèi)所有服務(wù)上報的日志、監(jiān)控數(shù)據(jù),處理數(shù)據(jù)量巨大,建議設(shè)置為多實(shí)例,并給予更多資源配置;
● 其他控制面組件運(yùn)行壓力并不大,可根據(jù)需要自行調(diào)整實(shí)例數(shù)。
b) 容器自動擴(kuò)縮容,Istio為主要組件gateway,pilot與mixer設(shè)置了自動擴(kuò)縮容策略,且策略可以在安裝時配置,我們以pilot為例看一下其自動擴(kuò)縮容配置,以CPU占用率55%作為閾值,進(jìn)行pod實(shí)例數(shù)的擴(kuò)縮容側(cè)率:
c) 高可用(HA),可根據(jù)需要,為Istio控制面組件設(shè)置親和性策略,使相同控制面組件的多個不同pod運(yùn)行不同node上,確保Istio控制面的高可用狀態(tài),下面以pilot為例,Istio為其增加了節(jié)點(diǎn)反親和策略,使pod盡可能不運(yùn)行在相同架構(gòu)操作系統(tǒng)的節(jié)點(diǎn)上,大家可根據(jù)需要,自行增加親和與反親和策略。
d) 健康檢查,Istio也為控制面組件配置了健康檢查策略,以保證控制面組件異常時,k8s能夠?qū)⑵渲匦吕?,同樣以sidecarinjector為例,設(shè)置了啟動健康檢查readinessProbe與運(yùn)行時健康檢查livenessProbe,以確保容器正常運(yùn)行:
六、總結(jié)
再次說明一下,性能與可靠性是Istio生產(chǎn)可用至關(guān)重要的一環(huán),功能方面Istio已經(jīng)做的十分強(qiáng)大,并在不斷的完善發(fā)展中,但在性能與可靠性方面,Istio還有很長的路要走。其中微服務(wù)sidecar的路由轉(zhuǎn)發(fā)與mixer遙測功能對請求時延的影響,是擺在Istio性能提升前面的兩道障礙,我們共同努力,共同關(guān)注,望Istio早日成熟,發(fā)展壯大,揚(yáng)帆起航。