WEBKT

深入解析 SkyWalking BanyanDB:专为可观测性而生的下一代存储架构

1 0 0 0

在可观测性领域,Apache SkyWalking 已经成为了分布式追踪、指标监控和日志管理的标配工具。然而,随着数据规模的指数级增长,传统存储引擎(如 ElasticSearch、H2 或 InfluxDB)在处理海量追踪(Tracing)和指标(Metrics)时,逐渐暴露出资源消耗大、维护成本高以及查询效率受限等痛点。

为了彻底解决这些问题,SkyWalking 社区推出了 BanyanDB —— 一个专为可观测性设计的下一代存储引擎。本文将深度剖析 BanyanDB 的设计哲学、架构模型及其背后的核心技术。

一、 为什么我们需要 BanyanDB?

在 BanyanDB 出现之前,SkyWalking 依赖第三方数据库存储数据:

  1. ElasticSearch:功能强大但过于厚重,在处理极高写入并发时,索引膨胀和内存开销是巨大的挑战。
  2. H2/MySQL:难以支撑大规模分布式系统的生产级负载。
  3. InfluxDB:虽然擅长指标,但在处理 Tracing(非结构化数据)时表现欠佳,且集群版非完全开源。

BanyanDB 的目标是通过 Schema-aware(感知模式)的设计,提供一个在性能、资源占用和查询能力上达到平衡的存储解决方案。


二、 核心概念与逻辑架构

BanyanDB 的设计围绕着可观测性的三大支柱进行建模,其逻辑组织结构分为三个层级:

  1. Group(组):最高层级的逻辑单元,用于资源隔离和配置共享(如 TTL 策略、分片数量)。
  2. Resource(资源):具体的存储实体,分为以下三种类型:
    • Stream:用于存储追踪(Trace)和日志(Log)。它是追加写入的,通常包含时间戳、ID 和一系列非索引字段。
    • Measure:用于存储指标(Metrics)。它针对时序计算进行了优化,支持复杂的聚合操作。
    • Property:用于存储元数据或配置(如服务清单、租户信息)。
  3. Shard(分片):数据分布的物理单位,通过对 ID 或特定字段进行哈希实现。

三、 存储引擎的底层原理

BanyanDB 并没有盲目重复造轮子,而是借鉴了 LSM-tree(Log-Structured Merge-tree)的思想,并针对可观测性数据的特性进行了深度定制。

1. Stream 存储:高效处理 Trace 与 Log

对于 Stream 数据,BanyanDB 采用“时间分片 + 列式存储”的策略。

  • 索引优化:BanyanDB 支持倒排索引和标签过滤。与 ES 不同的是,它允许开发者精确定义哪些字段需要索引,从而避免了不必要的 CPU 和存储开销。
  • 压缩算法:针对 Trace ID 这种长字符串,采用了专门的字典压缩方案。

2. Measure 存储:极致的指标聚合

Measure 是 BanyanDB 性能最强悍的部分:

  • 多维数据模型:类似于 Prometheus 的数据模型,但支持更丰富的 Data Type。
  • 预聚合(Top-N):BanyanDB 内置了对 Top-N 查询的本地化支持,无需频繁地从磁盘读取原始数据进行实时计算。
  • 列式存储布局:将相同标签的数据在物理上连续存储,极大地提升了范围查询(Range Query)的速度。

3. 索引管理

BanyanDB 引入了 Global IndexLocal Index

  • Local Index 随数据分片存储,生命周期与数据同步。
  • Global Index 则用于跨时间范围的快速定位(如通过 Trace ID 查找特定请求),有效解决了时序数据库在非时间维度查询弱的难题。

四、 BanyanDB 的核心优势

  1. 资源利用率极高:在相同的摄取速率下,BanyanDB 的内存消耗和磁盘占用通常仅为 ElasticSearch 的 1/3 甚至更低。
  2. Schema-aware 设计:通过预定义模式,存储引擎能够理解数据的语义,从而在数据布局和查询计划优化上做出更智能的选择。
  3. 无缝集成 SkyWalking:作为原生引擎,它完美契合 SkyWalking 的数据流模型,减少了数据转换的 overhead。
  4. 云原生友好:支持分布式部署,具备良好的水平扩展能力。

五、 总结与展望

BanyanDB 的推出标志着 Apache SkyWalking 从一个单纯的“可观测性平台”演变为一个拥有“全栈自研存储能力”的完整生态。对于中大规模的 IT 团队而言,从 ElasticSearch 迁移到 BanyanDB,意味着更简单的运维流程、更低的硬件成本以及更快的监控响应速度。

目前 BanyanDB 正处于快速演进中。如果你正在为 SkyWalking 的存储性能感到焦虑,或者正在寻找一款针对可观测性场景调优的存储引擎,BanyanDB 绝对值得你深度关注与尝试。


参考资源:

  • Apache SkyWalking 官网
  • BanyanDB GitHub 仓库
架构猿笔记 SkyWalkingBanyanDB可观测性

评论点评