容器化RDS:計(jì)算存儲(chǔ)分離架構(gòu)下的“Split-Brain”
容器化RDS:計(jì)算存儲(chǔ)分離還是本地存儲(chǔ)?
容器化RDS:你需要了解數(shù)據(jù)是如何被寫(xiě)"壞"的
容器化RDS:借助 CSI 擴(kuò)展 Kubernetes 存儲(chǔ)能力
發(fā)現(xiàn)性能瓶頸
確定問(wèn)題組件
借助 CPU Profile 和 Flame Graph,快速縮小范圍,定位到問(wèn)題 code-path
有針對(duì)的優(yōu)化
所有的編程人員都是樂(lè)觀主義者,畢竟在可能出現(xiàn)問(wèn)題的地方,一定都會(huì)遇到問(wèn)題,在耗時(shí) 3600 秒后,95% 的 PVC 處于 Pending 狀態(tài),嚴(yán)格的說(shuō),在批量創(chuàng)建的場(chǎng)景,該功能不可用。
大量 PVC 處于 Pending 狀態(tài)
kube-apiserver
kube-controller-manager
kubelet
external-provisioner
external-attacher
csi-driver
qcfs-csi-plugin
架構(gòu)圖
通過(guò) kubelet logs 查看日志,可以在 external-provisioner 中發(fā)現(xiàn)可疑日志:
I0728 19:19:50.504069 1 request.go:480] Throttling request took 192.714335ms, request: POST:https://10.96.0.1:443/api/v1/namespaces/default/events I0728 19:19:50.704033 1 request.go:480] Throttling request took 190.667675ms, request: POST:https://10.96.0.1:443/api/v1/namespaces/default/events
external-provisioner 訪問(wèn) kube-apiserver 觸發(fā)限流
external-provisioner 有重大嫌疑。
閱讀 external-provisioner 代碼,加入調(diào)試日志,理解邏輯
不斷縮小 code-path
采集堆棧樣本
找到在采樣手氣內(nèi)消耗 CPU 時(shí)間比率最高的函數(shù),把該函數(shù)作為調(diào)試的起點(diǎn)
函數(shù)的調(diào)用關(guān)系以及采樣周期內(nèi) CPU 耗時(shí)百分比:
提供 CPU profile 和 Heap profile;
在采樣時(shí)獲得堆棧(幾乎所有)信息, 以此為依據(jù)估算整個(gè)采樣周期內(nèi)堆棧的CPU占用百分比, 并不是 100% 準(zhǔn)確;
采樣成本并不低,100赫茲既可以采樣夠用的堆棧信息,又不會(huì)給應(yīng)用程序帶來(lái)過(guò)大開(kāi)銷(xiāo);
CPU 采樣頻率默認(rèn)為 100 赫茲,并硬編碼到模塊中, 不建議調(diào)到 500 赫茲以上。
借助第三方工具 go-torch 繪制
每個(gè)矩形代表一個(gè)堆棧,采樣時(shí)間內(nèi),CPU 占用百分比越高 Y 軸越長(zhǎng),X 軸表明了堆棧之間的調(diào)用關(guān)系
從左到右按照字母表排序
顏色隨機(jī)選擇,無(wú)具體含義
來(lái)自于 external-provisioner 調(diào)用的第三方模塊 kubenetes-incubator/external-storage
采用 sharedinformer cache
修改 Leader Lock 粒度
external-provisioner 日志中的 throttling 關(guān)鍵字消失
100 PVC 的時(shí)間縮短到60秒以內(nèi)全部創(chuàng)建成功,無(wú)任何報(bào)錯(cuò)。
對(duì)于終端用戶而言,交互的界面越來(lái)越簡(jiǎn)單,但對(duì)于開(kāi)發(fā)者而言,組件越來(lái)越多,編譯一次的時(shí)間越來(lái)越久,加上無(wú)處不在的并發(fā),導(dǎo)致定位問(wèn)題的難度越來(lái)越大,尤其是性能問(wèn)題。所以,對(duì)體系架構(gòu)的理解能幫我們快速鎖定問(wèn)題組件,配合 Profile 工具和 Flame Graph 快速定位 code-path,再加上對(duì)業(yè)務(wù)邏輯的理解找到解決方案。
所有的編程人員都是樂(lè)觀主義者,無(wú)論是什么樣的程序,結(jié)果是勿庸置疑的:"這次它肯定會(huì)運(yùn)行。" 或者 "我剛剛找出了最后一個(gè)問(wèn)題。" ——人月神話
熊中哲·沃趣科技聯(lián)合創(chuàng)始人
曾就職于阿里巴巴和百度,超過(guò)10年關(guān)系型數(shù)據(jù)庫(kù)工作經(jīng)驗(yàn),目前致力于將云原生技術(shù)引入到關(guān)系型數(shù)據(jù)庫(kù)服務(wù)中。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。