vivo数据中心网络链路质量监测的探索实践

news2024/11/19 14:37:34

作者:vivo 互联网服务器团队- Wang Shimin

网络质量监测中心是一个用于数据中心网络延迟测量和分析的大型系统。通过部署在服务器上的Agent发起5次ICMP Ping以获取端到端之间的网络延迟和丢包率并推送到存储与分析模块进行聚合和分析与存储。控制器负责分发PingList并通过数据中心内部消息通道将PingList下发至每台服务器上的Agent,而PingList就是每个Agent需要发起Ping的目标服务器列表。

一、概述

数据中心的建设是一个从无到有从小到大的过程,在数据中心建设初期,由于量级很小,我们想要了解网络状况是比较轻松的,在两台服务器上获取其网络延迟简直轻而易举,输入Ping命令和IP地址便可以随时获取网络延迟。然而,当业务滚雪球式的增长,数据中心随之扩容或新建,服务器数量达千级、万级、十万级甚至更多时,想要随时获取机房各链路的网络延迟以定位网络故障原因就变得十分具有挑战性。我们开始思考如何建立一个用于大规模数据中心网络延迟测量和分析的系统,以便于更高效、快捷的维护数据中心。

二、背景

经典的数据中心网络架构有三层,分为核心层(网络的高速交换主干)、汇聚层(提供基于策略的连接)、接入层 (将工作站接入网络),在庞大的数据中心网络中,难免在某些时刻某些业务出现问题。那么如何确定问题是否是网络问题?如何定位一个网络故障?如何提前预测网络故障,确保数据中心基础网络的可用性(SLA)不受影响?由于分布式系统庞大、可扩展、依赖多的性质,许多故障显示为“网络”问题,例如,某些组件故障,端到端对接时由于某一端CPU负载突然增加导致响应延迟,或者网络拥塞导致的排队延迟,又或者数据包丢失也会增加用户感知的网络延迟。其中一部分问题其实并不是所谓的“网络”问题,然而要判断这些问题是否是由网络故障引起的,或者定位网络故障的原因,是一个费时费力的过程。 为了应对这些挑战和简化网络运维繁复的工作,我们的网络质量监测中心就应运而生。

三、什么是网络质量监测中心

网络质量监测中心是一个用于数据中心网络延迟测量和分析的大型系统。通过部署在服务器上的Agent发起5次ICMP Ping以获取端到端之间的网络延迟和丢包率并推送到存储与分析模块进行聚合和分析与存储。控制器负责分发PingList(需要相互执行Ping的IP列表)并通过数据中心内部消息通道将PingList下发至每台服务器上的Agent,而PingList就是每个Agent需要发起Ping的目标服务器列表。

3.1 Agent

Agent是整个项目的数据采集器,负责接收来自控制器下发的PingList,PingList中有该Agent需要发出Ping目标的IP地址,最后将探测数据上报存储与分析模块。Agent要覆盖所有机房的绝大多数物理机,才能保证探测数据汇总后的有效性和真实性,所以,在Agent对PingList中的目标IP进行Ping操作时,Agent所占用的CPU资源不能超过5%,是Agent设计时要保证的核心要点。Agent由机房内部消息通道统一分发部署、更新、启动和停止。

3.2 控制器

控制器是整个网络质量监测中心的任务调度器,决定了服务器应该如何相互探测,负责PingList生成算法与下发通知,以及网络拓扑的定时更新。

3.3 存储与分析模块

存储与分析模块负责收集Agent上报的ICMP Ping数据并存储,同时负责数据的聚合与分析以及告警输出,根据不同条件对数据进行各种维度的可视化。

四、设计与实现

图片

图1 网络质量监测中心架构

4.1 PingList 生成原则

由于Agent运行在所有的服务器上,而我们关注的维度其实是ToR(Top of Rack),所以服务器维度完整图既不是必要的也不是可行的,因为单台服务器需要探测n-1台服务器(n是参与探测的服务器数量),这样会产生非常庞大且冗余度非常高的探测数据。在数据中心中,服务器可以达到数百上千个。此外,服务器维度完整图不是必需的,因为数十台服务器通过相同的ToR交换机连接到其他ToR至服务器。因此控制器为了避免过量开销,调整了原n²-n的Ping策略。

  • 在ToR内部,随机选取两台服务器互相Ping。

  • 在ToR之间,则每个ToR选取两台服务器Ping其它ToR的服务器,保证每个ToR下至少有一台机器发出或接收Ping。

  • 在数据中心之间,则选择不同的数据中心的几个不同的核心ToR下的服务器来相互发起Ping。

4.2 控制器的构成

控制器由Timer,Watcher,Producer,Consumer和Topology Keeper构成。

  • Timer是个定时器,负责在指定时间对Watcher发出更新网络拓扑的指令或更新PingList的指令;

  • Watcher接收到Timer的更新PingList指令后,立即查找各数据中心的网络拓扑元数据,分数据中心对Producer发出生成新PingList指令;

  • Producer接收到Watcher的网络拓扑数据后,根据网络拓扑中各层级的ToR给予不同的权重,根据此权重以随机抽取的方式选取其下辖的服务器,最终组成PingList并交由Consumer下发;

  • Consumer负责接收Producer生成的PingList并对接数据中心内部消息通道,经由消息通道将PingList下发至服务器上的Agent;

  • Topology Keeper通过SNMP(Simple Network Management Protocol)自主探寻网络拓扑,为网络拓扑展示提供数据源。

图片

图2 网络质量监测中心控制器

五、延迟与丢包数据分析

存储与分析模块将Agent上报的所有Ping数据保存,随后根据10分钟粒度、一小时粒度的时间范围对数据进行汇聚与分析,根据分析结果,对异常链路进行持续跟踪。

图片

图3 数据中心维度延迟与丢包率总览

图3显示了多个数据中心之间的实时网络延迟以及丢包率的总览,数据延迟为4分钟。由于数据中心之间的相互探测是由核心交换机下辖服务器发起的,在某些时刻如果数据中心之间的网络延迟陡增,则可以迅速的定位探测端与被探测端的链路,极大的缩小问题定位的范围。

图片

图4 实时网络延迟矩阵图

图4反应了同机房不同Pod(规划的一个网络区域)间的实时延迟分布信息,我们很快就能发现,其中一组ToR出现延迟问题,那么很有可能双向链路都会反应高延迟情况,同样也可能在丢包率的矩阵中反应出来。图中的每一个点都包含了一组ToR的数据,若以ToR为单位画点阵图,则会导致数据量过于庞大而无法使用。而实际使用中,完整的ToR粒度的矩阵图也不是必须的,所以如何选择汇聚维度成为一个问题。

在我们的设计中,只有服务器会执行Ping操作,即服务器是数据源,ToR则可以看成一个虚拟节点。一个数据中心拥有数个Pod,如果矩阵图以Pod维度聚合那么显然我们得不到想要的效果,一个Pod下辖制若干ToR,我们的矩阵图中每个点都含有最新的延迟与掉包数据,若以ToR为单位,则矩阵图所承载的数据量过于庞大而导致整个矩阵的边长远超页面的边界,影响可视化的预期效果,所以矩阵图既不能以Pod维度聚合,也不能以ToR作为单位,最后我们采取了折中方案,在Pod与ToR之间加了一层组级关系,以这层关系为维度进行矩阵图的绘制,初步达到了项目设计目标。

如此一来,绘制矩阵图便可达到预期效果,当发生网络故障时,查看矩阵图可以辅助快速定位出现问题的服务是否是由网络延迟导致的。

图5是同机房当前延迟top趋势图,时间粒度是2分钟,反应了当前机房中延迟最大的链路在过去的一段时间里的网络延迟情况。

图片

图5 数据中心内当前延迟top10趋势图

六、面临的问题

从项目上线开始,Agent的灰度持续进行,最初制定的目标是灰度覆盖每个机房的所有物理机,但在实际执行过程中,总会遇到各种各样的问题,比如负载均衡集群的流程承载节点所在的服务器由于常年处于满负载状态,Agent执行的Ping延迟总是非常高,探测到的数据并无实际意义。又如大数据和部分隔离区的服务器并不适合Agent的部署与执行。此时已经限制了网络质量监测中心数据的覆盖范围,如何优化选择服务器算法让探测的Ping数据更具有代表性和真实性是目前面临的第一个挑战。

Agent将延迟数据通过标准Web API上报给存储与分析模块,因为Agent持续在线的性质,这种方式首先面临的是持续高并发以及数据消费速度瓶颈,随着数据中心规模持续扩大,瓶颈会愈发明显。

控制器和存储与分析模块工作在应用层,这就意味着若网络质量监测中心的组件依赖出现问题,那么其所有工作都将瘫痪。

网络质量监测中心尽管目前能收集到ICMP Ping数据,但无法准确定位网络故障链路,在数据可视化方面还需要增加可视化方向与维度以充分使用这些数据。

七、后续优化

网络质量监测中心优化的空间还很大,后续将在技术架构以及功能场景方面着重下功夫。

在功能支撑方面,可以丰富探测场景和优化数据源,目前仅支持ICMP Ping场景,后续的优化中,需要强化Agent以支撑UDP,TCP等不同场景。完善Agent主动上报和健康检查机制,及时更新PingList,保证数据源的实时性与可靠性。生成PingList的算法目前以随机抽取为主,缺乏针对性,后续将对服务器和网络设备元数据进行维护以区分高优先级和低优先级ToR,为高优先级和低优先级分类生成PingList。完善监控指标及其阈值配置,差异化设置告警规则,多模式多功能多维度的图表处理等。

在技术架构方面,由于接收数据的分析服务端并发压力很大,为应对未来数据多样性带来的更高的并发量,需要优化服务部署方式,调整Agent上报数据的处理机制,以数据中心为单位建立消息管道接收Agent的上报数据增加稳定性。为了应对数据快速增长,将对当前技术架构进行整体升级,提升服务性能和吞吐量。

网络链路质量监测求索之路漫漫,希望通过不断的打磨与学习完善我们的项目,力求网络质量监测中心在网络故障自主发现、故障预警以及故障定位的征途上不断的成长壮大,最终能够持续提高网络质量。

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

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

相关文章

【大数据】Neo4j 图数据库使用详解

目录 一、图数据库介绍 1.1 什么是图数据库 1.2 为什么需要图数据库 1.3 图数据库应用领域 二、图数据库Neo4j简介 2.1 Neo4j特性 2.2 Neo4j优点 三、Neo4j数据模型 3.1 图论基础 3.2 属性图模型 3.3 Neo4j的构建元素 3.3.1 节点 3.3.2 属性 3.3.3 关系 3.3.4 标…

JS生成器的介绍

1、 什么是生成器 生成器是ES6中新增的一种函数控制、使用的方案,它可以让我们更加灵活的控制函数什么时候继续执行、暂停执行等。 平时我们会编写很多的函数,这些函数终止的条件通常是返回值或者发生了异常。 生成器函数也是一个函数,但是…

阿里云无影云电脑是干什么用的?五大使用场景

阿里云无影云电脑是一种易用、安全、高效的云上桌面服务,阿里云无影云电脑可用于高数据安全管控、高性能计算等要求的金融、设计、视频、教育等领域,适用于多种办公场景,如远程办公、多分支机构、安全OA、短期使用、专业制图等。阿里云百科来…

【LeetCode热题100】--49.字母异位词分组

49.字母异位词分组 两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的…

DockerCompose

DockerCompose Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器! 初识DockerCompose Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下: version: &…

[golang 流媒体在线直播系统] 4.真实RTMP推流摄像头把摄像头拍摄的信息发送到腾讯云流媒体服务器实现直播

用RTMP推流摄像头把摄像头拍摄的信息发送到腾讯云流媒体服务器实现直播,该功能适用范围广,比如:幼儿园直播、农场视频直播, 一.准备工作 要实现上面的功能,需要准备如下设备: 推流摄像机(监控) 流媒体直播服务器(腾讯云流媒体服务器,自己搭建的流媒体服务…

React中组件通信01——props

React中组件通信01——props 1. 父传子——props1.1 简单例子——props1.2 props 可以传递任何数据1.2.1 传递数字、对象等1.2.2 传递函数1.2.3 传递模版jsx 2. 子传父 子传子——props2.1 父传子——传递函数2.2 子传父——通过父传子的函数实现2.3 优化 子传子(…

uniapp开发小程序中实现骨架屏

第一步:小程序中实现骨架屏在微信开发者工具中点击生成骨架屏: 第二步:复制html代码,到骨架屏vue组件汇中再把之前写的样式代码引入进去: import ../../pages/user/user.css; 第三步:组件中引入骨架屏&am…

python pytesseract 中文文字批量识别

用pytesseract 来批量把图片转成文字 1、安装好 pytesseract 包 2、下载安装OCR https://download.csdn.net/download/m0_37622302/88348824https://download.csdn.net/download/m0_37622302/88348824 Index of /tesseracthttps://digi.bib.uni-mannheim.de/tesseract/ 我是…

百度SEO优化TDK介绍(分析下降原因并总结百度优化SEO策略)

TDK是SEO优化中很重要的部分,包括标题(Title)、描述(Description)和关键词(Keyword),为百度提供网页内容信息。其中标题是最重要的,应尽量突出关键词,同时描述…

【C++学习】继承

目录 一、继承的概念及定义 1、继承的概念 2、继承的定义 2.1 定义格式 2.2 继承关系和访问限定符 2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形…

天然气跟踪监管系统功能模块实现

天然气跟踪监管系统功能模块实现 1. 数据库查询3. 仓库管理(1)仓库查询与展示。代码说明 1. 数据库查询 救援物资跟踪监管系统的绝大部分功能都会涉及关系数据库中的业务数据,因此关系数据库的查询是本系统不可或缺的重要部分。 本系统中的数…

Matlab--微积分问题的计算机求解

目录 1.单变量函数的极限问题 1.1.公式例子 1.2.对应例题 1 2.多变量函数的极限问题 3.函数导数的解析解 4.多元函数的偏导数 5.Jacobian函数 6.Hessian矩阵 7.隐函数的偏导 8.不定积分问题的求解 9.定积分的求解问题 10. 多重积分的问题求解 1.单变量函数的极限问题 …

【Vue】快速入门案例与工作流程的讲解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue快速入门》。&#x1f…

运维Shell牛刀小试(十一):for循环读取多个命令行参数|read重定向读取文件内容

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 Cenos7安装小火车程序动画 运维Shell脚本小试…

【系统架构】系统架构设计基础知识

导读:本文整理关于系统架构设计基础知识来构建系统架构知识体系。完整和扎实的系统架构知识体系是作为架构设计的理论支撑,基于大量项目实践经验基础上,不断加深理论体系的理解,从而能够创造新解决系统相关问题。 目录 1、软件架…

高速信号处理板资料保存:383-基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡设计原理图

基于kintex UltraScale XCKU060的双路QSFP光纤PCIe 卡 一、板卡概述 本板卡系我司自主研发,基于Xilinx UltraScale Kintex系列FPGA XCKU060-FFVA1156-2-I架构,支持PCIE Gen3 x8模式的高速信号处理板卡,搭配两路40G QSFP接口&#xf…

PyQt5入门2——添加一个画布并且显示特定的图片

PyQt5入门2——添加一个画布并且显示特定的图片 学习前言使用到的PyQt5类实例使用1、窗口构建a、构建基础类b、读取已有的图片并且显示 2、主程序运行 全部代码 学习前言 搞搞可视化界面哈,虽然不一定有用,但是搞一下。 使用到的PyQt5类 创建画布需要…

MapReduce YARN 的部署

1、部署说明 Hadoop HDFS分布式文件系统,我们会启动: NameNode进程作为管理节点DataNode进程作为工作节点SecondaryNamenode作为辅助 同理,Hadoop YARN分布式资源调度,会启动:ResourceManager进程作为管理节点NodeM…

蓝桥杯2023年第十四届省赛真题-更小的数--题解

目录 蓝桥杯2023年第十四届省赛真题-更小的数 题目描述 输入格式 输出格式 样例输入 样例输出 提示 【思路解析】 【代码实现】 蓝桥杯2023年第十四届省赛真题-更小的数 时间限制: 3s 内存限制: 320MB 提交: 895 解决: 303 题目描述 小蓝有一个长度均为 n 且仅由数字…