Lavik 0.2.0 发布:减少请求开销,扩展数据容量

更精简的字符串与集合路径、队列化 I/O、复制修复,以及从 2 vCPU 到十亿键的新基准测试。开始使用 0.2.0 发布包与版本化文档。

Lavik 0.2.0 已发布

Lavik 0.2.0 已面向 Linux x86-64 与 ARM64 发布。本版聚焦 Redis 命令访问 NVMe 值时的执行开销:减少字节复制、临时状态分配,并提高存储操作提交效率。在保留 Redis 兼容接口的同时,为增长中的目录、应用缓存与在线状态提供超越 DRAM 的容量空间。[1][2][3]

减少每个对象的处理开销

0.1.0 以来的 47 次提交同时优化大对象与小型点操作。大字符串路径移除接收、暂存与读取中的中间复制;Hash、Set 读取避免完整解码紧凑对象,紧凑写入直接拼接受影响字节;Sorted Set 修改复用页面容量,以更少的逐成员分配编辑编码页。集合响应采用打包的自有字节块与批量输出。[2]

io_uring 与 SPDK 路径现在使用队列化提交;分组读取按物理 owner 并行,事务清理与写入分离,并批量执行刷新。这些改动减少请求路径中的工作量,其应用收益取决于对象大小、命令组合与并发。[2]

从小型实例到十亿键的最新实测

10 月 21 日的 16 vCPU SPDK 对比中,Lavik 0.2.0 达到 1,156,956 GET QPS、p99.9 7.103 ms,以及 945,384 SET QPS、p99.9 10.175 ms。两点均使用 1,280 连接、1,000 万个 1 KiB 值、pipeline 深度 1 与 30 秒窗口。受测 Redis 8.10.2、Valkey 9.1.2 使用 DRAM,并关闭 AOF 与定时快照;完整连接数扫描展示吞吐量与延迟的取舍。[5]

容量方面,2 vCPU 实验在标称 16 GiB 内存的主机上保留 1 亿个键、95.37 GiB 逻辑值负载,GET 与 SET 峰值为 215,644 和 231,361 ops/s。独立的 16 vCPU 十亿键实验使用 32 客户端线程与 60 秒窗口,Lavik 达到 1,129,597 GET QPS 与 910,356 SET QPS,在六种存储型系统中完整扫描峰值最高;160 连接时 Garnet GET 领先。键、索引、副本与存储余量仍需另行计入容量规划。[5][6]

更新后的 Aerospike YCSB 矩阵覆盖 1 亿条十字段记录和四种负载组合。Lavik 不限速总吞吐量高出 9.06%–24.08%,但七个不限速操作单元中有四个 p99.9 更高。CPU/IRQ 策略与持久化条件不同。这些结果描述所记录的部署,不是其他应用的性能保证,也不是隔离条件下的版本前后对比。[7]

完整性策略与正确性修复

数据记录及值/键 extent 的 CRC 生成现在默认关闭,可在启动时通过 record-crc 选择。每个对象保留自身策略,已有 CRC 仍被校验;元数据、检查点、函数目录与复制保留完整性检查。旧版读取程序无法消费带新 no-CRC 标志的对象,升级与恢复规划需考虑这一格式边界。[3][4]

复制 V2 处理更大的参数数量,并在内存压力下保留已接纳写入。本版还保留 Admin 已接受的变更结果,在固定 Stream 范围位置前刷新地址。结合集合与 I/O 优化,可选择代表性的缓存或在线状态数据集演练 0.2.0。[2]

从你的应用开始

下载 0.2.0 压缩包并验证 SHA-256,按当前快速入门启动。Minimal 使用内核 TCP/io_uring,Standard 包含 DPDK/SPDK;两者均要求启用 io_uring 的 Linux 6.1+ 与兼容 Ubuntu 24.04 的 glibc。发布包内含 Lavik Admin 及其 Node.js 运行时。演练时保留应用命令组合、数据保留目标与页面级延迟预算,再结合新基准报告理解相应存储路径。[1][3]