快照是 ZooKeeper 持久化的第二条腿(第一条是事务日志)。它什么时候做、要多久、多大、会不会拖慢写?这篇逐项量出来,还试了快照压缩。
共 18 个快照;相邻间隔(事务数):[548, 859, 552, 641, 504, 595, 711, 932, 537, 727, 924, 820, 583, 963, 547, 680, 512] 最小 504 / 最大 963(都落在 snapCount/2 = 500 到 snapCount = 1000 之间:True)
znode 数 快照文件 耗时 ms 文件 MiB
10000 snapshot.2712 14 2.7
50000 snapshot.c352 49 13.5
200000 snapshot.30d42 163 54.1耗时是启动时写新快照的日志耗时(「Snapshot taken in X ms」),单线程写一份完整的树。
触发快照(8 次):前台同步写 p50 3.76 ms / p99 11.72 ms / 最大 67.6 ms;不触发快照:p50 3.35 / p99 11.69 / 最大 85.0 ms
前台与后台测的是同一个节点;两种情形下后台都在持续写,所以延迟分布的差别只来自快照本身。
压缩方式 默认(CHECKED) 文件 snapshot.186a2 27.0 MiB 写快照 176 ms 压缩方式 gz 文件 snapshot.186a2.gz 1.1 MiB 写快照 653 ms
压缩换来更小的磁盘占用和更快的网络传输(SNAP 同步时),代价是写快照时更多 CPU 与时间。