亚马逊AWS官方博客

字节跳动 ByteHouse 云原生之路(二)– 基于 AWS 的高性能日志分析 SaaS 服务

引言

在这个数据驱动的时代,企业正面临着前所未有的海量日志数据挑战。如何高效地收集、存储和分析这些数据,已成为提升业务洞察力和决策能力的关键。作为 BytePlus 推出的一款现代化实时数据仓库,ByteHouse 不仅具备类似 Elasticsearch 的强大日志分析能力,还提供了更高的性价比,为企业数据管理带来了新的可能。

本文将深入探讨字节跳动 ByteHouse 云原生之路上的持续优化。通过充分利用 AWS 的强大基础设施,ByteHouse 可以帮助用户成功地打造一款高性能的日志分析 SaaS 服务,成为企业实时处理和分析日志数据的强大工具。

1. 解决方案概述

1.1 服务特点

ByteHouse 作为一款创新的云原生数据分析平台,为企业提供了一站式的高性能日志分析解决方案。其核心优势体现在以下几个方面:

  • 高性能数据处理引擎

ByteHouse 采用先进的列式存储和向量化查询技术,实现了卓越的数据处理性能。即使面对 PB 级别的大规模数据集,也能支持毫秒级的快速查询和实时分析。这一特性使得企业能够在海量日志中迅速找到关键信息,大幅提升运营效率和决策速度。

  • 灵活的架构设计

得益于其云原生架构,ByteHouse 具备高度的灵活性和可扩展性。系统能够根据业务需求动态调整计算和存储资源,完美适配数据分析、日志分析等多样化的业务场景。这种弹性设计不仅确保了服务的稳定性,还能有效控制成本,避免资源浪费。

  • 性价比优势

相较于传统的日志分析工具,ByteHouse 在性价比方面具有显著优势。它不仅提供更具竞争力的定价策略,还通过高效的资源利用和优化的查询性能,为用户带来更高的投资回报。此外,ByteHouse 独特的”数仓+日志”一站式平台设计,进一步简化了企业的数据架构,降低了总体拥有成本(TCO)。

1.2 技术架构

这里我们关注下几个核心 AWS 服务:AWS PrivateLink,Amazon MSK,Amazon EC2 和 Amazon EKS,以及 Amazon S3。

  • AWS PrivateLink – ByteHouse 通过 AWS PrivateLink 实现了数据传输的高度安全性,使得 ByteHouse 在不暴露数据到公共互联网的情况下,安全地连接和传输数据。对于处理敏感信息的企业而言,这一特性尤为重要
  • Amazon MSK – ByteHouse 利用 Amazon MSK 来处理和传输大规模流数据,这种集成带来了多项优势:
    • 支持复杂的数据流应用和事件驱动架构,增强了实时数据处理能力
    • MSK 的高可用性确保了数据流的连续性,减少了数据丢失的风险
    • 自动化管理功能大大降低了运维负担,使团队可以专注于核心业务逻辑
  • Amazon EC2 EKS – 通过结合使用 Amazon EC2 和 EKS,实现了计算资源的灵活调度:
    • EC2 提供了多样化的实例类型,满足不同性能和成本需求
    • EKS 简化了容器化应用的部署和管理,提高了系统的可扩展性和弹性
    • 这种组合使 ByteHouse 能够根据实时负载自动扩展或收缩资源,优化成本效益
  • Amazon S3 – 为 ByteHouse 提供了强大的对象存储解决方案:
    • 支持数据的持久性存储和多版本控制,确保数据的完整性和可追溯性
    • S3 的安全功能,如加密和访问控制,进一步增强了数据保护
    • ByteHouse 自身的数据沉降机制与 S3 的存储分层完美结合,实现了数据全生命周期的智能管理,有效降低存储成本

1.3 应用场景

ByteHouse 的强大功能和灵活性使其能够适应多种复杂的数据分析场景,以下是两个经典的应用场景,展示了 ByteHouse 如何在实际业务中发挥关键作用。

  1. 即时分析查询/明细查询

在这类场景中,ByteHouse 显著提升了带有 String 字段过滤的查询性能。通过优化的倒排索引技术,ByteHouse 实现了查询效率的大幅提升:

  • 电商罗盘业务案例:
    • 业务特点:大量使用 String 的等于/Like 操作作为数据查询的过滤条件。
    • 优化效果:应用倒排索引过滤后,IO 减少了 87%,查询速度提升 5 倍。
    • 实际影响:这一优化使得业务分析人员能够更快速地获取关键数据,提高决策效率。
  • 财经平台案例:
    • 需求:对 String 字段按特定字符进行切分,并执行包含关系查询。
    • ByteHouse 解决方案:提供高效的分词能力,并优化查询性能。
    • 业务价值:使复杂的财务数据分析变得更加迅速和精准,支持更灵活的财务报告和分析。
  1. 日志分析场景

在日志分析领域,ByteHouse 提供了强大的文本检索和分析能力,适用于大规模、实时的日志处理需求。

  • 服务监控和问题诊断案例:
    • 需求:对各服务的日志数据进行实时监控,快速发现和定位业务问题。
    • ByteHouse 解决方案:提供丰富的文本检索能力,如词组匹配、模糊匹配等。
    • 性能优势:即使在海量日志数据的情况下,也能高效完成文本检索。
    • 业务价值:提高系统可靠性,减少故障排查时间,提升运维效率。
  • 舆情分析系统案例:
    • 客户需求:根据关键词检索最近搜集到的大量日志数据。
    • ByteHouse 解决方案:
      • 实时索引更新:确保新收集的日志数据能够立即被检索。
      • 高效全文搜索:支持复杂的关键词组合和语义搜索。
      • 结果高亮显示:帮助分析人员快速定位关键信息。
    • 业务价值:使客户能够及时把握市场动态,快速响应潜在的舆情风险。

2. 技术实现

2.1 原理

在文本检索场景中,最常见的查询类型是根据关键词或关键词模式定位包含这些关键词的数据。ByteHouse 采用倒排索引技术,提供了从文本内容到文档 ID 的高效映射:

  • 倒排索引优势:能快速定位符合条件的数据,大幅减少 IO 和计算开销。
  • 工作流程:
    • 快速定位包含关键词的数据行
    • 直接读取这些特定数据行
    • 进行后续计算

2.2 实现设计

ByteHouse 的文本检索实现包含以下关键组件:

  • 文本预处理

用户导入的文档数据及查询都需要经过文本预处理,进而从输入文本中提取出关键词及关联的信息。

  • FST(Finite State Transducer)

在查询时,为了检索某个关键词在哪些行出现,我们需要在内存中保存一个类似的 Map 的结构,为了尽可能减少内存的占用,一般使用 FST 来进行这个映射关系的存储。

  • PostingList

用于存储某个关键词出现的所有文档的信息,包括文档的 ID、词汇在某个文档中出现的次数、在文档中出现的位置。由于某些词汇出现的频率非常高,因此会将 PostingList 中的数据进行编码及压缩来尽可能减少存储空间的使用。

2.3 倒排索引

支持倒排索引对一些模块有修改,包括:

  • GinIndexStore:负责索引的存储和管理
  • QueryExecutor:优化查询执行逻辑,充分利用倒排索引
  • IOReader/IOWriter:改进数据读写机制,提高索引的读写效率
  • IndexMerger:优化索引合并策略,保持索引的高效性
  • Optimizer:增强查询优化器,更好地利用倒排索引进行查询计划优化

2.4 倒排索引存储格式

数据按照 Part 为粒度进行存储,拥有倒排索引后,每个 Part 会增加三个文件,分别是:

  • 元数据文件 Metadata File
  • 字典文件 Dictionary File
  • 倒排列表文件 Posting Lists File

3. 示例

3.1 SQL 建表语句

在 ByteHouse 中,用户需要在建表时显式地指定倒排索引。以下是一个典型的建表语句示例,展示了如何在日志分析场景中创建带有倒排索引的数据表:

CREATE TABLE `uat_mms_log`.`uat_k8s_app_all` COMMENT '' 
(
    `@timestamp` DateTime64(3),
    `log.type` String,
    `level` LowCardinality(String),
    -- ... (other columns)
    INDEX message_idx message TYPE tokenbf_v1(8192, 6, 0) GRANULARITY 1,
    INDEX message_inverted_idx lower(message) TYPE inverted GRANULARITY 1,
    INDEX stacktrace_idx lower(stacktrace) TYPE inverted GRANULARITY 1
)
ENGINE = CnchMergeTree()
PRIMARY KEY (`level`, `k8s.env`, `k8s.namespace`, `k8s.container`, `@timestamp`)
ORDER BY (`level`, `k8s.env`, `k8s.namespace`, `k8s.container`, `@timestamp`)
PARTITION BY (toYYYYMMDD(`@timestamp`), toHour(`@timestamp`))
SETTINGS 
    cnch_server_vw = 'server_vw_default',
    cnch_vw_write = 'vw-12345678-write';

这个 SQL 语句的关键点包括:

  1. 倒排索引定义

INDEX message_inverted_idx lower(message) TYPE inverted GRANULARITY 1和INDEX stacktrace_idx lower(stacktrace) TYPE inverted GRANULARITY 1 语句为 messagestacktrace 字段创建了倒排索引,支持高效的全文搜索

  1. 布隆过滤器索引

INDEX message_idx message TYPE tokenbf_v1(8192, 6, 0) GRANULARITY 1message 字段创建了一个布隆过滤器索引,用于快速过滤

  1. 分区策略

PARTITION BY (toYYYYMMDD(@timestamp), toHour(@timestamp)) 按日期和小时进行分区,有利于管理和查询大规模时序数据

  1. 主键和排序键

PRIMARY KEYORDER BY 优化了常用查询字段的访问效率

3.2 存储方案

ByteHouse 针对日志分析场景的特殊需求,采用了多层存储架构,以平衡查询性能和存储成本:

1. 热数据层:

  • 存储介质:内存 + NVMe SSD
  • 特点:最快的访问速度,适合频繁查询的最新日志数据
  • 作用:满足对查询延迟敏感的人机交互需求

2. 温数据层:

  • 存储介质:S3 标准存储
  • 特点:平衡了访问速度和存储成本
  • 作用:存储近期但不是最热门的日志数据

3. 冷数据层:

  • 存储介质:S3 低频或深度归档存储
  • 特点:最低的存储成本,但访问速度较慢
  • 作用:长期存储历史日志,满足合规和深度分析需求

3.3 数据流转策略

  • Preload 预热

根据预测的查询模式,提前将可能需要的数据从冷层加载到热层

  • LRU(最近最少使用)算法

自动将不常访问的数据从热层沉降到温层或冷层

4. 对比分析

在评估 ByteHouse 的性能和效率时,我们将其与业界领先的搜索和分析引擎 Elasticsearch 进行了全面对比。这次对比不仅展示了 ByteHouse 的技术优势,也凸显了其在资源利用效率方面的卓越表现。

4.1 测试集群

为确保公平比较,我们设置了以下测试环境:

  • ByteHouse 集群配置:
  • 计算资源:512 核 CPU
  • 内存容量:8 TB
  • 存储容量:84 TB NVMe SSD
  • Elasticsearch 集群配置:
  • 集群数量:2 个
  • 总计算资源:1152 核 CPU
  • 总内存容量:6 TB
  • 总存储容量:80+ TB NVMe SSD

4.2 性能对比

测试采用关键字检索“INFO”的方式进行。

查询 2 亿数据量耗时(s) 查询 10 亿数据量耗时(s) 查询 50 亿数据量耗时(s)
ByteHouse 4.45 4.81 5.09
Elasticsearch 3.91 6.82 14.33

4.3 压缩对比

总存储数据量(亿条) 总存储大小(TB)
ByteHouse 550 30
Elasticsearch 550 117

4.4 结果分析

在以上的测试中,我们可以看到 ByteHouse 在仅使用 50% 资源的情况下,在综合性能和数据压缩方面均展现出显著优势,明显超越了 Elasticsearch。尤为值得注意的是,随着数据规模的扩大,ByteHouse 的性能优势愈发凸显,呈现出优异的可扩展性。

在日志分析这一特定场景中,ByteHouse 的数据压缩能力尤其引人注目。其高效的压缩算法不仅大幅降低了存储开销,还使企业能够在相同的预算下存储和分析更多的数据,从而提升了数据利用的深度和广度。

5. 小结

ByteHouse 作为一个融合了数据仓库和日志分析功能的综合平台,为企业提供了前所未有的灵活性。它允许用户在同一系统内无缝切换实时分析和历史查询,极大地简化了数据管理流程,这种 all-in-one 的解决方案不仅提高了数据处理的效率,还降低了维护多个系统的复杂性和成本。总的来说,ByteHouse 通过其卓越的性能、高效的压缩能力以及多功能的集成特性,为企业提供了一个强大而灵活的数据分析平台,不仅能够满足当前的需求,还能为未来的数据增长和分析需求提供充分的保障。

本篇作者

Aelfric Lin

字节跳动 ByteHouse 高级产品经理。在数据产品和 AI 产品领域拥有深厚的经验,目前专注于拓展国际市场,并在湖仓一体化、数据生态系统、大型模型等专业领域进行深入研究和实际操作。

彭信东

字节跳动 ByteHouse 高级技术专家。负责火山引擎 OLAP 引擎研发工作,有多年 TP/AP 数据库、云原生数据库、分布式系统内核研发经验,目前主要聚集于 AP 数据库与检索、数据湖、RAG 相关技术结合的创新方向研发工作。

王思远

字节跳动 Bytehouse 高级研发工程师,专注于数据库引擎研发和性能优化,有目前主要聚焦于 Bytehouse 云原生数据库相关开发工作。