Todis的性能那么强,真是因为分布式Compact吗?

首先, Todis(外存版 Redis) 的性能优势,主要来自底层的 ToplingDB 存储引擎, ToplingDB fork 自 RocksDB,增加了很多改进,修改了一些 bug,其中有很多修改也 PR 给了上游 RocksDB。目前 Todis 仍在 邀请内测中,可通过 7分钟视频教程快速开始。

ToplingDB 的性能优势,主要来自下面五点:

  1. Topling CSPP MemTable
  2. Topling Fast SST
  3. Topling Zip SST
  4. Topling 分布式 Compact
  5. 更好的 Compact 策略

Topling CSPP MemTable

除了不支持用户自定义的 Comparator, Topling CSPP MemTable 在各个方面都压倒性地优于RocksDB SkipList: 单线程更快、多线程 scale 更好、内存消耗更小。

preview

Topling Fast SST

为了性能, Topling Fast SST 不使用压缩, 索引结构使用了 CSPP Trie,在 Todis 配置中,L0 和 L1 就使用了 Topling Fast SST

Topling Zip SST

Topling Zip SST 使用了 Topling 内存压缩算法,压缩率更高(相比 zstd),索引和数据在 内存中的形态都是压缩的,搜索索引和提取数据都直接在压缩的数据上执行,可以精确提取每条数据。单线程可支持数十万甚至上百万的 QPS。

这种 内存压缩算法压缩数据时需要的计算量较大,所以仅在 L2 及更低层使用,并且通过 分布式 Compact转移到专用的计算集群。

这样,在 DB 结点上,充分发挥该 算法 的优势,可以使用更低规格的硬件,实现更高的性能,达到 5 倍以上的性价比。


Topling 分布式 Compact

首先, 分布式 Compact 是基于 共享存储存算分离架构,进一步把计算分为 前台计算后台计算,DB 结点执行前台计算,Compact 计算集群执行后台计算,我们称之为 前后分离

在 DB 结点上, 分布式 Compact 相当于通过一个 RPC 远程调用,把相应的 Compact 任务,发送到 计算集群中的结点上执行。

在这种架构之下, Topling Zip SST 就是天选之子!但其实是 Topling Zip SST 催生了分布式 Compact——早在 2018 年,我就有了分布式 Compact 的想法,因为 Topling Zip SST 对它有迫切需求!

更好的 Compact 策略

RocksDB 通过 subcompact 把一个 Compact 任务划分成多个子任务,通过多线程并发执行,我们对此进行了一些改进: Level 1 Sub CompactionGetRandomInteranlKeysAppend

通过这两个改进,我们一方面减小了读放大和写放大,同时可以让分布式 Compact 更充分地并行化。


以下,是 Todis 与 阿里云 Tair 的测试对比,如需深入了解,可查看 测试详情




请使用浏览器的分享功能分享到微信等