Engula ValueSight(内存节省评估工具)

Engula

Engula 是云奈科技公司自研的缓存内核产品,专为使用开源 Redis 的用户设计。它的核心优势在于极低风险地降低现有 Redis 集群的硬件成本,主要特点包括:

  • 最小化核心代码修改:确保系统稳定性和兼容性,当前版本与 Redis 7.2.4 100% 协议兼容。
  • 内存节省:大幅减少元数据开销,搭载自研 Compressed HybridLog 存储引擎,进一步降低内存占用。
  • 性能优化:通过改进 HashTable 实现、优化网络线程通信机制、提升 CPU 预取(Prefetch)命中率、引入异步线程框架等手段,优化端到端的性能。

根据早期用户的实测结果,Engula 平均节省 50% 以上内存,性能损耗低于 10%。

Engula ValueSight

Engula ValueSight 是一款帮助用户快速、精准评估 Engula 价值的工具。用户可以基于自身业务真实数据,一键对比 Engula 和 Redis 的内存占用情况,并量化 Engula 在实际业务中的优势。

核心功能包括:

  • 统计相同数据集在 Engula 和 Redis 中的 RSS 内存占用情况。
  • 生成内存占用对比图表,提供清晰的可视化分析。
  • 输出内存使用分析摘要,便于用户理解优化效果。

运行操作

运行环境

Engula ValueSight 以 Docker 镜像形式提供,可在安装有 Docker 的 Linux 或 macOS 系统上运行,具体环境要求如下:

  • CentOS 版本 ≥ 7.9
  • Ubuntu 版本 ≥ 18.04
  • 推荐使用 Docker 官方版本(安装指南,部分网络可能需 VPN)
  • 建议主机 CPU 核心数不少于 2 核
TIPS

如果运行环境不能访问公网,不能 docker pull 下来,可以参考本文档 4.5 镜像文件导出+导入 部分下进行镜像的导出导入。

运行步骤

  1. 准备 RDB 文件:在运行的主机上生成 Redis 的 dump.rdb 文件(可使用 BGSAVE 命令生成)。
  2. 下载 Engula ValueSight 镜像
1docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight
  1. 创建日志目录
1# 本地目录名称可以更换,注意最终执行的 docker 命令映射目录别写错
2mkdir -m 777 analysis_output
  1. 执行分析
1docker run -it --rm \
2  -v "<RDB文件路径>:/tmp/dump.rdb" \
3  -v "$(pwd)/analysis_output:/engula/analysis_output" \
4  registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight

注意:请将 <RDB文件路径> 替换为实际的 dump.rdb 文件路径。

运行示例

假设运行主机已安装 Docker,并且当前目录下有 dump.rdb 文件,可执行以下命令生成对 dump.rdb 文件的压缩评估报告:

:Engula ValueSight 时不时更新,建议一段时间没有使用过先执行 pull 的命令进行更新。

1# 创建日志目录
2mkdir analysis_output
3
4# 更新 Engula ValueSight 镜像
5docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight
6
7# 执行分析
8docker run -it --rm \
9  -v "$(pwd)/dump.rdb:/tmp/dump.rdb" \
10  -v "$(pwd)/analysis_output:/engula/analysis_output" \
11  registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight

运行过程

运行过程

运行结果

运行结果

分析结束后,按 Enter 可查看详细情况,按 Q / Ctrl+C 退出。

批量测试压缩率

运行步骤

  1. 创建必要目录
1# 创建 RDB 文件存放目录
2mkdir rdb_dir
3
4# 创建日志目录
5mkdir analysis_output
  1. 放置 RDB 文件

    • 将需要分析的 RDB 文件移入 rdb_dir 目录。
    • 支持子目录结构。
    • 程序会自动扫描所有 .rdb 后缀文件。
  2. 拉取分析工具镜像

1docker pull registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight
  1. 执行批量压缩评估命令
1docker run -it --rm \
2  -v "$(pwd)/rdb_dir:/tmp/rdb_dir" \
3  -v "$(pwd)/analysis_output:/engula/analysis_output" \
4  registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight --batch
  • rdb_diranalysis_output 的路径需要与实际创建的目录保持一致。
  • 请仔细检查映射路径的配置,避免路径错误导致问题。

分片计算功能

RDB 文件名的最后一个下划线加数字会被视为分片数量,并参与最终计算,以获得更准确的内存节省规模评估。

分片示例

在上面这个例子里,r_profile_100w_1000.rdb 被视为有 1000 个分片。

运行过程

运行过程

运行结果

运行结果

analysis_output 目录内容

对于 dump_1.rdb 会有四个文件:

1_dump_1.rdb_cmd_output_for_engula.log // dump_1.rdb 在 engula 评估过程中的日志
2_dump_1.rdb_cmd_output_for_redis.log  // dump_1.rdb 在 redis 评估过程中的日志
3_dump_1.rdb_engula-stats-rdb.json     // dump_1.rdb 在 engula 中的统计信息
4_dump_1.rdb_redis-stats-rdb.json      // dump_1.rdb 在 redis 中的统计信息

每个 RDB 文件会有单独的相关文件产生,如果关心细节,或者报错,可以通过这些文件获取相关信息。 另外还会生成 info.log 记录通用日志信息。

后台运行

由于需要对多个 RDB 文件进行批量评估,处理时间可能较长。建议将任务放在后台运行,以提高效率并避免长时间等待。

1nohup docker run --rm \
2  -v "$(pwd)/rdb_dir:/tmp/rdb_dir" \
3  -v "$(pwd)/analysis_output:/engula/analysis_output" \
4  registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight --batch \
5  > analysis_output/docker.log 2> analysis_output/docker.error.log &

可以通过以下方式查看任务进度:

1# 查看输出日志
2tail -f analysis_output/docker.log
3
4# 查看错误日志
5tail -f analysis_output/docker.error.log

FAQ

4.1 Docker 内存设置过小

错误现象 运行时报错: Error2: Child process quit abnormally, ExitCode=9

原因与解决 此错误通常因 RDB 文件过大导致 Docker 内存不足。建议:

  • 在 Docker Desktop 设置中增加内存分配(推荐 ≥ 4GB)。
  • 拆分大 RDB 文件分批次处理。

4.2 Debug 方法

分析完成后,analysis_output 目录内会包含程序运行日志和统计信息,可用于 Debug。如果遇到问题,可联系云奈科技技术团队进行咨询。

4.3 Red Hat 下系统 Docker 版本安装

在 Red Hat Linux 9 系统中,通过以下命令安装的 Docker 版本无法满足本次测试需求。

1yum install docker -y
2
3docker --version
4# podman version 4.9.4-rhel

建议按照 Docker 官方文档 进行安装,具体步骤如下:

  1. 卸载旧版本
1sudo yum remove docker \
2              docker-client \
3              docker-client-latest \
4              docker-common \
5              docker-latest \
6              docker-latest-logrotate \
7              docker-logrotate \
8              docker-engine \
9              podman \
10              runc
  1. 安装 yum-utils 并添加 Docker 官方仓库
1sudo yum install -y yum-utils
2sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
  1. 安装最新版本的 Docker
1sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动 Docker 服务
1sudo systemctl start docker

4.4 批量模式报错 :“rdb file not found”

镜像默认程序不运行在 root 用户下,这个错误可能是因为这个问题。

解决方案: 在批量命令中添加 --user root

4.5 镜像文件导出+导入

Step 1. 导出

在一个可以访问公网的机器上:

1docker pull --platform=amd64 registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight
2docker save registry.cn-guangzhou.aliyuncs.com/montplex/engula-valuesight > engula-valuesight.tar.gz

提示:如果这个可以访问公网的机器的 CPU 架构和目标测试机器的 CPU 架构不同,则需要指定 --platform 参数为目标测试机器的 CPU 架构,X86 则为 amd64

Step 2. Copy

把导出的 tar.gz 文件 copy 到目标测试机器上。

Step 3. 导入

在目标测试机器上:

1docker load -i engula-valuesight.tar.gz
2docker images | grep valuesight

联系我们

如果您在使用 Engula 或 Engula ValueSight 过程中遇到任何问题,或者希望了解更多产品信息,欢迎随时联系我们:

电子邮件:support@engula.cn

云奈科技技术团队将在工作日 9:00 — 18:00 (UTC+8) 及时回复您的咨询。感谢您的支持! 🚀