高可用架构

RocksDB 7 终于解决了 Compaction 时性能下降问题

R o c k s D B 社 区 提 到 在 7 . 5 . 3 版 本 在 修 复 C o m p a c t i o n 计 算 问 题 之 后 优 化 效 果 十 分 明 显 。 K v r o c k s 社 区 贡 献 者 @ z h a o x i a o b i a o 对 此 进 行 验 证 , 证 明 了 新 版 本 C o m p a c t i o n 过 程 写 入 性 能 的 确 很 平 稳 , 十 分 值 得 期 待 。

K v r o c k s 的 社 区 用 户 J u a n C r e s c e n t e 在 R o c k s D B 社 区 的 G o o g l e G r o u p 里 发 起 了 一 个 讨 论 : P e r f o r m a n c e o f c o m p a c t i o n s ( k v r o c k s ) [ 1 ] , 主 要 的 意 思 是 R o c k s D B 在 大 批 量 持 续 导 入 数 据 场 景 下 W r i t e S t a l l 会 导 致 服 务 不 可 用 :

R o c k s D B 社 区 的 M a r k 回 复 可 以 尝 试 7 . 5 . 3 版 本 , 该 版 本 大 大 优 化 了 C o m p a c t i o n 的 W r i t e S t a l l 时 间 , 具 体 如 下 :

K v r o c k s 社 区 的 贡 献 者 @ z h a o x i a o b i a o [ 2 ] 之 前 也 遇 到 过 类 似 的 问 题 , 对 于 该 优 化 十 分 感 兴 趣 , 尝 试 验 证 之 后 将 测 试 数 据 结 果 分 享 到 社 区 。 从 整 体 测 试 结 果 来 看 , R o c k s D B 7 . 7 . 3 的 C o m p a c t i o n 过 程 对 于 写 入 Q P S 和 延 时 基 本 没 有 影 响 , 而 对 比 组 的 R o c k s D B 6 . 2 9 . 5 在 C o m p a c t i o n 期 间 Q P S 会 几 乎 掉 到 0 。

带 来 这 个 优 化 的 主 要 原 因 是 R o c k s D B 7 . 5 . 3 修 复 了 一 个 C o m p a c t i o n P e n d i n g B y t e s 计 算 放 大 的 问 题 , 具 体 见 : r o c k s d b # i s s u e 9 4 2 3 [ 6 ]

测 试 环 境

分 别 使 用 R o c k s D B 6 . 2 9 . 5 / 7 . 7 . 3 编 译 K v r o c k s , 然 后 按 照 如 下 图 部 署 测 试 环 境 :

其 中 V M - A 和 V M - B 配 置 都 为 :

  • C P U : 4 核
  • 内 存 : 3 2 G i B
  • 磁 盘 : 8 9 0 G N V M E S S D

压 测 机 器 V M - C 是 4 C P U / 8 G i B 内 存 并 使 用 m e m t i e r _ b e n c h m a r k 作 为 客 户 端 来 给 K v r o c k s 写 入 数 据 。

具 体 命 令 如 下 :

dockerrun-d--rmredislabs/memtier_benchmark:latest-t2-c20-s172.27.255.231-p6666--distinct-client-seed--key-minimum=100000000--key-maximum=10000000000--random-data--data-size=10000-n10000000000--command<span data-raw-text="" "="" data-textnode-index-1667281312502="36" data-index-1667281312502="1048" data-textnode-notemoji-index-1667281312502="1048" class="character">"set__key____data__<span data-raw-text="" "="" data-textnode-index-1667281312502="36" data-index-1667281312502="1069" data-textnode-notemoji-index-1667281312502="1069" class="character">"

其 中 m e m t i e r _ b e n c h m a r k 的 - c - t 参 数 是 多 次 实 验 后 , 综 合 吞 吐 量 和 超 时 后 选 定 的 最 优 解 。 同 时 设 置 了 定 时 任 务 , 每 隔 两 小 时 向 K v r o c k s 发 起 一 次 手 动 C o m p a c t 请 求 ( 也 可 使 用 K v r o c k s C o m p a c t C r o n ) 。

测 试 结 果

以 下 是 来 自 @ z h a o x i a o b i a o 的 测 试 数 据 , 对 比 图 统 一 使 用 绿 色 线 表 示 R o c k s D B 6 . x ( 6 . 2 9 . 5 ) , 使 用 黄 色 表 示 新 版 本 R o c k s D B 7 . x ( 7 . 7 . 3 ) 。 但 由 于 篇 幅 有 限 , 下 面 展 示 对 照 组 中 的 差 异 指 标 :

C P U 对 比

从 C P U 来 看 , C o m p a c t i o n 期 间 R o c k s D B 6 . x 波 动 范 围 比 较 大 , 波 谷 主 要 是 由 于 6 . x 的 C o m p a c t i o n 和 写 入 有 锁 竞 争 导 致 C P U 利 用 率 急 剧 下 降 , 而 7 . x 几 乎 没 有 波 动 。 同 时 , 最 后 一 段 时 间 停 掉 写 之 后 , 7 . x 的 C o m p a c t i o n 的 C P U 利 用 率 也 比 6 . x 少 4 0 % 左 右 。

O P S 对 比

从 O P S 的 对 比 来 看 , R o c k s D B 6 . x 的 O P S 波 谷 和 C P U 几 乎 是 一 致 的 , C o m p a c t i o n 期 间 可 能 会 几 乎 掉 到 0 , 而 7 . x 则 是 十 分 稳 定 。

延 时 对 比

同 样 , R o c k s D B 6 . x 的 延 时 在 C o m p a c t i o n 期 间 也 会 有 剧 烈 的 波 动 , 而 R o c k s D B 7 . x 则 表 现 十 分 平 稳 , 甚 至 低 到 在 对 比 图 中 几 乎 看 不 到 。

为 了 可 以 更 清 楚 看 到 7 . x 的 延 时 情 况 , 下 图 把 R o c k s D B 6 . x 去 掉 , 可 以 看 到 新 版 本 的 延 时 几 乎 没 有 波 动 。

C o m p a c t i o n 耗 时 对 比

同 样 的 数 据 量 , R o c k s D B 7 . x 会 比 R o c k s D B 6 . x C o m p a c t i o n 的 持 续 周 期 会 更 长 一 些 。 说 明 了 R o c k s D B 7 . x 除 了 锁 优 化 之 外 , 也 将 后 台 的 C o m p a c t i o n 相 关 的 周 期 拉 得 更 长 来 规 避 影 响 正 常 的 读 写 请 求 。

其 他 关 键 指 标

从 E s t i m a t e K e y s 数 量 以 及 D B 大 小 来 看 , 两 个 版 本 存 储 的 数 据 量 比 较 接 近 , 整 体 上 符 合 预 期 。

磁 盘 读 写 也 印 证 了 R o c k s D B 7 . X 在 C o m p a c t 策 略 上 会 比 6 . x 更 加 缓 和 , 从 本 次 测 试 结 果 来 看 几 乎 对 于 实 时 读 写 没 有 造 成 任 何 影 响 。

总 结

从 以 上 单 次 的 压 测 数 据 来 看 , R o c k s D B 7 . x 版 本 的 C o m p a c t i o n 几 乎 没 有 对 写 入 造 成 太 大 影 响 。 主 要 优 化 来 自 两 方 面 :

  • R o c k s D B 修 复 了 C o m p a c t i o n P e n d i n g B y t e s 计 算 放 大 问 题 导 致 长 时 间 W r i t e S t a l l 问 题 , 具 体 讨 论 见 : r o c k s d b # i s s u e 9 4 2 3 [ 6 ]
  • 减 少 了 C o m p a c t i o n 和 写 入 的 锁 竞 争 , 从 而 规 避 了 C o m p a c t i o n 期 间 阻 塞 写 入 问 题

其 实 在 更 早 之 前 @ a l e k s r a i d e n [ 3 ] 就 在 K v r o c k s 社 区 发 起 过 将 R o c k s D B 升 级 到 7 . x 的 讨 论 : C h a n g e R o c k s D B t o 7 . х ? [ 4 ] , 考 虑 到 稳 定 性 以 及 当 时 还 没 有 看 到 明 显 收 益 , 所 以 没 有 继 续 往 前 推 进 。 但 有 了 这 次 具 体 的 测 试 案 例 和 数 据 , 社 区 可 以 更 快 去 推 进 R o c k s D B 7 . x 在 K v r o c k s 的 落 地 。 目 前 @ z h a o x i a o b i a o 也 已 经 提 了 P R # 1 0 5 6 [ 5 ] , 欢 迎 更 多 用 户 的 测 试 和 反 馈 。

参 考 资 料

[ 1 ]

P e r f o r m a n c e o f c o m p a c t i o n s ( k v r o c k s ) : h t t p s : / / g r o u p s . g o o g l e . c o m / g / r o c k s d b / c / u m R P b o h a 0 a s / m / 5 V P 6 z v w i C g A J ? u t m _ m e d i u m = e m a i l & u t m _ s o u r c e = f o o t e r

[ 2 ]

@ z h a o x i a o b i a o : h t t p s : / / g i t h u b . c o m / x i a o b i a o z h a o

[ 3 ]

a l e k s r a i d e n : h t t p s : / / g i t h u b . c o m / a l e k s r a i d e n

[ 4 ]

C h a n g e R o c k s D B t o 7 . х ? : h t t p s : / / g i t h u b . c o m / a p a c h e / i n c u b a t o r - k v r o c k s / d i s c u s s i o n s / 1 0 1 3

[ 5 ]

P R # 1 0 5 6 : h t t p s : / / g i t h u b . c o m / a p a c h e / i n c u b a t o r - k v r o c k s / p u l l / 1 0 5 6

[ 6 ] r o c k s d b # i s s u e 9 4 2 3 : h t t p s : / / g i t h u b . c o m / f a c e b o o k / r o c k s d b / i s s u e s / 9 4 2 3

参考阅读:

本文由高可用架构转载。技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。