KeyDB重量发布6.3.0开源版,华为深度参与贡献
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倍的提升。
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
- 点赞
- 收藏
- 关注作者
评论(0)