聊点技术|数据爆炸性增长,Bonree ONE存储如何做到稳如泰山

2023-12-04

背景

新一代的Bonree ONE主要体现在轻盈、有序、精准三个亮点,而这三个方向都离不开一个稳定、可靠、高效的数据存储底座。目前,Bonree ONE基于Clickhouse进行存储,容纳了包括APM、RUM、LOG、会话、用户行为分析等多个业务模块的场景数据。

存储的难点

Bonree ONE容纳模块较多,数据使用场景复杂多变,对于底层数据存储,主要难点如下:

· 数据写入量大,数据量级要可以扩展到PB级别的数据摄入;

· 业务流量存在波峰和波谷,而且波峰和波谷的差距较大,存在突发超高峰写入的场景;

· 查询场景复杂,有olap分析、明细数据查询以及复杂的多字段排序场景;

· 查询稳定性要求较高,对于告警、重要指标要做到ms级别响应;

· 集群维护场景复杂度高,要应对集群扩缩容、数据均衡以及数据重分布等场景;

围绕Clickhouse的优化

针对以上难点,我们需要在写入、读取、多租户以及failover机制的策略响应上进行优化,满足Bonree ONE应对超大数据量应用场景的需求。

写入优化

image

· 按表攒批

Clickhouse是擅长按批写入数据的,批次的数据越大,吞吐量越高。为应对多场景数据涉入的状况和减少业务端对数据存储感知的需求,我们通过消费节点来完成攒批逻辑,根据每个表的个性化定制策略,实现攒批效果的最大化,这既能满足业务效率的要求,又能实现Clickhouse数据摄入的最大吞吐量。

· 限流

在有限存储资源的情况下,Clickhouse集群支持的摄入量是有限的,过大的数据写入主要有两个维度的原因,一个是写入的数据量过多,另一个是写入的峰值过高。前者会通过告警功能送达运维团队,通过扩容或者数据裁剪的操作来解决问题。后者则通过限流来保证存储集群的稳定性。目前,在consumer节点,我们增加了窗口逻辑来满足限流操作策略介入的需要,比如每秒写入次数、写入时间间隔等。

读取优化

为支持多业务有更稳定的数据使用效率,在数据查询上,高频查询的响应效率务必高效,我们主要从以下角度着手优化:

· 查询加速

· orderBy 和 primaryKey的高效使用:orderBy相关字段是表数据的排序设置,它对高频查询的效率有重要。一般orderBy的设置要尽量覆盖当前表业务的高频查询,从低基数到高基数进行排序设置。primaryKey默认与orderBy一致,如果filter条件没有覆盖所有的orderBy字段,则可以提取部分字段作为  primaryKey ,但是primaryKey 必须是 orderBy字段的前缀。

· 索引:针对等值过滤使用BF索引,针对范围查询使用minmax索引,针对全文检索,使用tokenbf索引。

· 物化视图:针对固定优化查询场景,使用物化视图,满足数据一致性的同时,大大提高查询效率。

· projection:针对部分预聚合场景,使用projection的效率更高,而且有更友好的自动路由,减少业务侵入。

· 压缩和编码

Clickhouse提供了多种编码以及多种编解码器,极大提高数据的压缩效率,节省IO、存储等资源。Clickhouse支持的压缩算法如下:

·NONE : No Compression.

·LZ4 : Applies LZ4 fast compression.

·LZ4HC[(level)] : LZ4 HC (high compression) algorithm with configurable level.

·ZSTD[(level)] : ZSTD compression algorithm with configurable level.

经过测试对比,ZSTD的压缩效率是LZ4的5~~6倍。

若想要更高的压缩效率,数据的存储编码是一种更好的优化手段。Clickhouse提供的编码算法如下:

·Delta : This approach stores the difference between 2 neighbor values. It can be combined with LZ4 and ZSTD.

·DoubleDelta : This approach stores the difference between 2 neighbor delta values (delta of deltas). Suitable for time series data.

·Gorilla : Calculates XOR between current and previous value. Suitable for slowly changing floating numbers.

·T64 : It crops unused high bits of values in integer data types(include Enum, Date, DateTime) and puts them into a 64×64 bit matrix.

·FPC : Used in floating point values. XOR between the actual value and the predicted value.

针对以上编码算法的特性,时间字段我们选择基于DoubleDelta编码的ZSTD(1)压缩算法,String类型使用ZSTD(1)的压缩算法。

· 字段类型精细化

Clickhouse提供了非常精细的数据字段进行压缩,比如整数就支持int8、int16、int32、int64,Clickhouse之所以这么细化数据类型,是为了高效的存储和计算,所以在业务使用端,也要做到精确化管理。

· 低基数的String使用 LowCardinality(String)。

· 能用更少位数的数据存储,就选择最少位数的数据存储,比如优先使用int8,而不是默认使用int64。

· 半结构化数据优先使用Map结构,其次是JSON结构。

多租户

Clickhouse为了保障多业务稳定查询,支持了多租户,减少业务之间的影响。我们基于Clickhouse的多租户能力,给予每条产品线单独的租户,实现租户资源个性化配置,满足不同业务不同优先级的诉求。

image-1701397299884

系统是根据各个租户的业务重要程度与场景响应需求来制定对应的租户资源显示的。目前Clickhouse支持了多租户,但是对于Clickhouse内部的资源隔离其实是不具备的,在这一点上,我们是通过完整的监控告警链路来跟进,减少资源冲突带来的不稳定性,支持租户资源的快速释放,从而快速解决某些应急场景。

failover策略

数据的摄入和读取需要高可用机制来满足需求,比如写入端某个consumer节点异常,或者某个clickhouse节点异常等情况,我们如何保证集群的稳定性。

当consumer节点或者clickhouse节点遇到异常时,ch-manager节点能够感知到节点异常进行流量调度,使异常节点不影响数据正常摄入和查询,同时调整流量写入策略,保证consumer节点写入的稳定性,避免发生级联雪崩状况。

image-1701397315042

效果

· 写入效率:Bonree ONE最新版本的写入效率较春季版本提高3-5倍,且稳定性更强,能够从容应对超预期的流量写入。

· 读取效率:目前Bonree ONE公有云生产环境Clickhouse集群的读取效率,TP99在S级以内。

· 稳定性:Clickhouse集群支持任意单节点服务掉线,而不影响集群整体的写入和查询,consumer任意单节点掉线,也不影响集群整体写入。

最后

在Bonree ONE应用场景愈发复杂的情况下,系统对数据存储的要求会越来越高,我们会在资源管理、实时性等方向上继续深入研究,让Bonree ONE在轻盈、有序、精准的方向上走得更远更稳,同时我们也会积极分享我们的改进方案,跟大家一起学习探讨。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聊点技术|数据爆炸性增长,Bonree ONE存储如何做到稳如泰山 的相关文章

随机推荐

  • 淘宝天猫商品评论采集,用rpa机器人轻松解决!

    电商行业是目前发展非常迅速的行业 淘宝天猫作为国内最大的电商平台之一 商品评论对于商家来说非常重要 商品评论可以反映出产品的好坏和用户的购买体验 是用户决策的重要参考因素 商品评论的采集对于商家来说非常重要 然而 手动采集大量评论数据耗时耗
  • 钛氧物种与钴相互作用-科学指南针

    中科院与上海交通大学合作 在碳化物作为载体的钴基费托合成研究中取得新进展 借助透射电子显微镜等技术 揭示了还原过程中碳化钛表面的钛氧物种到金属钴表面的原位迁移现象 这种增强的金属 载体的相互作用促进了费托合成反应活性 通过透射电子显微镜可以
  • 人工智能与大数据专业毕设选题汇总 最新版

    目录 前言 毕设选题 选题迷茫 选题的重要性 更多选题指导 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生
  • cuda 在 torch神经网络中哪些地方可以用?

    简言之 3部分 1 数据data可以放在GPU上 2 网络net可以放在GPU上 3 损失函数loss可以放在GPU上 CUDA可以用于在torch神经网络中进行GPU加速计算 包括模型的训练和推理过程 具体来说 可以使用CUDA加速以下操
  • 一个简单的参数帮助框架,c实现

    文章目录 具体实现如下 include
  • RUM增强APP端快照配置全量会话回放与自定义协议网络请求采集功能

    一直以来 博睿数据秉承着 让每一款软件运行更完美 的产品理念 注重用户体验和反馈 以持续的技术创新 为广大用户提供轻盈 有序 精准的IT运维一体化智能可观测平台 降低运维成本 近期 博睿数据根据一体化智能可观测平台 Bonree ONE 产
  • 牛掰!《鸿蒙零基础入门学习指南》重磅来袭

    前言 不久前 华为开发者大会2023 宣布不再兼容安卓 同时宣布了 鸿飞计划 余承东承诺再投入超百亿元 以扶持和打造鸿蒙生态 鸿蒙不再兼容安卓 欲与iOS 安卓在市场三分天下 这对中国国产操作系统而言 具有划时代的意义 近期 美团 网易 微
  • Windows下环境配置Cmake、MinGW、OpenCV

    一 安装Cmake 1 选择自己需要下载的版本 下载地址 gt https github com Kitware CMake releases download v3 26 5 cmake 3 26 5 windows x86 64 msi
  • 前阿里P6花七天时间整理地方软件测试基础知识,高手请绕道

    可以说软件测试所学习的知识都是在循序渐进的 从更基础的知识逐渐延伸到困难的知识 由此可以看出 基础知识是这些重难点知识延伸的基础 想要升职加薪 基础知识必须牢靠 一 软件测试概述 1 软件缺陷 软件缺陷 又称之为 Bug 即计算机软件或程序
  • 制造业如何做生产设备管理、分析生产数据?

    本文将为大家讲解 1 设备管理的现状与问题 2 设备管理系统功能 3 制造业企业如何做生产设备管理 分析生产数据 4 制造业设备管理的价值 想要管理好设备 设备档案管理 巡检 报修 保养 分析预警等问题都是必须要考虑的 我们公司正是使用了设
  • 介绍kfold.split()的详细用法

    KFold 是交叉验证中的一种方法 其可以将数据集划分为 K 份 然后使用其中一份作为验证集 剩下的 K 1 份作为训练集 这个过程可以重复 K 次 以便每个子集都被用作验证集 KFold split 是 KFold 类中的一个方法 用于将
  • 黑马一站制造数仓实战1

    1 项目目标 一站制造 企业中项目开发的落地 代码开发 代码开发 SQL DSL SQL SparkCore SparkSQL 数仓的一些实际应用 分层体系 建模实现 2 内容目标 项目业务介绍 背景 需求 项目技术架构 选型 架构 项目环
  • 科技改变生活智能化让生活更便捷

    在科技迅猛发展的时代 我们正处于信息化和智能化的浪潮中 如何善用科技 让生活更加便捷 成为了当代人们共同关心的问题 本文将围绕这一主题 深入探讨科技如何改变我们的日常生活 让生活更智能 更方便 1 科技便捷生活 智能引领未来 这个强调了科技
  • Docker容器安装部署

    阿里云网站 mirrors aliyun com 一 安装步骤 yum源的配置 最好用环境干净的虚拟机进行安装部署 1 在 etc yum repos d中配置 docker repo 并直接配置centos源以免出现依赖性问题 2 直接列
  • electron 应用图标修改

    修改窗口图标 更换Electron应用程序的桌面图标 准备好你想要作为图标的图片文件 可以是PNG格式 安装一个可以转换图片格式为ICO的工具 例如在线转换工具 在线转换icon图标工具 将你的PNG图片文件上传并转换为ICO格式 将转换得
  • LANG、LC_CTYPE、LC_ALL环境变量

    修改编码格式 export LANG zh CN UTF 8 修改所有的编码格式 优先级高 export LC ALL zh CN UTF 8 locale是根据计算机用户所使用的语言 所在国家或者地区 以及当地的文化传统所定义的一个软件运
  • 零束科技:博睿数据是智能化路上的可靠“守护者”

    近年来 汽车市场环境的复杂性上升 全球各类不稳定因素增加 造车新势力挑战不断 车企借助云 容器化 微服务等技术加速自身数字化变革 已经成为面向未来发展的主要趋势 但随着数字化程度不断深入 自有系统的稳定性 性能 瓶颈以及由故障所带来的各类影
  • 两步解决opencsv 设置@CsvBindByPosition(position = 0)导致@CsvBindByName(column = “批次号“) 标题头不写入的问题

    获取实体类中的所有column private static
  • 详细介绍torch中的from torch.utils.data.sampler相关知识

    PyTorch中的 torch utils data sampler 模块提供了一些用于数据采样的类和函数 这些类和函数可以用于控制如何从数据集中选择样本 下面是一些常用的 Sampler 类和函数的介绍 Sampler 基类 Sample
  • 聊点技术|数据爆炸性增长,Bonree ONE存储如何做到稳如泰山

    背景 新一代的Bonree ONE主要体现在轻盈 有序 精准三个亮点 而这三个方向都离不开一个稳定 可靠 高效的数据存储底座 目前 Bonree ONE基于Clickhouse进行存储 容纳了包括APM RUM LOG 会话 用户行为分析等