從零開(kāi)始入門(mén)K8s|etcd性能優(yōu)化實(shí)踐-創(chuàng)新互聯(lián)

作者 | 陳星宇(宇慕)??阿里云基礎(chǔ)技術(shù)中臺(tái)技術(shù)專家

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比隴川網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式隴川網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋隴川地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

本文整理自《CNCF x Alibaba 云原生技術(shù)公開(kāi)課》第 17 講。

導(dǎo)讀:etcd 是容器云平臺(tái)用于存儲(chǔ)關(guān)鍵元信息的組件。阿里巴巴使用 etcd 已經(jīng)有 3 年的歷史, 在今年 雙11 過(guò)程中它又一次承擔(dān)了關(guān)鍵角色,接受了 雙11 大壓力的檢驗(yàn)。本文作者從 etcd 性能背景出發(fā),帶領(lǐng)我們了解了?etcd server 端性能優(yōu)化及 etcd client 使用最佳實(shí)踐,希望能夠?yàn)榇蠹疫\(yùn)行一個(gè)穩(wěn)定而且高效的 etcd 集群提供幫助。

一、etcd 簡(jiǎn)要介紹

etcd 誕生于 CoreOs 公司,使用 Golang 語(yǔ)言開(kāi)發(fā),是一個(gè)分布式 KeyValue 存儲(chǔ)引擎。我們可以利用 etcd 來(lái)作為分布式系統(tǒng)元數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)庫(kù),存儲(chǔ)系統(tǒng)里面重要的元信息。etcd 同樣也被各大公司廣泛使用。

下圖為 etcd 的基本架構(gòu)

從零開(kāi)始入門(mén) K8s | etcd 性能優(yōu)化實(shí)踐

如上所示,一個(gè)集群有三個(gè)節(jié)點(diǎn):一個(gè) Leader 和兩個(gè) Follower。每個(gè)節(jié)點(diǎn)通過(guò) Raft 算法同步數(shù)據(jù),并通過(guò) boltdb 存儲(chǔ)數(shù)據(jù)。當(dāng)一個(gè)節(jié)點(diǎn)掛掉之后,另外的節(jié)點(diǎn)會(huì)自動(dòng)選舉出來(lái)一個(gè) Leader,保持整個(gè)集群的高可用特性。Client 可以通過(guò)連接任意一個(gè)節(jié)點(diǎn)完成請(qǐng)求。

二、理解 etcd 性能

首先我們來(lái)看一張圖:

從零開(kāi)始入門(mén) K8s | etcd 性能優(yōu)化實(shí)踐

上圖是一個(gè)標(biāo)準(zhǔn)的 etcd 集群架構(gòu)簡(jiǎn)圖。可以將 etcd 集群劃分成幾個(gè)核心的部分:例如藍(lán)色的 Raft 層、紅色的 Storage 層,Storage 層內(nèi)部又分為 treeIndex 層和 boltdb 底層持久化存儲(chǔ) key/value 層。它們的每一層都有可能造成 etcd 的性能損失。

首先來(lái)看 Raft 層,Raft 需要通過(guò)網(wǎng)絡(luò)同步數(shù)據(jù),網(wǎng)絡(luò) IO 節(jié)點(diǎn)之間的 RTT 和 / 帶寬會(huì)影響 etcd 的性能。除此之外,WAL 也受到磁盤(pán) IO 寫(xiě)入速度影響。

再來(lái)看 Storage 層,磁盤(pán) IO fdatasync 延遲會(huì)影響 etcd 性能,索引層鎖的 block 也會(huì)影響 etcd 的性能。除此之外,boltdb Tx 的鎖以及 boltdb 本身的性能也將大大影響 etcd 的性能。

從其他方面來(lái)看,etcd 所在宿主機(jī)的內(nèi)核參數(shù)和 grpc api 層的延遲,也將影響 etcd 的性能。

三、etcd 性能優(yōu)化 -server 端

下面具體來(lái)介紹一下 etcd server 端的性能優(yōu)化。

etcd server 性能優(yōu)化-硬件部署

server 端在硬件上需要足夠的 CPU 和 Memory 來(lái)保障 etcd 的運(yùn)行。其次,作為一個(gè)非常依賴于磁盤(pán) IO 的數(shù)據(jù)庫(kù)程序,etcd 需要 IO 延遲和吞吐量非常好的 ssd 硬盤(pán),etcd 是一個(gè)分布式的 key/value 存儲(chǔ)系統(tǒng),網(wǎng)絡(luò)條件對(duì)它也很重要。最后在部署上,需要盡量將它獨(dú)立的部署,以防止宿主機(jī)的其他程序會(huì)對(duì) etcd 的性能造成干擾。

附:etcd 官方推薦的配置要求信息。

etcd server 性能優(yōu)化-軟件

etcd 軟件分成很多層,下面根據(jù)不同層次進(jìn)行性能優(yōu)化的簡(jiǎn)單介紹。想深度了解的同學(xué)可以自行訪問(wèn)下面的 GitHub pr 來(lái)獲取具體的修改代碼。

  • 首先是針對(duì)于 etcd 的內(nèi)存索引層優(yōu)化:優(yōu)化內(nèi)部鎖的使用減少等待時(shí)間。 原來(lái)的實(shí)現(xiàn)方式是遍歷內(nèi)部引?BTree 使用的內(nèi)部鎖粒度比較粗,這個(gè)鎖很大程度上影響了 etcd 的性能,新的優(yōu)化減少了這一部分的影響,降低了延遲。

具體可參照如下鏈接:

  • 針對(duì)于lease 規(guī)模使用的優(yōu)化:優(yōu)化了 lease revoke 和過(guò)期失效的算法,將原來(lái)遍歷失效 list 時(shí)間復(fù)雜度從 O(n) 降為 O(logn),解決了 lease 規(guī)?;褂玫膯?wèn)題。

具體可參照如下鏈接:

  • 最后是針對(duì)于后端 boltdb 的使用優(yōu)化:將后端的 batch size limit/interval 進(jìn)行調(diào)整,這樣就能根據(jù)不同的硬件和工作負(fù)載進(jìn)行動(dòng)態(tài)配置,這些參數(shù)以前都是固定的保守值。

  • 還有一點(diǎn)是由谷歌工程師優(yōu)化的完全并發(fā)讀特性:優(yōu)化調(diào)用 boltdb tx 讀寫(xiě)鎖使用,提升讀性能。

基于 segregated hashmap 的 etcd 內(nèi)部存儲(chǔ) freelist 分配回收新算法

其他的性能優(yōu)化也非常多,這里我們重點(diǎn)介紹一下由阿里巴巴貢獻(xiàn)的一個(gè)性能優(yōu)化。這個(gè)性能優(yōu)化極大地提升了 etcd 內(nèi)部存儲(chǔ)的性能,它的名字叫做:基于 segregated hashmap 的 etcd 內(nèi)部存儲(chǔ) freelist 分配回收新算法。

從零開(kāi)始入門(mén) K8s | etcd 性能優(yōu)化實(shí)踐

上圖是 etcd 的一個(gè)單節(jié)點(diǎn)架構(gòu),內(nèi)部使用 boltdb 作為持久化存儲(chǔ)所有的 key/value,因此 boltdb 的性能好壞對(duì)于 etcd 的性能好壞起著非常重要的作用。在阿里巴巴內(nèi)部,我們大量使用 etcd 作為內(nèi)部存儲(chǔ)元數(shù)據(jù),在使用過(guò)程中我們發(fā)現(xiàn)了 boltdb 的性能問(wèn)題,這里分享給大家。

從零開(kāi)始入門(mén) K8s | etcd 性能優(yōu)化實(shí)踐

上圖中為 etcd 內(nèi)部存儲(chǔ)分配回收的一個(gè)核心算法,這里先給大家介紹一下背景知識(shí)。首先,etce 內(nèi)部使用默認(rèn)為 4KB 的頁(yè)面大小來(lái)存儲(chǔ)數(shù)據(jù)。如圖中數(shù)字表示頁(yè)面 ID,紅色的表示該頁(yè)面正在使用,白色的表示未使用。

當(dāng)用戶想要?jiǎng)h除數(shù)據(jù)的時(shí)候,etcd 并不會(huì)把這個(gè)存儲(chǔ)空間立即還給系統(tǒng),而是內(nèi)部先留存起來(lái),維護(hù)一個(gè)頁(yè)面的池子,以提升下次使用的性能。這個(gè)頁(yè)面池子叫做 freelist,如圖所示,freelist?頁(yè)面 ID 為 43、45、 46、50、53 正在被使用,頁(yè)面 ID 為 42、44、47、48、49、51、52 處于空閑狀態(tài)。

當(dāng)新的數(shù)據(jù)存儲(chǔ)需要一個(gè)連續(xù)頁(yè)面為 3 的配置時(shí),舊的算法需要從 freelist 頭開(kāi)始掃描,最后返回頁(yè)面起始 ID 為 47,以此可以看到普通的 etcd 線性掃描內(nèi)部 freelist 的算法,在數(shù)據(jù)量較大或者是內(nèi)部碎片嚴(yán)重的情況下,性能就會(huì)急速的下降。

針對(duì)這一問(wèn)題,我們?cè)O(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于 segregated hashmap 新的 freelist 分配回收算法。該算法將連續(xù)的頁(yè)面大小作為 hashmap 的 key,value 是起始 ID 的配置集合。當(dāng)需要新的頁(yè)面存儲(chǔ)時(shí),我們只需要 O(1) 的時(shí)間復(fù)雜度來(lái)查詢這個(gè) hashmap 值,快速得到頁(yè)面的起始 ID。

再去看上面例子,當(dāng)需要 size 為 3 的連續(xù)頁(yè)面的時(shí)候,通過(guò)查詢這個(gè) hashmap 很快就能找到起始頁(yè)面 ID 為 47。

同樣在釋放頁(yè)面時(shí),我們也用了 hashmap 做優(yōu)化。例如上圖當(dāng)頁(yè)面 ID 為 45、46 釋放的時(shí)候,它可以通過(guò)向前向后做合并,形成一個(gè)大的連續(xù)頁(yè)面,也就是形成一個(gè)起始頁(yè)面 ID 為 44、大小為 6 的連續(xù)頁(yè)面。

綜上所述:新的算法將分配的時(shí)間復(fù)雜度從 O(n) 優(yōu)化到了 O(1),回收從 O(nlogn) 優(yōu)化到了 O(1),etcd 內(nèi)部存儲(chǔ)不再限制其讀寫(xiě)的性能,在真實(shí)的場(chǎng)景下,它的性能優(yōu)化了幾十倍。從單集群推薦存儲(chǔ) 2GB 可以擴(kuò)大到 100GB。該優(yōu)化目前在阿里巴巴內(nèi)部使用,并輸出到了開(kāi)源社區(qū)。

這里再提一點(diǎn),本次說(shuō)的多個(gè)軟件的優(yōu)化,在新版本中的 etcd 中都會(huì)有發(fā)布,大家可以關(guān)注使用一下。

四、etcd 性能優(yōu)化 -client 端

再來(lái)介紹一下etce 客戶端的性能使用上的最佳實(shí)踐。

首先來(lái)回顧一下 etcd server 給客戶端提供的幾個(gè) API:Put、Get、Watch、Transactions、Leases 等很多個(gè)操作。

從零開(kāi)始入門(mén) K8s | etcd 性能優(yōu)化實(shí)踐

針對(duì)于以上的客戶端操作,我們總結(jié)了幾個(gè)最佳實(shí)踐調(diào)用:

  1. 針對(duì)于 Put 操作避免使用大 value,精簡(jiǎn)精簡(jiǎn)再精簡(jiǎn),例如 K8s 下的 crd 使用;
  2. 其次,etcd 本身適用及存儲(chǔ)一些不頻繁變動(dòng)的 key/value 元數(shù)據(jù)信息。因此客戶端在使用上需要避免創(chuàng)建頻繁變化的 key/value。這一點(diǎn)例如 K8s下對(duì)于新的 node 節(jié)點(diǎn)的心跳數(shù)據(jù)上傳就遵循了這一實(shí)踐;
  3. 最后,我們需要避免創(chuàng)建大量的 lease,盡量選擇復(fù)用。例如在 K8s下,event 數(shù)據(jù)管理:相同 TTL 失效時(shí)間的 event 同樣會(huì)選擇類似的 lease 進(jìn)行復(fù)用,而不是創(chuàng)建新的 lease。

最后請(qǐng)大家記住一點(diǎn):保持客戶端使用最佳實(shí)踐,將保證你的 etcd 集群穩(wěn)定高效運(yùn)行。

本節(jié)總結(jié)

本節(jié)內(nèi)容到這里就結(jié)束了,這里為大家總結(jié)一下:

  • 首先我們理解了 etcd 性能背景,從背后原理了解潛在的性能瓶頸點(diǎn);
  • 解析 etcd server 端性能優(yōu)化,從硬件/部署/內(nèi)部核心軟件算法等方面優(yōu)化;
  • 了解 etcd client 使用最佳實(shí)踐;

最后希望各位同學(xué)讀完本文后,能夠有所收獲,為你們運(yùn)行一個(gè)穩(wěn)定而且高效的 etcd 集群提供幫助。

“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開(kāi)發(fā)者的技術(shù)圈?!?/p>

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文題目:從零開(kāi)始入門(mén)K8s|etcd性能優(yōu)化實(shí)踐-創(chuàng)新互聯(lián)
當(dāng)前URL:http://muchs.cn/article10/pcpgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站排名標(biāo)簽優(yōu)化、網(wǎng)站收錄、服務(wù)器托管、定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名