etcd 的性能怎么樣?需要優(yōu)化嗎?
作者 |?陳星宇(宇慕)??阿里云基礎技術中臺技術專家
關注“Go語言中文網”公眾號,回復關鍵詞“入門”,即可下載從零入門 K8s 系列文章 PPT。
導讀:etcd 是容器云平臺用于存儲關鍵元信息的組件。阿里巴巴使用 etcd 已經有 3 年的歷史, 在今年 雙11 過程中它又一次承擔了關鍵角色,接受了 雙11 大壓力的檢驗。本文作者從?etcd?性能背景出發(fā),帶領我們了解了 etcd server 端性能優(yōu)化及 etcd client 使用最佳實踐,希望能夠為大家運行一個穩(wěn)定而且高效的 etcd 集群提供幫助。

etcd?簡要介紹


理解 etcd 性能


etcd 性能優(yōu)化 -server 端
1. etcd server 性能優(yōu)化-硬件部署
server 端在硬件上需要足夠的 CPU 和 Memory 來保障 etcd 的運行;
其次,作為一個非常依賴于磁盤 IO 的數據庫程序,etcd 需要 IO 延遲和吞吐量非常好的 ssd 硬盤,etcd 是一個分布式的 key/value 存儲系統(tǒng),網絡條件對它也很重要;
最后在部署上,需要盡量將它獨立的部署,以防止宿主機的其他程序會對 etcd 的性能造成干擾。
2. etcd server 性能優(yōu)化-軟件
首先是針對于 etcd 的內存索引層:優(yōu)化內部鎖的使用減少等待時間。原來的實現方式是遍歷內部引 BTree 使用的內部鎖粒度比較粗,這個鎖很大程度上影響了 etcd 的性能,新的優(yōu)化減少了這一部分的影響,降低了延遲;
針對于lease 規(guī)模使用的優(yōu)化:優(yōu)化了 lease revoke 和過期失效的算法,將原來遍歷失效 list 時間復雜度從 O(n) 降為 O(logn),解決了 lease 規(guī)模化使用的問題;
最后是針對于后端 boltdb的使用優(yōu)化:將后端的 batch size limit/interval 進行調整,這樣就能根據不同的硬件和工作負載進行動態(tài)配置,這些參數以前都是固定的保守值;
還有一點是由谷歌工程師優(yōu)化的完全并發(fā)讀特性:優(yōu)化調用 boltdb tx 讀寫鎖使用,提升讀性能。
3. 基于 segregated hashmap 的 etcd 內部存儲 freelist 分配回收新算法


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

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

本文總結
首先我們理解了 etcd 性能背景,從背后原理了解潛在的性能瓶頸點; 解析 etcd server 端性能優(yōu)化,從硬件/部署/內部核心軟件算法等方面優(yōu)化; 了解 etcd client 使用最佳實踐;
推薦閱讀
站長 polarisxu
自己的原創(chuàng)文章
不限于 Go 技術
職場和創(chuàng)業(yè)經驗
Go語言中文網
每天為你
分享 Go 知識
Go愛好者值得關注

