内容提要
VictoriaMetrics 是一个时序数据库,由 vmstorage、vminsert 和 vmselect 三部分组成。vmstorage 提供高可用的数据存储,采用无共享架构。数据通过 vminsert 进行分片写入,vmselect 负责查询。数据存储分为 small 和 big 目录,以优化读取和压缩效率,使用 ZSTD 压缩算法提升性能。
延伸解读
无共享架构如何提升可用性
vmstorage 节点之间不通信、不共享数据,这种无共享架构降低了节点间的耦合。当某个节点故障时,其他节点仍可独立提供服务,集群整体可用性更高。同时,添加或替换节点时无需复杂的数据迁移,维护和扩展更简单。但这也意味着数据分片和复制策略需要由 vminsert 和查询层配合处理,以保证数据不丢失。
small 与 big 目录的设计权衡
VictoriaMetrics 将数据分为 small 和 big 目录,是为了平衡读取速度和压缩率。近期数据常被查询,存放在 small 目录并使用低级别 ZSTD 压缩,解压更快;历史数据访问较少,合并到 big 目录后采用高级别 ZSTD 压缩,节省磁盘空间。这种分层存储策略在时序数据场景下,既满足了热数据的低延迟读取,又优化了冷数据的存储成本。
数据分片与查询去重的配合
vminsert 使用一致性哈希将每个唯一时间序列固定到同一分片的 vmstorage 上,这提高了数据局部性,有利于压缩和缓存。查询时,vmselect 会向所有相关 vmstorage 节点发送请求,然后合并并去重结果。如果配置了复制因子,同一份数据会写入多个节点,查询时也需要去重。这种设计在保证数据可靠性的同时,要求查询层具备高效的合并能力。
Q&A
VictoriaMetrics 的主要组成部分有哪些?
VictoriaMetrics 主要由 vmstorage、vminsert 和 vmselect 三部分组成。
vmstorage 是如何确保数据高可用的?
vmstorage 采用无共享架构,通过复制方法将数据写入多个节点,确保数据的高可用性。
vminsert 在数据写入中起什么作用?
vminsert 负责将数据进行分片写入,使用一致性哈希算法确保每个时间序列位于同一分片的 vmstorage 上。
vmselect 是如何处理查询请求的?
vmselect 向 vmstorage 节点发送查询请求,合并去重后将结果返回给客户端。
VictoriaMetrics 中的数据存储是如何优化的?
数据存储分为 small 和 big 目录,使用不同级别的 ZSTD 压缩算法,以优化读取和压缩效率。
为什么要将数据分为 small 和 big 目录?
分为 small 和 big 目录是为了兼顾近期数据的快速读取和历史数据的高压缩率。