Skip to content

架构与性能说明

架构图

当源端和目的端都为集群(Cluster)时,同步架构图如下。

集群同步架构图

当源端和目的端为单实例节点(Standalone)时,同步架构图如下。

单实例节点同步架构图

架构说明

从架构图可以看到,数据从源端(Source)同步到目的端(Destination),主要经过 Cluster Reader、Main、Cluster Writer 三部分处理。

Cluster Reader

Cluster Reader 即集群读入类,其根据源端分片数量创建同等数量的 Standalone Reader,每个 Standalone Reader 开启一个协程(Goroutinue)并行的从每个源端分片进行读入,并将数据存入相应的管道(Reader Channel)交付给下一环节处理。

Main

Main 即主函数,其根据 Reader Channel 数量开启多个协程,并行的对管道中数据分别执行 Parse、Filter、Function 操作,再调用 Cluster Writer 的 Write 方法,将数据分发给写入端。

  • Parse:数据包解析

  • Filter:filter 功能,过滤操作

  • Function:funtion 功能,执行 lua 函数

Cluster Writer

Cluster Writer 即集群写入类,根据目的端分片数量创建同等数量的 Standalone Writer,Cluster Writer 的 Write 方法可以将数据分发到对应 slot 的 Standalone Writer 的管道中(Writer Channel),Standalone Writer 再将数据写入到目的端。

性能和资源占用

测试环境

  • 服务器:ecs.i4g.8xlarge 32核,磁盘读入速度 2.4 GB/s,写入速度 1.5 GB/s

  • 源端和目的端 Redis 集群:1 GB 12 分片

测试工具

  • redis-benchmark:redis 的压力测试工具,为源端创造持续的写入流量

分别对 redisshake 两种模式 sync 和 scan,数据同步全量同步和增量同步两个阶段设计了测试案例。对于全量同步阶段,需要提前写入数据到源端,再开启 redisshake 同步;对于增量同步阶段,先开启 redisshake 开始同步,再利用 redis-benchmark 持续产生写入流量。

其中,sync 模式下,全量同步阶段同步一个 rdb 文件,增量同步阶段则是 aof 数据流;在 scan 模式下,全量同步采用 scan 遍历源端数据库,增量同步阶段则是开启 ksn 进行键值同步。

对于增量同步阶段,redis-benchmark 脚本设置如下,产生的写请求大概为 1500k/s,可以占满 ECS 服务器的前 16 个 cpu 内核。

bash
taskset -c 0-15 redis-benchmark \
  --threads 16 -r 10000000 -n 1000000000 -t set \
  -h host -a 'username:password' \
  --cluster -c 256 -d 8 -P 2

测试结果可见 RedisShake 云端性能测试结果

性能数据

对于源端集群和目的端集群同步两种方式的同步速率也进行了对比。

  • 12c-12c:一个 redisshake 采用 Cluster 模式同步

  • 12(s-s):每个分片启动一个 redisshake 分别采用 Standalone 模式同步

测试得到同步速率如下,bench 代表 redis-benchmark 产生的写入流量速率,scan 模式下设置 count = 10。

bench12c-12c12(s-s)12c-12c/12(s-s)
sync + aof1599k1520k12*(130k)=1560k0.97
sync + rdb1498k12*(220k)=2640k0.57
scan + ksn1084k1081k12*(95k)=1140k0.95
scan + scan665k12*(58k)=696k0.95

资源消耗

cpu 占用和 disk 读写速率采用 htop 工具监测,network 收发速率采用 iftop 工具监测,得到结果如下。

cpunetworkdisk
sync + aof16 核占用 70%-90%,总使用率 1276.9%发送速率 1340Mb/s,接收速率 998Mb/s155.91MB/s
sync + rdb32 核占用 50%-60%,总使用率 1605.0%发送速率 435Mb/s,接收速率 82.1 Mb/s113.53KB/s
scan + ksn16 核占用 90%-100%,总使用率 1911.4%发送速率 2100Mb/s,接收速率 1330 Mb/s172.07KB/s
scan + scan32 核占用 40%-60%,总使用率 1297.2%发送速率 1130Mb/s,接收速率 533Mb/s155.78KB/s

Released under the MIT License.