每日一博 | Redis 的多线程版本比 Redis 本身要快 5 倍
如果我告诉您有一个 Redis 的分支版本,它的性能比原生的 Redis 快 5 倍,而且延迟却降低近 5 倍,你会不会想了解一下这个项目?而如果您不再需要哨兵节点并且您的副本可以接受读取和写入,这将有可能使分片数量减少 10 倍,这样对你的吸引力是不是更大了呢?
我说的这个分支版本,它其实是 Redis 的一个分叉版本,名叫 KeyDB 。KeyDB 是 Redis 开源的多线程分叉版本。本文我们将提供最新的基准测试结果,并讨论更强大的 KeyDB 实例如何减少集群大小以及简化堆栈。同时我们还将讨论了多线程体系结构,并演练了如何利用它实现性能的提升。
为什么要取个新名字,为什么要做 Redis 的分叉?
凭借着我们不受限制的代码库开发能力,KeyDB 能够在短时间内取得长足的进步,并且所走的道路将在未来几个月内破坏整个数据库格局。
关于为什么首先搞一个 Redis 分叉的原因,这是因为 KeyDB 和 Redis 在如何发展方面有不同的理念。我们认为易用性、高性能和“内置动力”的方法是创造良好用户体验的最佳方法。尽管我们非常尊重 Redis 维护者,但我们认为 Redis 的方法过于注重代码的简单性,而以牺牲用户的便利性为代价。这导致经常需要借助外部组件和方案来解决很多常见问题。
由于存在意见分歧,因此适合 KeyDB 的功能可能不适用于 Redis。而做一个新的分叉版本可以允许我们探索这一新的开发路径并实现可能永远不会成为 Redis 一部分的功能。KeyDB 将与上游的 Redis 代码变更保持同步,在适用的情况下,我们还给 Redis 提交错误修复和改进。我们希望这两个项目能够继续发展并相互学习。
最新基准数据
KeyDB 于今年3月推出,尽管我们的性能有所提高,但我们仍然希望它能更快地发展。我们最新的基准测试数据显示,KeyDB的单个实例的每秒操作数(图范围为53-5.49)比Redis(v5)的单个实例多5倍以上,而延迟(图形范围为4.6-5.1)近5倍:
多线程的优势
增加 KeyDB 的单个实例/节点的功能可以减少分片的需要,并且可以大大减少数据移动的数量。您可能会问,与在单个节点上多线程化相比,在群集中运行许多Redis 节点是否可以获得比单线程多线程更多的吞吐量?您可以像 Redis 一样对 KeyDB 进行分片,这对数据库进行水平扩展很有意义。但是,如果您可以选择增加马力而不购买第二辆车,那为什么不呢?除分片外,还能够扩展节点的大小,为用户增加了新的功能和选择。这是 Redis 与 KeyDB 之间意见分歧的其中之一。这不仅是社区中的常见讨论点,还是某些圈子中的争论点。
因此,为了回答 “用 KeyDB 运行更多线程看起来像什么?” 这个问题,我们提供了一些基本数字,以便您对此问题有所了解。
以下是基准测试(操作/秒)与使用的线程数对应关系的图表:
随着分配更多资源给实例,您可以看到性能得到大幅提高。同时还可以可以将线程固定到某个CPU上以得到进一步的提升,但最适合您的选择可能取决于您的设置。默认情况下,此选项是禁用的。
仅将一个线程分配给KeyDB,平均而言,与 Redis 的单个线程实例相比,它仍可保持约5%的性能提升。因此,即使添加了新功能并更改了体系结构,性能也没有受到影响。
多线程架构
KeyDB 通过在多个线程上运行常规的 Redis 事件循环来工作。网络 IO 和查询解析是同时进行的。每个连接在 accept() 上分配一个线程。自旋锁保护对核心哈希表的访问。因为哈希表访问非常快,所以此锁的争用较低。事务在EXEC命令的持续时间内保持锁定。模块与GIL协同工作,而GIL仅在所有服务器线程都暂停时才获取。这保持了模块期望的原子性保证。
与大多数数据库不同,核心数据结构是系统中最快的部分。查询的大部分时间来自解析REPL协议并将数据复制到网络或从网络复制数据。
未来的工作包括允许在连接之后重新平衡与不同线程的连接,并允许多个读取器同时访问哈希表
进一步优化设置
此外,KeyDB 还提供了一些有助于简化用户体验的功能。例如活动副本功能已在最新的稳定版本 5 中广泛采用并在生产中使用。此功能使您能够在两个主节点彼此复制,同时接受读取和写入操作。而且不需要哨点节点来控制故障转移。您将获得很高的可用性,同时最大限度地利用资源。如果尚未平衡对副本节点的读取,则可以使用此选项将吞吐量提高一倍。这意味着从简单的 Redis 主副本设置转移到使用 KeyDB 的多线程活动副本设置,可以将分片需求减少多达10倍。关于主动复制的介绍可以阅读 “Redis复制和KeyDB活动复制:优化系统资源” 这篇文字。
如何做基准测试
基准测试时最重要的是确保基准测试工具不是瓶颈。我们需要使用分配了32个内核的amazon m5.8xlarge实例,以便为我们的单实例测试产生足够的容量。任何更低的基准测试工具将成为这些测试的瓶颈。对于测试实例,我们使用 RedisLabs 的Memtier。在我们的测试过程中,用于运行Redis和KeyDB实例的机器是amazon m5.4xlarge。
对于比较Redis和KeyDB的第一张图表,使用了以下命令:
Memtier: memtier_benchmark -s <'ip of test instance> -p 6379 –hide-histogram --authenticate <'yourpassword> --threads 32 –data-size <size of test ranging 8-16384>
KeyDB: keydb-server --port 6379 --requirepass <'yourpassword> --server-threads 7 --server-thread-affinity true
Redis: redis-server --port 6379 --requirepass <'yourpassword>
对于比较KeyDB ops / sec与启用的 #threads 的图表:
Memtier:memtier_benchmark -s <'ip of test instance> -p 6379 --hide-histogram --authenticate --threads 32 --data-size 32
KeyDB已固定: keydb-server --port 6379 --requirepass <'yourpassword> --server-threads <#threads used for test> --server-thread-affinity true
KeyDB取消固定: keydb-server --port 6379 --requirepass <'yourpassword> --server-threads <#threads used for test>
KeyDB 的项目介绍以及官网地址请看 https://www.oschina.net/p/KeyDB
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OSChina 周三乱弹 —— 想念上班摸鱼的日子
Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享Marcus Miller的单曲《Bruce Lee》: 贝斯真是骚断头…… 《Bruce Lee》- Marcus Miller 手机党少年们想听歌,请使劲儿戳(这里) @我书读的少你别骗我 :假期第十一天,想念上班摸鱼的日子 为什么啊, 因为放假出去旅游也生气么? 还真是这么回事, @被猪拱了的JAVA :国庆过后,有点不想上班。越上越没意思 这事别赖国庆啊, 你不过国庆, 你也不想上班, “不想去上班……” 借口给国家过生日, 能继续休班么。 @某薯:我还想给国家过生日,蛋糕才刚买来 ?? 是你自己想吃蛋糕吧! 所以这个假期过完了以后 发现了一个事情, @达尔文 :我以为我这个假期一事无成,上了体重秤才知道,还是有一些不太情愿的进步项目。 再胖点, 达叔(@达尔文)的男友就抱不动了, 不止吃好吃的, 还去看电影了。 印度电影, @这次装个文艺青年吧 :强哥的后续 假期还熬夜了, @FalconChen :熬了几个通宵,把生物钟搞乱了。 怎么发现生物钟乱了? 当时情况是这样的, 我正...
- 下一篇
Eclipse 基金会成立新工作组,推动云开发工具的发展
根据 sdtimes报道,Eclipse基金会正努力使开发人员更容易构建云原生应用程序。为此,它成立了 Eclipse Cloud Development Tools 工作组。该小组是一个与供应商无关的开源组,将专注于云的开发工具。其创始成员包括 Broadcom、IBM、RedHat 和 SAP 等。 Red Hat 开发工具和倡导部门的副总裁 Brad Micklea表示: 现今,开发人员正在为混合云构建应用程序,他们专注于合作和发展的速度,以便超越竞争对手。但是,混合云操作环境是复杂的,Kubernetes、容器、微服务和服务网格为应用程序设计和实现添加了许多新的考虑因素,Red Hat 正在与 Eclipse Cloud 开发工作组合作,为这些技术栈提供新的开源替代方案,同时为开发人员提供他们需要的工具,以便更快地将他们的软件推向市场。 该小组将致力于推动云开发工具标准的发展和使用,包括语言支持、扩展、市场和开发人员工作区定义。 Eclipse Cloud Development Tools 工作组下的项目包括 Eclipse Che Eclipse Theia、Eclipse...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Red5直播服务器,属于Java语言的直播服务器
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启