Kubernetes團隊發布了分散式鍵值資料庫Etcd 3.4,這個版本強化了儲存後端的效能,並改進Raft投票程序,還加入了全新的客戶端平衡器(Client Balancer)。Etcd是一個分散式具高可靠性的鍵值儲存,可用來儲存分散式系統的重要資料,在去年底,CoreOS團隊將Etcd專案捐贈給CNCF。

新版Etcd對大規模Kubernetes工作負載進行了最佳化,大幅提升了執行效能,其最重要的更新,便是提供更好的存儲後端。在之前的版本,即便沒有任何寫入任務,Etcd也會在大量讀取交易的時候出現效能問題,花費過長的時間執行唯讀工作,而原因在於,儲存後端在提交等待寫入操作時,會阻擋進來的讀取交易,而且即便沒有待處理的寫入資料,也會發生同樣的問題。現在,提交不會阻擋讀取工作,而這能改善長時間的讀取交易效能。

另外,開發團隊也讓後端讀取交易更加並行,這將使得資料吞吐量大增70%,長時間進行讀取操作的情況下,P99寫入延遲減少了90%。官方也對租約儲存(Lease Storage)進行了許多改進,以提高整體操作效能,新版本還新增實驗性的租約檢查點功能,能透過共識機制,保存租約物件的剩餘生存時間值。

Etcd使用Raft共識演算法進行資料複製,過去在當一個新的成員加入或是離開叢集時,可能會影響整體叢集的可用性,而這個情況在網路分區(Network Partition)時更加嚴重。開發團隊在Etcd 3.4改進了Raft投票流程,並加入預投票功能,以解決在網路分區的情況下,可能出現的中斷問題。

Etcd 3.4的重大更新還包括添加新的客戶端平衡器。Etcd被設計成可以容忍各種系統和網路故障,即便其中一個節點發生故障,多伺服器架構下的邏輯叢集看起來仍然運作正常,但是這種情況卻無法保證客戶端也能夠正確運作,而過去Etcd客戶端採用了複雜的協定,以確保在任何錯誤情況發生時,仍然可以維持正確性與可用性。

但由於Etcd客戶端平衡器過度依賴舊的gRPC介面,因此當gRPC相依項目升級時,便會破壞客戶端的行為,因此開發團隊花了許多的心力修復這些問題,但疊床架屋的結果,使得客戶端對伺服器的連接機制過於複雜。Etcd 3.4客戶端簡化了平衡器故障轉移邏輯,不再維護不健康的端點列表,因為當端點連結中斷時,列表就可能過時,現在客戶端與當前端點連結中斷,便會由下一個端點輪替,客戶端也就不用追蹤端點狀態。 另外,新客戶端會創建自己的憑證綑綁包,以修正安全端點的故障轉移問題,開發團隊提到,之前當第一個Etcd伺服器故障的時候,kube-apiserver就無法與Etcd叢集連結,而Etcd 3.4更新修正了這個存在一年的臭蟲。


Advertisement

更多 iThome相關內容