随着字节跳动业务的快速发展,数据中心服务器规模增长迅速,以满足日益增长的算力需求。当规模到一定程度时,就需要平衡好机器成本与效率、资源之间的关系,有针对性地优化数据中心性能,以降低计算成本。
参考行业内的实践,从 2019 年起,STE 团队开始建设算力监控系统,希望从数据中心整体视角,建立起完整的数据中心资源使用分析体系,从而最大化地支持软硬件协同设计与优化。经过四年的迭代,当前已拥有成熟的产品形态和稳定的用户群体,为各业务性能分析优化工作提供了有力支撑。
本文将与大家分享字节算力监控系统方案的整体设计、工程实践落地经验,帮助大家理解如何对数据中心进行科学、准确地性能分析和画像,快速进行算力性能优化。
在设计之初,需要了解算力主要消耗在哪些系统组件、基础库、具体的函数与指令,因此我们需要构建一套数据中心资源使用分析体系,帮助我们了解各个运行在数据中心的不同业务,并对业务的工作负载进行了解和剖析。在构建资源使用分析体系时,需要重点关注四个功能关键点:
整个体系的构建,包含主要包含数据采集、数据处理、数据分析三个环节,各个环节需要注意的是:
数据采集环节:
数据处理环节:
数据分析环节: 通过对系统的数据分析,我们希望回答以下问题:
当我们的目标是建设一套支持百万级数据中心规模的监控系统时,低成本低开销是我们需要重点解决的问题。
常见的监控、探针埋点、能力探测工具多是针对单机进行的设计,并不适合数据中心常态化采集和全量部署。字节业务类型复杂、服务器数量庞大。微小的设计缺陷都有可能造成 SRE 在线解决问题的巨大压力,甚至可能引发重大事故。业务侧期望常态化工具对业务无入侵,而业界这方面公开的资料较少。STE团队基于开源组件进行了一系列自研优化,实现了安全的轻量级埋点体系实践。项目预期中的埋点采集,经过了严格的论证、设计review、代码review、上线业务指标对比,最终确认对业务零干扰。埋点设计是建立在对硬件特性的掌握、内核及基础库的工作机制和原理的理解、业务对硬件使用模式的分析基础上整体考虑得出的。
我们采用常态化采样的方式来采集,也就是采样每个时刻占用 CPU 的进程。
性能评估:
通过轻量级埋点及监控,我们获得了数据中心全量主机的实时数据,这部分数据储存在 Kafka 消息队列中,并被大数据处理部分实时消费。
我们的数据处理部分基于 Flink 大数据处理引擎实现,支持海量高吞吐的数据清洗和关联。
我们将配合分析使用的其他数据放在分布式缓存 Redis 中,通过 Flink 实时进行关联。对数据进行流式分析或者阶段性定时分析,抽取清洗出价值含量较高的中间数据产物。
最后,我们将数据实时/准实时地导入数据仓储,基于人为运维经验的知识仓库总结中的模型,对中间产物进行多维度纵向横向分析,并给出优化建议。从硬件到上层业务,多层次多维度地进行分析和优化。并指导业务基于优化建议持续迭代,达到软硬件协同的最佳实践。
自下而上,我们从两个层级、三个维度进行数据的收集和分析。这三个维度的定位目标不同:
通过算力监控系统,我们可以获得业务最新的数据和指标,从而进行针对性的优化。上图左上角显示了某几个业务在性能优化前后的指标对比情况。在某区域数据中心zlib的基础库的优化中,整体节省了至少 ****5万的 绝对 CPU 物理核(10万 vCPU 超线程)。目前,STE团队还在持续优化更多的基础库,帮助业务团队提高算力,节省物理成本。
另外,通过算力监控系统,我们还试图发现更多的数据中心使用特征。字节内部也实现类似公开文献中“数据中心税”的刻画。通过大盘数据,我们可以发现集群中的业务特征,从而指导我们更好地优化基础组件,指导软硬件协同设计。
在算力监控系统中,我们构建了轻量级埋点及监控体系,并构建了实时的数据链路,经过流式分析或者阶段性定时分析,并最终得出热点函数的全局统计,帮助业务和基础技术的同学持续进行分析和优化。
针对业务,找到业务的性能瓶颈并优化;针对数据中心,从基础库及编译链的视角进行优化。另外我们可以对 PMU(Performance Monitoring Unit 微架构的性能监控单元)数据特征的精细化分析,对硬件选型进行更多指导。
字节跳动算力监控系统帮助业务部门成功落地性能优化近百万 vCPU 核心,也精确的量化了 STE团队编译与基础库方向在数据中心范围内基础库优化侧的收益。我们将基于优化建议持续迭代,达到软硬件协同的最佳实践,帮助更多业务和数据中心进行优化和升级,最终完成构建软硬件一体化的建设和优化体系。
金三银四的季节,字节跳动STE团队诚邀您的加入!团队长期招聘,北京、上海、深圳、杭州、US、UK 均设岗位,以下为近期的招聘职位信息,有意向者可直接扫描海报二维码投递简历,期待与你早日相遇,在字节共赴星辰大海!若有问题可咨询小助手微信:sys_tech,岗位多多,快来砸简历吧!
|