得物技术 2024年12月04日
得物新一代可观测性架构:海量数据下的存算分离设计与实践
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

得物可观测性平台面临着海量数据处理的挑战,传统的存算一体架构已无法满足需求。为了解决扩展性、资源利用率和运维复杂性等问题,该平台采用了存算分离架构,结合AutoMQ和ClickHouse等技术,实现了高效的资源管理和性能优化。文章详细介绍了AutoMQ如何替换Kafka,解决存储成本高、冷读效率低等问题,以及ClickHouse企业版如何通过存算分离架构提升性能、降低成本和简化运维。最终,得物可观测性平台实现了高性能、高效率的分布式链路追踪系统,并成功应对链路追踪数据管理的挑战,显著降低了成本和提升了系统稳定性。

🤔**AutoMQ替换Kafka,解决存储成本和冷读效率问题:**AutoMQ采用存算分离架构,基于对象存储和EBS存储研发了共享流存储库S3Stream,替换了Kafka的存储层,有效降低了存储成本,并通过优化查询操作提升了冷读效率,避免了冷读对写入性能的影响。

📊**ClickHouse企业版引入存算分离架构,提升性能和降低成本:**ClickHouse企业版通过将计算和存储资源分离,支持独立扩展,并利用SharedMergeTree表引擎优化了对共享存储的支持,简化了集群管理,实现了分钟级水平扩展,降低了存储和计算成本,同时保障了业务稳定性。

📈**得物可观测性平台通过ClickHouse企业版优化写入、查询、容灾和弹性能力:**得物平台利用ClickHouse企业版的Serverless架构,实现了高性能写入,并通过并行查询和索引优化提升了查询效率。同时,通过单节点故障容忍和高可用存储提升了容灾能力,并利用秒级弹性扩容和按需付费降低了资源成本。

🚀**存算分离架构显著提升系统性能和降低成本:**得物可观测性平台通过采用存算分离架构,显著提升了系统性能,降低了计算资源使用成本约20%和存储资源采购成本70%+,成功应对链路追踪数据管理的挑战。

原创 南风 2024-12-04 18:30 上海

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

目录

一、引言

二、Kafka的演进:AutoMQ存算分离的创新与实现

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

    2. 为什么选择AutoMQ

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

三、ClickHouse的进化:存算分离架构的实践与应用

    1. 背景

    2. ClickHouse企业版介绍

    3. 落地实践与优化

四、总结

五、引用


引言

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


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



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


Kafka的演进:

AutoMQ存算分离的创新与实现

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

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


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



得物 Kafka 磁盘高危报警



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


为什么选择AutoMQ

AutoMQ云原生架构


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



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

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


Apache Kafka的读写 IO链路


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



在相同负载和机型下相比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也为得物可观测性平台带来了以下显著的成效:



AutoMQ落地效果:

平稳支撑得物双十一期间100%流量

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

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


ClickHouse的进化:

存算分离架构的实践与应用

背景

得物可观测性平台在分布式链路追踪中,采用ClickHouse作为Trace索引数据的存储引擎,每天管理着数十万亿行追踪数据。随着数据量的持续增长,平台不仅需要保障实时查询的高效性能,还面临着存储成本优化和集群维护复杂度提升的双重挑战。


面临的挑战

ClickHouse凭借卓越的性能,在面对大规模数据时依然能够提供极快的查询响应,为可观测性平台的实时分析和监控提供了坚实保障。然而,随着业务扩展和数据量激增,原有的基于云盘自建的开源分布式架构逐渐暴露出了一些问题:



因此,如何在保持ClickHouse性能优势的同时,优化扩容过程中的运维流程,解决集群写入负载平衡问题,进一步提升系统的稳定性,是得物平台在持续扩展中亟需解决的核心问题。


ClickHouse企业版介绍

ClickHouse企业版是专为云环境下的存算分离架构设计,支持更高效的计算与存储资源管理。企业版与社区版的最大区别在于,它引入了更先进的存算分离架构和更多功能,能够在大规模数据处理、实时查询和存储管理方面提供更优的性能。


存算分离架构是ClickHouse企业版的核心创新,它通过将计算资源和存储资源分开,极大地提高了系统的弹性和扩展性。在这种架构下,计算节点和存储节点独立扩展,存储资源可以通过共享存储(如OSS、S3等)进行集中管理,而计算节点则能够根据负载情况进行自动伸缩,从而更好地应对流量高峰期的挑战。


企业版还引入了Serverless计算模型,允许平台根据实际负载自动调整计算资源的大小。相比于传统的基于固定资源分配的计算模式,Serverless架构能帮助平台实现弹性伸缩,只在需要时自动分配计算资源,极大地节省了资源开销,同时也能更好的应对业务流量的非预期增长,提高了系统的稳定性。


SharedMergeTree表引擎

在ClickHouse企业版中,SharedMergeTree表引擎是实现存算分离架构的关键组件。SharedMergeTree优化了对共享存储(如Amazon S3、Google Cloud Storage、MinIO、阿里云OSS等)的支持,100%兼容社区版的MergeTree引擎的同时,内核还可以自动将社区版的建表语句转化为企业版专属引擎的建表语句(如下图所示),业务迁移无需DDL改造。


与传统的ClickHouse集群架构相比,SharedMergeTree引擎通过以下方式提升了数据存储和查询性能:



水平扩展

在大规模电商平台的场景下,面对节假日等流量高峰时,系统需要具备快速扩展高可用性的能力。ClickHouse企业版通过SharedMergeTree引擎,实现了分钟级水平扩展,并且在扩展过程中集群可正常执行读写任务,稳定性不受影响。


扩容流程:


    新节点(Server-3)加入:当需要增加计算节点时,新节点首先注册至集群的元数据管理服务(如Keeper),并开始监听数据元数据变化。

    元数据同步:新节点从Keeper同步当前有效的元数据,无需锁定集群,不会影响集群其他节点的操作。

    立即参与工作:新节点完成元数据同步后,立即可以处理查询请求,并按需访问共享存储中的数据。


通过这种方式,ClickHouse企业版能够在高负载下实现弹性扩展,确保集群的稳定性和业务的连续性。


落地实践与优化

最终,得物可观测性平台基于ClickHouse企业版的功能,在写入、查询、容灾能力及弹性能力方面进行了全面优化,实现了高性能和高效率的分布式链路追踪系统。


从自建ClickHouse社区版升级为企业版,因为企业版的存算分离架构不再有分片的概念,不再需要通过直连本地表进行写入的方式对不同分片间的数据和写入流量进行均衡,所以和原先直连节点做写入的方式不同,切换为企业版后业务写入操作的对象变为了集群本身,写入逻辑得到了简化,原有的写入流量和分片间数据不均衡带来的运维和管理的问题也从架构上得到了解决。


写入优化

以下是具体的实践总结:



查询优化

select trace_id,span_id, duration  from span_index  where service = 'order-xxx'  and startTime between '2024-11-23 16:00:00' and '2024-11-23 17:00:00'  order by duration desc  limit 0,30  settings max_threads = 16,   allow_experimental_parallel_reading_from_replicas = 1;


容灾能力


弹性能力


总结

通过ClickHouse企业版,得物可观测性平台实现了从写入到查询、从容灾到弹性的全面优化。企业版的存算分离架构提升了系统可靠性,而秒级弹性能力结合秒级按需付费显著降低了计算资源的使用成本约20%和存储资源的采购成本70%+(总成本下降60%)。这种实践模式不仅满足了高并发、高性能的业务需求,同时也为系统的扩展性和运维效率提供了有力支持,成功应对了链路追踪数据管理中的各种挑战。



引用

[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

[10]阿里云云数据库ClickHouse:https://help.aliyun.com/zh/clickhouse/?spm=a2c4g.11174283.0.0.61f5735a0zfJIS



敬请期待本系列的下一篇文章《得物可观测性平台基于RUST如何在生产环境构建万亿流量》。在这篇文章中,我们将深入探讨如何利用RUST技术在生产环境中高效处理万亿级别的流量,以及我们在这一过程中积累的经验和教训。



往期回顾


1.StarRocks存算分离在得物的降本增效实践

2.盘点这些年搭建器在用户体验优化的实践|得物技术

3.解析Go切片:为何按值传递时会发生改变?|得物技术

4.Java性能测试利器:JMH入门与实践|得物技术

5.彩虹桥架构演进之路-负载均衡篇|得物技术


文 /  南风


关注得物技术,每周一、三更新技术干货

要是觉得文章对你有帮助的话,欢迎评论转发点赞~

未经得物技术许可严禁转载,否则依法追究法律责任。

扫码添加小助手微信

如有任何疑问,或想要了解更多技术资讯,请添加小助手微信:

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

可观测性 存算分离 AutoMQ ClickHouse 链路追踪
相关文章