新聞資訊
NEWS當(dāng)前服務(wù)器配置能承受多大的QPS?如何評估?
LinkedIn的基礎(chǔ)設(shè)施上運(yùn)行著數(shù)百個應(yīng)用,它們?yōu)?.67億的LinkedIn會員提供服務(wù)。在發(fā)布新功能、規(guī)劃流量增長規(guī)模和分析數(shù)據(jù)中心失效備援方案的過程中,我們經(jīng)常會遇到以下幾個問題:
目前的服務(wù)配置最大可以承擔(dān)多大的QPS(每秒查詢數(shù))?
這些服務(wù)器能夠處理比當(dāng)前峰值高出50%的流量嗎?
從基礎(chǔ)設(shè)施來看,服務(wù)潛在的容量瓶頸是什么?
作為LinkedIn的性能團(tuán)隊(duì)工程師,我們的工作就是要在短時(shí)間內(nèi)為上述的問題尋找準(zhǔn)確的答案。
不過,因?yàn)榉?wù)的增長過于迅速,在對服務(wù)的容量極限進(jìn)行評估時(shí),我們面臨著巨大的挑戰(zhàn)。這些挑戰(zhàn)來自于持續(xù)變化的流量模式、不均衡的基礎(chǔ)設(shè)施特征,以及持續(xù)變化的瓶頸。為了能夠準(zhǔn)確地對服務(wù)容量極限進(jìn)行評估,并有效地識別出容量瓶頸,我們的解決方案需要具備如下特點(diǎn)。
利用生產(chǎn)環(huán)境來突破實(shí)驗(yàn)室的局限
使用真實(shí)的流量作為負(fù)載
最小化對用戶體驗(yàn)造成的影響
低運(yùn)營成本和開銷
自動伸縮
我們的解決方案:Redliner
我們使用生產(chǎn)環(huán)境的真實(shí)流量,通過Redliner實(shí)現(xiàn)自動化的容量評估和準(zhǔn)確的余量分析。Redliner在目標(biāo)服務(wù)上運(yùn)行壓力測試,逐步增加流量,直到服務(wù)無法處理更多的流量為止,以此來評估服務(wù)的吞吐量。
Redliner自動從生產(chǎn)環(huán)境引入流量,并確保對用戶只有很小的影響。在設(shè)計(jì)Redliner時(shí),我們遵循了兩個原則:影響最小化和完全自動化。
影響最小化
在進(jìn)行流量重定向時(shí),最主要的問題是如何避免對站點(diǎn)和用戶造成影響。Redliner使用以下的策略來緩解對生產(chǎn)環(huán)境性能造成的影響。首先,通過增量的方式將流量導(dǎo)向redline實(shí)例。其次,Redliner對服務(wù)進(jìn)行實(shí)時(shí)的監(jiān)控,并根據(jù)實(shí)際情況來分發(fā)流量。Redliner捕捉實(shí)時(shí)的性能指標(biāo),并基于EKG健康評估規(guī)則(見圖1和圖2)的計(jì)算結(jié)果來確定服務(wù)的健康狀況。另外,在進(jìn)行redline實(shí)例的測試過程中,Redliner也會評估流量測試對上游和下游服務(wù)所產(chǎn)生的影響。
圖1 Redliner內(nèi)部度量指標(biāo)規(guī)則示例
圖2 Redliner系統(tǒng)度量指標(biāo)規(guī)則示例
完全自動化
為了克服手動測試的缺點(diǎn)(缺乏一致性、高昂的運(yùn)營成本,等等),我們需要一個完全自動化的方式來運(yùn)行測試、確定吞吐容量、檢測系統(tǒng)性能衰退告警,并在出現(xiàn)問題時(shí)停止測試或回滾。我們借助LinkedIn的技術(shù)平臺保證Redliner自動化的健壯性和伸縮性。Redliner能夠運(yùn)行調(diào)度測試,通過EKG檢測性能狀態(tài),還能利用A/B測試平臺XLNT來動態(tài)地調(diào)整導(dǎo)向目標(biāo)服務(wù)的流量。在經(jīng)過幾輪的迭代之后,Redliner就可以確定單個服務(wù)能夠處理的最大QPS。一般整個過程需要不到一個小時(shí)的時(shí)間。Redliner會生成測試報(bào)告,報(bào)告里包含了QPS和延遲趨勢走向以及資源瓶頸信息。如果某個服務(wù)出現(xiàn)過載或者尚有余量,Redliner會向相關(guān)人員發(fā)送郵件,郵件里會為他們提供具體的建議。
Redliner生態(tài)系統(tǒng)
圖3是Redliner的架構(gòu)圖,包含導(dǎo)流組件和容量評估組件。主要組件如下:導(dǎo)流層(代理/負(fù)載均衡器)、服務(wù)健康狀態(tài)分析器和服務(wù)度量指標(biāo)收集器。
圖3 Redliner和它的依賴組件
導(dǎo)流層(代理/負(fù)載均衡器)
Redliner目前只支持無狀態(tài)的服務(wù)。也就是說,發(fā)送給這些服務(wù)的請求可以被路由到數(shù)據(jù)中心SUT(Service Under Test)的任意服務(wù)實(shí)例上,不涉及粘性會話(sticky session)。負(fù)載均衡機(jī)制負(fù)責(zé)控制流量負(fù)載,從而能夠?qū)崿F(xiàn)動態(tài)導(dǎo)流。
導(dǎo)流層是Redliner實(shí)現(xiàn)動態(tài)調(diào)整流量的關(guān)鍵組件。Redliner確定目標(biāo)服務(wù)的流量等級,并通過LiX(LinkedIn實(shí)驗(yàn)服務(wù))將其轉(zhuǎn)換成代理和負(fù)載均衡器的配置變更。LinkedIn使用LiX(以及A/B測試)作為默認(rèn)的流量探測工具,它提供了更為可控和安全的導(dǎo)流。通過改變代理和負(fù)載均衡器的配置,Redliner就可以自由地控制從客戶端發(fā)送給目標(biāo)服務(wù)的流量。
度量指標(biāo)收集器
容量評估和余量分析通過分析性能度量指標(biāo)來確定SUT是否已經(jīng)達(dá)到了容量極限。LinkedIn所有的服務(wù)都會向Autometrics發(fā)送度量指標(biāo),Autometrics是一個基于推送的實(shí)時(shí)度量指標(biāo)收集系統(tǒng)。Autometrics會收集實(shí)時(shí)的系統(tǒng)數(shù)據(jù)和服務(wù)數(shù)據(jù),比如QPS、請求延遲、錯誤率,以及CPU和內(nèi)存的使用情況。
服務(wù)健康分析器
EKG是Redliner的服務(wù)健康檢測工具,它通過分析上述的性能指標(biāo)來確定服務(wù)的整體健康情況。Redliner向EKG查詢正常流量負(fù)載性能與當(dāng)前流量負(fù)載性能之間的比較結(jié)果,也會通過查詢服務(wù)的健康檢測結(jié)果來決定后續(xù)的導(dǎo)流操作。
Redliner實(shí)戰(zhàn)
Redliner通過在目標(biāo)服務(wù)上增量運(yùn)行不同的流量壓力測試來確定服務(wù)的容量極限。在對目標(biāo)服務(wù)的流量負(fù)載做出變動后,Redliner等待EKG返回健康檢測結(jié)果。如果健康檢測失敗,Redliner會降低流量等級,否則,它會增加流量,給服務(wù)施加更大的壓力。Redliner就是通過這樣的反饋閉環(huán)來確定服務(wù)的流量等級的。在得到一個令人信服的紅線(redline)數(shù)字之前,這個迭代過程會一直進(jìn)行,而這個數(shù)字就是服務(wù)能夠處理的最高吞吐容量。
圖4展示了Redliner一個測試案例的細(xì)節(jié)。SUT設(shè)定了一個紅線數(shù)字(紅色虛線),Redliner觸發(fā)快速坡道(ramp)算法,逐步增加流量負(fù)載,直至達(dá)到目標(biāo)QPS。這個過程改進(jìn)了測試效率,同時(shí)降低了測試之間的時(shí)間間隔。之后,Redliner一直保持流量的逐步增加,直到目標(biāo)服務(wù)的CPU使用率和調(diào)用延遲出現(xiàn)顯著的增長,這個時(shí)候的健康檢測會返回異常。Redliner隨之降低目標(biāo)服務(wù)的流量負(fù)載。在經(jīng)過幾輪的迭代調(diào)整之后,Redliner就得到了目標(biāo)服務(wù)的紅線數(shù)字。
圖4 Redliner測試結(jié)果概要:QPS和延遲vs時(shí)間
使用案例
Redliner在LinkedIn內(nèi)部被用于多種用途,包括下面的幾種。
降低數(shù)據(jù)中心的成本
一般來說,服務(wù)所需要的資源需要根據(jù)未來的增長規(guī)模來調(diào)配。不過受多種因素的影響,比如功能棄用和不準(zhǔn)確的增長規(guī)模預(yù)測,分配給服務(wù)的資源可能不夠用,所以資源分配是一件很復(fù)雜的工作。通過指定紅線區(qū)間,我們可以識別出過度分配資源的服務(wù),并將資源收回,用作其他用途。舉個例子,當(dāng)100%的流量被導(dǎo)向目標(biāo)服務(wù),健康檢測沒有返回錯誤,Redliner測試就隨之結(jié)束。根據(jù)這個測試結(jié)果,工程師們可以減少生產(chǎn)環(huán)境的服務(wù)實(shí)例,或者利用LPS對資源進(jìn)行更有效的分配。圖5展示了使用Redliner對生產(chǎn)環(huán)境的服務(wù)器資源進(jìn)行回收的例子。
圖5 服務(wù)資源減持趨勢示例
前瞻性容量規(guī)劃
生產(chǎn)環(huán)境的容量問題總是很難緩解。通過運(yùn)行Redliner的自動化測試,服務(wù)所有者和運(yùn)維團(tuán)隊(duì)會收到潛在的容量告警。在Redliner識別出資源競爭問題(CPU、內(nèi)存、網(wǎng)絡(luò)、線程池)之后,做出緩解計(jì)劃就會變得相對容易。另外,通過分析容量歷史和可視化紅線QPS趨勢,工程師們可以建立評估模型,并作出適當(dāng)?shù)念A(yù)測,提前為流量增長規(guī)劃好資源。
吞吐量衰退檢測
工程師們可以使用Redliner來檢測應(yīng)用程序的衰退情況,還可以通過自動化測試識別出新的資源瓶頸。Redliner支持同時(shí)運(yùn)行canary環(huán)境的測試和生產(chǎn)環(huán)境的測試。工程師們可以在不同的服務(wù)實(shí)例上運(yùn)行相同等級的流量負(fù)載:一個服務(wù)實(shí)例包含了新的配置、屬性變更或者代碼變更,另一個服務(wù)實(shí)例是當(dāng)前的生產(chǎn)環(huán)境版本。負(fù)載測試結(jié)果可以作為部署的參考,可以避免部署包含了可能導(dǎo)致性能衰退的代碼。
原文來自:聊聊架構(gòu)
免責(zé)聲明:以上內(nèi)容為本網(wǎng)站轉(zhuǎn)自其它媒體,相關(guān)信息僅為傳遞更多信息之目的,不代表本網(wǎng)觀點(diǎn),亦不代表本網(wǎng)站贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。