Engula 简介

Engula 是一款高性能、内存高效的 Redis 兼容内核。它基于 Redis Server 代码库构建,在保持协议与行为兼容的前提下,用 Engula 内存引擎 替换了 Redis 的内存对象存储模块,从而让现有 Redis 部署可以更低成本地迁移与验证。

核心设计理念

Engula 的架构遵循三条核心原则:

  • 完整兼容 Redis:协议与行为对齐,迁移成本极低
  • 内存效率优先:通过压缩与紧凑的元数据编码降低占用
  • 优先保障延迟:前台请求维持与 Redis 相当的亚毫秒级延迟

架构概览

Engula Server 延续 Redis Server 的整体架构,主要改动是将内存对象存储替换为 Engula 内存引擎。其他模块只需少量适配,即可在保留既有 Redis 功能的同时维持兼容性。

内存表示

在 Redis Server 中,数据访问围绕 Redis Object (robj) 展开。

在 Engula Server 中,内存数据以 Engula Object (eobj) 表示:该结构更紧凑,并针对压缩/解压效率做了专门优化。

在键值操作过程中,Engula 会将 eobj 按需转换为临时的 robj:

  • 惰性加载:仅在需要时创建临时 robj
  • 自动释放:通过编译器级保障,确保临时对象在各种路径下都能被正确回收

内存效率

Engula 通过高度优化的数据结构与编码方式显著降低内存开销。在典型场景下:

数据结构 Redis 开销(字节) Engula 开销(字节) 优化点
HashTable 32(dictEntry) 14 Swiss table
Key + robj 3(key sds)+ 16(robj) 10 eobj 存储
Value(String) 3(value sds) 1 eobj 存储
TTL 8 5 变长整数编码
Jemalloc ≥ 4(8 字节对齐) 2 Memory Block 管理
合计 66 32 约 50% 内存降低

Memory Block 管理

Engula 将键值数据存储在 Memory Blocks 中,并划分为:

  • Mutable Zone:可修改的数据区域
  • Immutable Zone:仅允许删除的数据区域

后台任务会周期性地对 Immutable Zone 中的 block 做压缩与替换。这些后台任务会被拆分为细粒度、可中断的协程,并在原生 Redis 的主线程与 I/O 线程中执行。

Engula 会根据系统负载动态调整响应时间预算,优先保障前台请求的延迟目标;后台工作则会根据各 I/O 线程的利用率进行分配,以提升整体 CPU 效率。

性能与可扩展性

横向扩展

Engula 通过额外的 I/O 线程提升多核 CPU 利用率。在多 CPU 环境下,Engula 的 CPU 利用更平滑,读写吞吐更高,同时整体性能保持与 Redis 相当或更优。

I/O 模型优化

Redis(Busy Polling 模型)

  • 理念:默认独占 CPU 与内存资源
  • 机制:I/O 线程先 busy polling(≈ 100 万 cycles ≈ 0.1ms)再进入 sleep
  • 表现:高负载下 CPU 消耗呈非线性增长

Engula(自适应 Signal/Wait 模型)

  • 理念:面向共享环境的资源效率
  • 机制:用原子操作与 pthread 条件变量实现的 signal/wait 替代 busy polling
  • 优化:降低 signal 频率,减少冗余上下文切换
  • 结果:在达到 Redis 级峰值吞吐的同时,CPU 扩展更平滑、更可预测

CPU–内存权衡

Engula 通过实时压缩/解压,用可控的 CPU 开销换取显著的内存节省,在维持性能的同时降低总体内存成本。

Redis® 与 Valkey 兼容性

Engula 与 Redis、Valkey 保持 完整的 wire protocol 兼容性。通过复用这些生态的原生计算层,Engula 能为标准数据操作命令提供一致的行为表现。

在存储集成点高度隔离的模块化设计下,Engula 可以在一个月内对齐新的 Redis/Valkey 版本发布,确保兼容性更新节奏。

版本支持

  • Redis:支持至 7.2.4
  • Valkey:全版本支持
  • 持续演进:正在向 Valkey 8/9 迁移

增强特性

性能增强

  • 私有 RDB 格式:缩短 SAVE/LOAD 耗时,并加速全量复制同步
  • 大 Value 优化:在多线程(≥4 线程)配置下,大 value 读性能提升 50% 以上

功能增强

  • ZSet 压缩:对有序集合做压缩以进一步降低内存开销
  • 增强线程模型:按线程/协程的调度与优先级体系,提升 CPU 利用率与尾延迟表现

总结

Engula 将 创新的内存管理强压缩策略协议级互操作性 结合在一起,为 Redis 兼容数据库带来显著提升。

其自适应 I/O 模型与可横向扩展的架构能提供更稳定、更线性的性能表现,并在不牺牲兼容性的前提下实现最高 约 50% 的内存降低,适用于希望降低内存成本且对稳定性要求极高的生产场景。