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

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