Engula CompatQuick(兼容性自测工具)

1. 声明与结论

  • 技术路线:Engula 在 Redis 内核内实现了内核级存储引擎替换,沿用 Redis 的协议、命令处理与客户端生态。
  • 兼容性结论:在设计与实现层面,Engula 2.1 与 Redis 7.2 理论上可实现 100% 兼容(协议与语义一致),应用无需修改代码或更换客户端。

2. 设计目标和对比方法

  • 目标:验证 Engula 2.1 对 Redis 7.2 协议和数据结构的兼容程度。
  • 指标:协议兼容性、数据结构兼容性。
  • 对比方法说明
    • 以 Redis 7.2 的原生 make test 用例为基准,采用 Redis 原生测试框架,确保用例一致与可复现。
    • 逐项对比测试结果,统计通过率和失败原因。

2.1 测试指标

  • 数据结构兼容性:String、Hash、List、Set、Sorted Set、Stream、Bitmap、HyperLogLog、Geo 数据结构的操作一致性。

2.2 验证原理

Redis 使用基于 Tcl 的测试框架(test.tcl + 多个 unit/*.tcl 用例)驱动 redis-serverredis-cli,以 RESP 协议执行命令并校验期望输出。测试通过直接调用 runtest.tcl 运行,支持按模块与标签筛选、并行执行、数据目录隔离等特性,确保结果可复现与对实现细节的低耦合。

Engula 兼容性验证思路:

  • 选取与数据结构(String、Hash、List、Set、Sorted Set、Stream、Bitmap、HyperLogLog、Geo)相关的 Tcl 用例集,使用原生测试驱动脚本 runtest.tcl 在客户端侧发起测试,然后比较测试用例的期望输出与 Engula 的实际响应是否一致。
  • 对依赖 Redis 内部内存布局或调试接口(debug/内部表征)的测试进行剔除,不改变面向用户应用的兼容性。

Tcl 文件列表

  • unit/scan
  • unit/type/string
  • unit/type/incr
  • unit/type/list
  • unit/type/list-2
  • unit/type/list-3
  • unit/type/set
  • unit/type/zset
  • unit/type/hash
  • unit/type/stream
  • unit/type/stream-cgroups
  • unit/sort
  • unit/expire
  • unit/pubsub
  • unit/pubsubshard
  • unit/bitops
  • unit/bitfield
  • unit/geo
  • unit/hyperloglog

更细粒度的测试项可参见 Engula CompatQuick 生成的 output.log(包含每条用例的执行详情):

output.log 示例

3. 快速兼容性自测(Engula CompatQuick)

3.1 下载测试工具

  • Docker 镜像registry.cn-guangzhou.aliyuncs.com/montplex/engula-compat-quick

3.2 环境要求

Engula CompatQuick 以 Docker 镜像形式提供,可在已安装 Docker 的 Linux 或 macOS 上运行。推荐环境如下:

  • CentOS 版本 ≥ 7.9
  • Ubuntu 版本 ≥ 18.04
  • 推荐使用 Docker 官方版本(安装指南,部分网络可能需 VPN)

3.3 运行 Engula CompatQuick

1docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-compat-quick
2
3# 在任意文件夹内
4mkdir tmp_test && cd tmp_test
5touch output.log
6touch summary.html
7
8docker run --user $(id -u):$(id -g) -it --rm \
9  -v $(pwd)/output.log:/montplex/output.log \
10  -v $(pwd)/summary.html:/montplex/summary.html \
11  registry.cn-guangzhou.aliyuncs.com/montplex/engula-compat-quick

运行界面示意:

运行界面示意

3.4 查看运行结果

运行结束后会生成 summary.html 文件,可通过浏览器打开查看结果。

运行结果报告

报告包含:

  • 兼容性通过统计信息
  • 通过命令的大类与小类明细

4. FAQ

是否是数据结构的全部 case?是否有删减?

有删减。部分 debug 类型的测试 case 依赖 Redis 原有的内部数据结构进行测试。由于 Engula 的存储格式与 Redis 不一样,这些 case 已经转变为 Engula 内存存储的格式。此类 case 通常不会影响 Redis 的使用,不影响 Redis 的兼容性。