在今天的数据中心的网络中,涉及到的网络设备是极其复杂多样的。一个大型的数据中心都有成百上千的节点,网卡,交换机,路由器以及无数的网线,光纤。在这些硬件设备基础上构建了很多软件,比如搜索引擎、分布式文件系统、分布式存储等等。在这些系统运行的过程中,面临一些问题:如何去测离网络时延,如何去判断一个故障时网络故障?如何去定位一个网络故障?如何定义和追踪网络的SLA?
基于这几点问题,微软设计开发了Pingmesh,展示了建立大规模网络延迟的测量和分析系统的可行性。

背景介绍

数据中心网络

常见的数据中心网络拓扑
Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis
在这篇论文中,作者把网络分为两部分。
第一部分是intra data center (Intra-DC)network。
第二部分为 inter data center (Inter-DC)network
Intra—DC包含三层:

  • Access Layer(接入层):有时也称为Edge Layer。接入交换机通常位于机架顶部,所以它们也被称为ToR(Top of Rack)交换机,它们物理连接服务器
  • Aggregation Layer(汇聚层):有时候也称为Distribution Layer。汇聚交换机连接Access交换机,同时提供其他的服务,例如防火墙,SSL offload,入侵检测,网络分析等。
  • Core Layer(核心层):核心交换机为进出数据中心的包提供高速的转发,为多个汇聚层提供连接性,核心交换机为通常为整个网络提供一个弹性的L3路由网络。
    通常情况下,每组汇聚交换机管理一个POD(Point Of Delivery),每个POD内都是独立的VLAN网络。服务器在POD内迁移不必修改IP地址和默认网关,因为一个POD对应一个L2广播域。
    汇聚交换机和接入交换机之间通常使用STP(Spanning Tree Protocol)。STP使得对于一个VLAN网络只有一个汇聚层交换机可用,其他的汇聚层交换机在出现故障时才被使用(上图中的虚线)。

网络延迟和数据包丢失

这里的网络延迟测离的是RTT。因为RTT测量不需要同步服务器时钟。

设计与实施

Pingmesh 是松耦合设计,每个组件都是可以独立运行的,分为三个组件,在设计的时候需要考虑几点:

  • 因为要运行在所有的server上,所有不能占用太多的内存和计算资源。
  • 需要时灵活配置的且高可用的
  • 记录的数据需要进行合理的汇总分析

Pingmesh 构架设计

Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis
Pingmesh有三个部分组成,分别是Pingmesh Controller,Pingmesh Agent,Data Storage and Analysis.

Pingmesh Controller

它是整个系统的大脑,因为它决定了服务器应该如何相互探测。 在Pingmesh Controller中,Pingmesh Generator为每个服务器生成一个pinglist文件。 pinglist文件包含对等服务器列表和相关参数。 pinglist文件基于网络拓扑生成。 服务器通过RESTful Web界面获取相应的pinglist。

Pingmesh 生成原则

由于Pingmesh Agent 运行在所有的server上,Controller为了避免开销,抽象了三层完全有向图。

  1. 在机架内部,让所有的server互相ping,每个server ping(N-1)个server
  2. 在机架之间,则每个机架选几个server ping其它机架的server,保证每个server所属的ToR不同
  3. 在数据中心之间,则选择不同的数据中心的几个不同的机架的server 来 ping。

Pingmesh Agent

Pingmesh Agent的任务很简单:从Pingmesh Controller下载pinglist; ping pinglist中的服务器; 由于Pingmesh运行在所有服务器上,为了保证获取结果的真实的服务一致,Pingmesh 没有采用ICMP ping,而是采用的TCP/HTTP ping ,所有每个Agent即使Server也是Client。每个Ping动作都要开启一个新的连接,主要是为了减少Pingmesh造成的TCP并发。
Agent要保证自己是可靠的,不会造成一些严重的后果,其次要保证自己使用的资源足够少,毕竟运行在每个Server上。两个Server ping的周期最小是10s,packet大小最大64kb。针对灵活的配置需求,Agent会定期去Controller上拉去pinglist,如果三次拉取不到,哪么就会删除本地已有的pinglist,停止ping动作。
在进行ping动作后,会将结果保存在内存中,当保存结果超过一定的阈值或者达到了超时时间,就将结果上传到Cosmos(后面会介绍)中用于分析,如果上传失败,会有重试次数则数据丢弃,保证Agent的内存使用。

Data Storage and Analysis

对于数据的存储和分析,这篇论文使用现有的系统(Cosmos/SCOPE)和Autopilot Perfcounter(PA)。
Pingmesh代理会定期将时延记录上传到Cosmos。 与Pingmesh控制器类似,Cosmos的前端使用负载均衡和VIP(虚拟地址IP)进行扩展。 同时,Pingmesh 代理对延迟数据执行本地计算,并生成一组性能计数器,包括50%至90%的丢包率和网络延迟等。所有这些性能计数器都被收集,汇总和存储在Autopilot的PA服务。当收集到数据,Pingmesh有三种粒度对数据进行分析,分别以10min,1hour,1day的粒度进行统计汇总,数据的实时性最快也就是10min,Pingmesh还借助内部的基础设施能够拿到5min级别的数据结果。算是一种时间监控。

网络状况

根据论文中提到的,不同负载的数据中心的数据是有很大差异的,在 P99.9 时延时大概在 10-20ms,在 P99.99 延时大概在100+ms 。关于丢包率的计算,因为没有用 ICMP ping 的方式,所以这里是一种新的计算方式,(一次失败 + 二次失败)次数/(成功次数)= 丢包率。这里是每次 ping 的 timeout 是 3s,windows 重传机制等待时间是 3s,下一次 ping 的 timeout 时间是 3s,加一起也就是 9s。所以这里跟 Agent 最小探测周期 10s 是有关联的。二次失败的时间就是 (2 * RTT)+ RTO 时间。

Pingmesh 的判断依据有两个,如果超过就报警:

  • 延时超过 5ms
  • 丢包率超过 10^(-3)
    在论文中还提到了其他的网络故障场景,交换机的静默丢包。有可能是 A 可以连通 B,但是不能连通 C。还有可能是 A 的 i 端口可以连通 B 的 j 端口,但是 A 的 m 端口不能连通 B 的 j 端口,这些都属于交换机的静默丢包的范畴。Pingmesh 通过统计这种数据,然后给交换机进行打分,当超过一定阈值时就会通过 Autopilot 来自动重启交换机,恢复交换机的能力。

总结

这篇论文的不足之处:

  • 尽管Pingmesh能够检测到故障网络设备所在的层,但它无法确定准确的位置。
  • 网络测量RTT只能测单次的。无法测出多次往返的情况。

相关文章:

  • 2021-05-30
  • 2021-11-16
  • 2021-08-28
  • 2022-01-04
  • 2021-10-28
  • 2021-04-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-08-20
  • 2021-06-10
  • 2022-12-23
  • 2021-06-25
  • 2021-04-09
  • 2022-12-23
  • 2021-08-15
相关资源
相似解决方案