KeyDB重量釋出6.3.0開源版,華為深度參與貢獻

語言: CN / TW / HK

本文分享自華為雲社群《KeyDB重量釋出6.3.0開源版,華為深度參與貢獻》,作者:華為雲PaaS小助手

KeyDB是目前Redis 分散式快取生態鏈產品中唯一實現完全多執行緒的開源產品。自從今年4月Snapchat 收購EQAlpha之後(https://docs.keydb.dev/news/2022/05/12/keydb-joins-snap/ ),Snapchat及所屬的KeyDB團隊大力推進KeyDB 的開源社群的發展和建設,團隊開始全身投入KeyDB社群的推廣及影響力活動。5月12日 KeyDB 社群隆重發布了 6.3.0開源版本,將與華為加拿大研究院DCS團隊2021-2022年合作的成果,深度優化的企業版的能力貢獻給了開源社群。

合作優化的能力包括有完全多執行緒下進一步效能的提升,Async Rehash 的實現, Global lock& snapshot 優化演算法的實現,Async命令,主備叢集下的Fastsync的能力, 以及iStorage 介面實現與儲存的對接等功能。

在相同的硬體上,KeyDB可以實現比Redis5和Redis6 IO多執行緒條件下高得多的吞吐量。活動複製簡化了熱備盤故障切換,能夠輕鬆地在副本上分發寫入,並使用簡單的基於TCP的負載平衡/故障切換。KeyDB的更高的效能允許在更少的硬體上做更多的事情,從而降低了操作成本和複雜性。

下圖比較了幾個KeyDB最新版本和Redis設定,包括最新的Redis6 io-threads選項和TLS基準。在非TSL情況下比較最新的Redis版本效能有4-5倍的提升。在TSL安全加密情況下,效能更有超過9-10倍的提升。

img

KeyDB 團隊和Huawei DCS 雲服務團隊在過去一年中在KeyDB社群中積極合作與配合,實現了KeyDB在原企業版基礎上的又一個飛躍。在效能,價效比和功能競爭力上有了新的突破。Huawei DCS 團隊將繼續參與KeyDB的社群合作,及持續投入參與該社群的核心發展工作中,力爭促進在KeyDB架構,及生態上的進一步的提升。

KeyDB 6.3.0 開源釋出 Release Note(中文翻譯)

KeyDB 6.3.0版是第一個包含以前KeyDB企業功能的開源版本!此版本是多年來擺脫KeyDB全域性鎖並實現跨核心更好擴充套件的工作的最極致產品。

Active Replication PSYNC

Active Replication PsyncKeyDB的功能在舊的版本中已經實現,但在連線到新對等體時始終需要完全同步。在此版本中,KeyDB支援部分同步,以實現快速群集癒合。此外,KeyDB能夠根據對等節點的知識更新其複製偏移量,這意味著從一個節點進行完全同步足以允許資料部分同步到網格中的其他節點。

此更改大大減少了將新節點新增到活動複製群集的時間。在我們的測試中,我們看到12節點網狀群集的時間從10分鐘以上縮短到1分半鐘。

非同步命令

非同步命令是可以在沒有全域性鎖的情況下執行的命令。必須首先在配置檔案中通過設定“enable-async-commands yes”啟用此功能。啟用非同步命令時,一致性會略有修改,特別是來自其他客戶端的寫入可能需要配置的時間才能對其他客戶端可見。此時間使用max-snapshot-slip配置引數配置。

  • 使用非同步命令的排序規則如下:
  • 寫入總是在客戶端之間完全有序執行寫入操作的客戶端始終立即可見寫入操作

對於大多數應用程式,對複製一致性模型的輕微修改將不可見。如果您的應用程式依賴於不同客戶端之間的排序,預設情況下禁用此功能。此外,還為那些確實依賴於客戶端之間的一致性但願意插入圍欄以在正確時間斷言總排序的客戶端提供了一個名為“lfence”的新命令。

以下命令支援非同步操作:

  • GET
  • MGET

隨著時間的增加,其他只讀命令將被新增。如果您特別感興趣的命令,請釋出一個問題,以幫助我們確定您的用例的優先順序。

非同步重雜湊

KeyDB依賴於自旋鎖來同步執行緒。在KeyDB的早期版本中,等待獲取鎖時消耗的CPU時間被浪費了。KeyDB現在能夠在這段時間內使用浪費的CPU時間執行重新雜湊,以達到更有用的目的。在許多情況下,這幾乎可以完全隱藏重新雜湊的開銷。啟用此功能不需要配置,預設情況下它執行。

過程中後臺儲存

從歷史上看,Redis使用“fork”系統呼叫來建立一個執行後臺儲存的新程序。這使得程式碼更容易遵循,因為核心在後臺儲存過程中處理記憶體寫時複製的艱鉅任務。然而,這種方法的缺點是,無法準確估計所需的記憶體總量,包括後臺儲存。

KeyDB現在使用新的“快照”系統在特定時間段建立資料庫的快照,並在程序中建立寫時複製新更改。因此,maxmemory設定現在是全域性設定,並將包括用於後臺儲存的記憶體。

為了向後相容性,在後臺儲存期間,maxmemory的語義會稍微修改。當後臺儲存正在進行時,KeyDB將允許記憶體消耗超過maxmemory 20%。這是為了模擬後臺儲存記憶體消耗不計入maxmemory設定的舊行為,同時允許輕鬆計算記憶體使用的總上限。

IStorage介面

此版本還不包括KeyDB基於RocksDB的快閃記憶體功能。但是,該版本包括KeyDB的IStorage介面,這是我們持久儲存功能的主幹。通過為自定義儲存解決方案實施此介面,您將啟用所有KeyDB功能。

感謝我們的貢獻者:

感謝所有為KeyDB做出貢獻的人,包括錯誤報告、設計和測試:

Ben Schermel Firaenix: Bug Report #393 - Crash in sorted sets with long names

Kerog: #401 Error after include *.confg Gvsafronov: Fedora 35 Compile Failure

Talkabout: Always providing helpful and detailed bug reports, not limited to #378

Inakisoriamrf: #383 crash

Alebcay: #384 macOS build break

Server2245: #379 Install issue on RHEL7

Antiarchitect: #380 , and many others

Tchernomax: #352 missing support for systemd Heng Kuang: Detailed bug reports and design suggestions

Kajaruban Surendran: Detailed performance analysis of async rehash and other features

Paul Chen: Your enthusiasm and willingness to help debug issues has been deeply appreciated.

特別感謝華為加拿大研究團隊詳細而深入的Bug報告、功能設計,驗證參與。

Thanks to the EQ Alpha Team that made this release possible: Malavan Sotheeswaran, Vivek Saini, Christian Legge, Peter Liang, Ben Schermel, John Sully


KeyDB 6.3.0 開源釋出 Release Note 原文:https://github.com/Snapchat/KeyDB/releases/tag/v6.3.0

點選關注,第一時間瞭解華為雲新鮮技術~