乐趣区

关于olap:如何构建面向海量数据高实时要求的企业级OLAP数据引擎

在字节跳动各产品线飞速成长的过程中,对数据分析能力也提出了更高的要求,现有的支流数据分析产品都没方法齐全满足业务要求。因而,字节跳动在 ClickHouse 引擎根底上重构了技术架构,实现了云原生环境的部署和运维治理、存储计算拆散、多租户治理等能力,推出了云原生数据仓库 ByteHouse。
在性能、可扩展性、稳定性、可运维性以及资源利用率方面都实现了微小晋升,可能很好的满足字节跳动数据量极大、实时性要求极高、场景丰盛的业务需要。
咱们能够从上面几个方面意识 ByteHouse:

极致性能

在连续了 ClickHouse 单表查问弱小性能的同时,新增了自研的查问优化器,在多表关联查问和简单查问场景下性能晋升若干倍,实现了在各类型查问中都达到极致性能。

新一代 MPP 架构,存算拆散

应用旧式架构,Shared-nothing 的计算层和 Shared-everything 的存储层,能够性能损耗很小的状况下,实现存储层与计算层的拆散,独立按需扩缩容。

资源隔离,读写拆散

对硬件资源进行灵便切割调配,按需扩缩容。资源无效隔离,读写离开资源管理,工作之间互不影响,杜绝了大查问打满所有资源拖垮集群的景象。

丰盛性能

ByteHouse 提供客户丰盛的企业级能力,如:兼容 ANSI-SQL 2011 规范、反对多租户、库表资产治理、基于角色的权限治理以及多样的性能诊断工具等。

ByteHouse 架构设计

ByteHouse 整体架构图

云原生数据仓库 ByteHouse 总体架构图如上图所示,设计指标是实现高扩展性、高性能、高可靠性、高易用性。从下往上,总体上分服务层、计算层和存储层。

服务层

服务层包含了所有与用户交互的内容,包含用户治理、身份验证、查问优化器,事务管理、平安治理、元数据管理,以及运维监控、数据查问等可视化操作性能。
服务层次要包含如下组件:

资源管理器

资源管理器(Resource Manager)负责对计算资源进行对立的治理和调度,可能收集各个计算组的性能数据,为查问、写入和后台任务动态分配资源。同时反对计算资源隔离和共享,资源池化和弹性扩缩等性能。资源管理器是进步集群整体利用率的外围组件。

服务节点

服务节点(CNCH Server)能够看成是 Query 执行的 master 或者是 coordinator。每一个计算组有 1 个或者多个 CNCH Server,负责承受用户的 query 申请,解析 query,生成逻辑执行打算,优化执行打算,调度和执行 query,并将最终后果返回给用户。计算组是 Bytehouse 中的计算资源集群,可按需进行横向扩大。服务节点是无状态的,意味着用户能够接入任意一个服务节点(当然如果有须要,也能够隔离开),并且能够程度扩大,意味着平台具备反对高并发查问的能力。

元数据服务

元数据服务(Catalog Service)提供对查问相干元数据信息的读写。Metadata 次要包含 2 局部:Table 的元数据和 Part 的元数据。
表的元数据信息次要包含表的 Schema,partitioning schema,primary key,ordering key。Part 的元数据信息记录表所对应的所有 data file 的元数据,次要包含文件名,文件门路,partition, schema,statistics,数据的索引等信息。
元数据信息会长久化保留在状态存储池外面,为了升高对元数据库的拜访压力,对于拜访频度高的元数据会进行缓存。元数据服务本身只负责解决对元数据的申请,本身是无状态的,能够程度扩大。

平安治理

权限管制和平安治理,包含入侵检测、用户角色治理、受权治理、拜访白名单治理、平安审计等性能。

计算层

通过容器编排平台(如 Kubernetes)来实现计算资源管理,所有计算资源都放在容器中。
计算组是计算资源的组织单位,能够将计算资源按需划分为多个虚构集群。每个虚构集群里蕴含 0 到多台计算节点,可依照理论资源需求量动静的扩缩容。计算节点次要承当的是计算工作,这些工作能够是用户的查问,也能够是一些后台任务。
用户查问和这些后台任务,能够共享雷同的计算节点以进步利用率,也能够应用独立的计算节点以保障严格的资源隔离。
计算组是无状态的,能够疾速程度扩大。

存储层

采纳 HDFS 或 S3 等云存储服务作为数据存储层。用来存储理论数据、索引等内容。
数据表的数据文件存储在远端的对立分布式存储系统中,与计算节点拆散开来。底层存储系统可能会对应不同类型的分布式系统。例如 HDFS,Amazon S3, Google cloud storage,Azure blob storage,阿里云对象存储等等。底层存储是人造反对高可用、容量是有限扩大的。
不同的分布式存储系统,例如 S3 和 HDFS 有很多不同的性能和不一样的性能,会影响到咱们的设计和实现。例如 HDFS 不反对文件的 update, S3 object move 操作时重操作须要复制数据等。
通过存储的服务化,计算层能够反对 ByteHouse 本身的计算引擎之外,未来还能够便捷地对接其余计算引擎,例如 Presto、Spark 等。数据导入导出 ByteHouse 包含一个数据导入导出(Data Express)模块,负责数据的导入导出工作。

Data Express 模块架构图
Data Express 为数据导入 / 导出作业提供工作流服务和疾速配置模板,用户能够从提供的疾速模板创立数据加载作业。
DataExpress 利用 Spark 来执行数据迁徙工作。
次要模块:

  • JobServer 
  • 导入模板
  • 导出模板
    JobServer 治理所有用户创立的数据迁徙作业,同时运行内部事件触发数据迁徙工作。
    启动工作时,JobServer 将相应的作业提交给 Spark 集群,并监控其执行状况。作业执行状态将保留在咱们的元存储中,以供 Bytehouse 进一步剖析。ByteHouse 反对离线数据导入和实时数据导入。

离线导入

离线导入

数据源:

  • Object Storage:S3、OSS、Minio
  • Hive (1.0+)Apache Kafka /Confluent Cloud/AWS Kinesis
  • 本地文件
  • RDS

离线导入

实用于心愿将已筹备好的数据一次性加载到 ByteHouse 的场景,依据是否对指标数据表进行分区,ByteHouse 提供了不同的加载模式:

  • 全量加载:全量将用最新的数据替换全表数据。
  • 增量加载:增量加载将依据其分区将新的数据增加到现有的指标数据表。
    ByteHouse 将替换现有分区,而非进行合并。
    反对的文件类型
  • ByteHouse 的离线导入反对以下文件格式:
  • Delimited files (CSV, TSV, etc.)
  • Json (multiline)
  • Avro
  • ParquetExcel (xls)

实时导入

ByteHouse 可能连贯到 Kafka,并将数据继续传输到指标数据表中。与离线导入不同,Kafka 工作一旦启动将继续运行。ByteHouse 的 Kafka 导入工作可能提供 exactly-once 语义。您能够进行 / 复原生产工作,ByteHouse 将记录 offset 信息,确保数据不会失落。
ByteHouse 在流式导入中反对以下音讯格局:

  • Protobuf
  • JSON

总结

云原生数据仓库 ByteHouse 是一个具备极致性能、可能存储和计算资源别离按需扩缩容、功能丰富的数据分析产品,是一个面向海量数据、高实时要求的一个企业级 OLAP 数据引擎。ByteHouse 在字节跳动的泛滥场景中有着丰盛的教训积攒,尤其是在实时数据分析场景和海量数据灵便查问场景,都有超大规模的利用。ByteHouse 基于自研技术劣势和超大规模的应用教训,为企业大数据团队带来新的抉择和反对,以应答复杂多变的业务需要,高速增长的数据场景。目前,ByteHouse 已在火山引擎上提供收费试用,欢送大家来尝试,并为咱们提出贵重倡议。

立刻跳转火山引擎 ByteHouse 官网理解详情!欢送下载《从 ClickHouse 到 ByteHouse》白皮书理解更多~

退出移动版