热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pingmesh:ALargeScaleSystemforDataCenterNetworkLatencyMeasurementandAnalysis

在今天的数据中心的网络中,涉及到的网络设备是极其复杂多样的。一个大型的数据中心都有成百上千的节点,网卡,交换机,路由器以及无数的网线,光纤。在这些硬件设备基础上构建了很多软件,比如

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

基于这几点问题,微软设计开发了Pingmesh,展示了建立大规模网络延迟的测量和分析系统的可行性。


背景介绍


数据中心网络

常见的数据中心网络拓扑

在这篇论文中,作者把网络分为两部分。

第一部分是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有三个部分组成,分别是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只能测单次的。无法测出多次往返的情况。



推荐阅读
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • 于2012年3月份开始接触OpenStack项目,刚开始之处主要是与同事合作共同部署公司内部的云平台,使得公司内部服务器能更好的得到资源利用。在部署的过程中遇到各种从未遇到过的问题 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 使用Packet Tracer对不同网段组网模拟
    @[toc]1.不同网段通信处于同于一个网段的电脑通过集线器或者交换机可以实现互相通信,处于不同网段的电脑就需要通过路由器来实现,这里可以通过Cisco的PacketTracer软 ... [详细]
  • 点击上方[全栈开发者社区]→右上角[]→[设为星标⭐]前言年前准备换工作,总结了一波面试最频繁的面试问题跟大家交流。此文章是关于浏览器的常见问题, ... [详细]
  • Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试
    首先,回顾并详细说明一下在下面我们尝试使用SpringMVC来实现一组对User对象操作的RESTf ... [详细]
author-avatar
雨爱艳6688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有