得物使用AutoMQ构建海量数据处理的新一代可观测性架构

引言

得物作为全球领先的潮流网购社区,日益增长的用户和数据带来了巨大的技术挑战。当前,得物的可观测性平台每天生成数PB级Trace数据和数万亿条Span记录,要求平台具备高效的实时处理能力和低成本的数据存储解决方案。

传统的存算一体架构将计算与存储资源绑定,随着数据规模的扩大,暴露出了以下问题:

  • 扩展性受限:存算资源无法独立扩展,导致计算和存储的扩容必须同步,进而提升了成本。

  • 资源利用率低:计算与存储资源无法按需动态调整,造成闲置资源浪费。

  • 运维复杂性高:集群扩展和缩容涉及复杂的资源迁移,增加了运维难度。

为了有效解决这些问题,得物可观测性平台采用了存算分离架构,结合AutoMQ和Kafka以及ClickHouse存储技术,实现了高效的资源管理和性能优化。

Apache Kafka在大规模数据下的挑战

Apache Kafka处于得物观测业务的核心数据链路中

在得物的可观测性平台中,Apache Kafka被广泛用于数据收集、加工和分发。然而,随着业务数据量的不断增长,Kafka的架构暴露出以下问题:

  • 存储成本高:Kafka的存储部分占据了大部分(计算与存储成本比例为1:3)云资源开销,为了控制成本,得物调整了Kafka的数据TTL和副本配置,但存储成本仍居高不下。

  • 冷读效率低:冷读场景下,磁盘吞吐量常达到上限,导致性能瓶颈。

得物 Kafka 磁盘高危报警

  • 运维复杂性高:随着集群规模的扩大,Kafka集群的扩缩容操作变得更加复杂,面临较高的运维风险。

这些问题源于Kafka原生架构的局限性,特别是其面向IDC环境的Shared-Nothing架构,难以充分发挥云计算时代对弹性和扩展性的要求。

为什么选择AutoMQ

AutoMQ云原生架构

为了解决Kafka在大规模数据处理中的问题,得物可观测性平台选择了AutoMQ作为替代方案。AutoMQ的优势包括:

  • 100%兼容Kafka协议:AutoMQ完全兼容Kafka客户端和生态工具,迁移过程顺畅,避免了大规模改造。

  • 存算分离架构:存储与计算解耦,AutoMQ基于对象存储和EBS存储研发了共享流存储库S3Stream[1],并通过S3Stream替换了Apache Kafka的整个存储层,大幅降低存储成本,同时支持存储与计算的独立扩展。

  • 弹性扩缩容能力:支持动态资源调整,无需数据迁移或停机,提升资源利用率。

  • 未来扩展性:支持大规模数据量增长,能够与现代存储和计算工具无缝集成,满足长期需求。

AutoMQ面向冷读场景的性能优化

在冷读场景下,Apache Kafka的性能问题十分明显。KAFKA-7504[2]问题导致冷读操作影响实时写入,严重时会降低整个集群的吞吐量。AutoMQ通过以下方式优化了这一问题:

  • 对象存储与计算分离:存储与计算的彻底分离避免了冷读对写入性能的影响。

  • 高效查询性能:AutoMQ对查询操作进行了优化,即使在高并发场景下,冷读性能保持稳定。

Apache Kafka的读写 IO链路

Apache Kafka的读写链路引入了两个关键的技术:Page Cache[3]和零拷贝SendFile[4]系统调用。

  • Page Cache极大地简化了Kafka内存管理的负担,完全由内核来负责。但存在冷热无法分离的问题,如果有业务持续在冷读,会跟热数据互相争抢内存资源,导致追尾读能力持续下降。

  • SendFile是Kafka零拷贝的关键技术,但该调用行为发生在Kafka的网络线程池,如果执行SendFile时需要从磁盘上拷贝数据(冷读场景),会在一定程度上阻塞该线程池。又因为该线程池是处理Kafka请求的入口,包括写请求,SendFile的阻塞行为将导致Kafka的写入受到巨大的影响。

在相同负载和机型下相比Kafka,AutoMQ冷读时可以保证不影响写入吞吐和延迟的情况下,拥有和Kafka相同水准的冷读性能[5]。

在冷读场景下,AutoMQ显著提升了性能,与Kafka相比,冷读效率提升了约5倍,且对实时写入没有任何影响。

AutoMQ基于共享存储架构的快速弹性能力

得物可观测性平台的业务流量呈现明显的峰谷波动,AutoMQ通过存算分离架构实现了卓越的弹性扩缩容能力:

  • 快速扩容:在业务高峰期,能够迅速扩展存储或计算资源,保障系统性能。

  • 智能缩容:高峰过后,快速回收闲置资源,避免浪费并降低运维负担。

AutoMQ的扩缩容依赖秒级分区迁移技术[6]。在扩容时,借助弹性伸缩组(ASG)[7]或Kubernetes HPA,分区可以批量迁移到新节点,确保流量快速平衡,通常在十秒内完成。缩容时,待下线节点的分区会迅速迁移至其他节点,完成秒级下线。与Apache Kafka需要通过复制数据进行扩缩容不同,AutoMQ利用共享存储架构避免了数据复制,显著提高了扩缩容效率,避免了数据重平衡[9],跟Apache Kafka的实现有巨大的区别。

AutoMQ自动流量重平衡 vs. Apache Kafka手动迁移

案例

AutoMQ通过监控集群流量和CPU等指标,自动进行扩缩容。当流量达到扩容阈值时,系统会自动增加Broker节点;当流量下降至缩容阈值时,系统会优雅地将即将下线的Broker上的分区以Round-Robin方式秒级迁移至其他Broker,完成流量平衡。

集群节点数跟随流量上涨

集群节点数跟随流量下跌

AutoMQ落地效果:千核资源替换,成本下降50%

AutoMQ在得物可观测性平台上线半年以来,逐步替换了整个可观测性架构对Apache Kafka的依赖,基于AutoMQ的整体可观测架构如下图所示,AutoMQ集群承担了所有微服务业务的产生的观测数据,并基于ClickHouse进一步提供点查和观测数据分析的能力。

得物基于AutoMQ的可观测架构

AutoMQ也为得物可观测性平台带来了以下显著的成效:

  • 云账单成本同比下降50%以上,同时运维效率大幅度提升。

  • 完成近千核计算资源替换,总体吞吐高达数十GiB/s

AutoMQ落地效果:平稳支撑得物双十一期间100%流量

除了成本大幅度降低之外,今年通过AutoMQ的架构支撑得物双十一,避免了过往双十一前繁重的容量评估工作,以及提前扩容的运维成本。AutoMQ集群上线以来,以及双十一期间全程保持高可用,零宕机,支撑了双十一期间100%的流量,且高峰期负载平稳,无性能抖动。如下图是得物可观测性平台AutoMQ集群中其中一个GiB级吞吐的集群。

得物其中的一个AutoMQ GiB级集群

总结

得物通过引入AutoMQ,成功解决了Apache Kafka在大规模数据处理中的诸多挑战。在实际应用中,AutoMQ在得物可观测性平台表现出了显著的优势,不仅降低了系统的存储和计算成本,而且大幅度提升了资源利用率和运维效率。得物可观测性平台借助AutoMQ的存算分离架构,克服了Kafka在扩展性、存储成本和运维复杂性上的局限性,实现了动态资源调整和高效的冷读优化。在双十一高峰期,AutoMQ的卓越性能和弹性扩缩容能力保证了系统的高可用性和稳定性,无需额外进行繁重的容量评估和提前扩容操作。这一技术实践为得物带来了显著的成本节约和性能提升,成为其面对未来数据爆发增长的坚实基础。同时也为其他企业在高效资源管理和性能优化方面提供了宝贵的经验与解决方案。

引用

[1]AutoMQ基于S3的共享流存储库:https://docs.automq.com/zh/automq/architecture/s3stream-shared-streaming-storage/overview

[2]Kafka冷读性能问题来源:https://issues.apache.org/jira/browse/KAFKA-7504

[3]Linux Page Cache: https://en.wikipedia.org/wiki/Page\_cache

[4]Linux SendFile: https://man7.org/linux/man-pages/man2/sendfile.2.html

[5]AutoMQ性能白皮书:https://docs.automq.com/zh/automq/benchmarks/benchmark-automq-vs-apache-kafka

[6]AutoMQ秒级分区迁移:https://docs.automq.com/zh/automq/architecture/technical-advantage/partition-reassignment-in-seconds

[7]AWS Auto Scaling Groups: https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html

[8]Kubernetes用于扩容的 HPA 组件:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

[9]AutoMQ持续数据自平衡:https://docs.automq.com/zh/automq/architecture/technical-advantage/continuous-self-balancing

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视图、转发与重定向、静态资源处理

目录 视图 默认视图 视图机制原理 自定义视图 请求转发与重定向 静态资源处理 视图 每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性 可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高 默认是最低优先级,Integer.MAX_…

Redis 生产问题(重要)

缓存穿透 什么是缓存穿透? 缓存穿透说简单点就是大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中 。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力&#xf…

【Redis】壹 —— Redis 介绍

文章目录: 前言 一、认识Redis 1. Redis 用途 作为数据库 作为流引擎 二、服务端高并发分布式结构演变 1. 单机架构 2. 应用数据分离架构 3. 应用服务集群架构 4. 读写分离 / 主从分离架构 5. 冷热分离 —— 引入缓存 6. 分库分表 7. 微服务架构 8. …

auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式

目录 1、auto-gptq是什么?2、auto-gptq安装3、auto-gptq不正确安装可能会出现的问题(1)爆出:CUDA extension not installed.(2)没有报错但是推理速度超级慢 1、auto-gptq是什么? Auto-GPTQ 是一…

AI 的时代,新科技和新技术如何推动跨学科的整合?

在当前AI的发展中,我们面临的一个主要挑战就是融合的问题,这实际上不仅是技术上的融合,还有更深层次的哲学层面的思考。 或许在中国这方面的讨论较少,但在西方哲学和神学的语境中,探讨万物的根本和不同学科之间的联系…

【h5py】 提取mat文件中的HDF5格式的数据

h5py 提取mat文件中的HDF5格式的数据 使用纯Python查看数据配合Matlab后,使用Python查看数据 一、使用纯Python查看文件数据内容 原理:当HDF5存储的是struct类型数据,解析时要像一棵树,我们需要逐层次的去解析,直到…

【指南】03 CSC联系外导

确定外导 课题组有合作关系的国外导师与自己研究方向密切相关的国外导师国外高校官网、谷歌学术、Research Gate等平台检索不可以是中国港澳台的高校科研院所或机构注意外导所在高校排名和科研水平可列表记录注意外国签证政策 发送邮件 自我介绍简要介绍CSC介绍自己的研究对…

DOM与BOM试题

基础回顾题(48分,1分1道题) querySelector 基础 写出一段代码&#xff0c;使用querySelector选择页面上第一个<button>元素&#xff0c;并打印该元素到控制台。 querySelectorAll 基础 使用querySelectorAll选择所有类名为item的元素&#xff0c;并打印这些元素组成的N…

20.LMAX——DDD的极致性能架构

学习视频来源&#xff1a;DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 历史起源架构目标架构要素 时序对比传统时序事件溯源时序LMAX时序 单线程非阻塞异步IO&#xff08;reactor&#xff09;多线程单…

MFC集成WebBrowser控件的实例教程

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文提供了如何在MFC应用程序中集成WebBrowser控件的详细步骤&#xff0c;该控件利用ActiveX技术实现内嵌IE浏览器引擎功能。读者将学习如何创建对话框、处理控件事件&#xff0c;并添加导航功能以实现网页浏览。…

解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

文章目录 解决&#xff1a;IDEA中Autowired自动注入MyBatis Mapper报红警告的几种解决方法问题描述&#xff1a;解决办法&#xff1a;1.将Autowired注解改成Resource2.给Autowired(required false)设置属性3.给Mapper层加注解Mapper/Repository4.改变写法,用RequiredArgsConst…

python 调Qt C++ 写法配置和坑点

python 示例写法 和调c动态库一样 通过回调函数方式 将python函数注册到c 动态库中 from ctypes import *def DllCall(nParam, nFlag):print(nParam, nFlag)z2 0.6z3 0.4z4 0.0z5 0.3z6 0.5z7 0.8z8 0.3z9 0.9strData str(z2) str(z3) str(z4) str(z5)…

在Docker中运行MySQL的思考:挑战与解决方案

引言 在云计算和容器化技术日益普及的今天&#xff0c;Docker作为一种轻量级的容器化平台&#xff0c;已经成为开发和部署应用的首选工具之一。其提供的便携性、可扩展性和环境一致性对于无状态微服务来说无疑是巨大的福音。然而&#xff0c;并非所有应用都适合在Docker容器中…

Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…

Navicat for MySQL 查主键、表字段类型、索引

针对Navicat 版本11 &#xff0c;不同版本查询方式可能不同 1、主键查询 &#xff08;重点找DDL&#xff01;&#xff01;&#xff01;&#xff09; 方法&#xff08;1&#xff09; &#xff1a;右键 - 对象信息 - 选择要查的表 - DDL - PRIMARY KEY 方法&#xff08;2&…

软考系分:今日成绩已出

前言 今年报考了11月份的软考高级&#xff1a;系统分析师。 考试时间&#xff1a;11月9日。 总体感觉偏简单&#xff0c;但是知识点记得不牢&#xff0c;估计机会不大。 今日 12.11 &#xff0c;成绩已出&#xff0c;每科总分 75分&#xff0c;全部45分以上为通过。 成绩总…

angular图表echarts设置

angular框架ngx-echarts图表的配置 图表高度设置 默认高度是400px 可以自己动态设置容器高度 <div echarts nz-row nzJustify"start" [options]"option" [style.height]"option.echartHeight"></div>option.echartHeight‘600px’…

springboot402航班进出港管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统航班进出港管理系统信息管理难度大&#xff0c;容错率低…

umi实现动态获取菜单权限

文章目录 前景登录组件编写登录逻辑菜单的时机动态路由页面刷新手动修改地址 前景 不同用户拥有不同的菜单权限&#xff0c;现在我们实现登录动态获取权限菜单。 登录组件编写 //当我们需要使用dva的dispatch函数时&#xff0c;除了通过connect函数包裹组件还可以使用这种方…

【计算机网络层】数据链路层 :局域网和交换机

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;局域网 &#x1f6a6;局域网…