Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis


簡要

在今天的數據中心的網絡中,涉及到的網絡設備是極其復雜多樣的。一個大型的數據中心都有成百上千的節點,網卡,交換機,路由器以及無數的網線,光纖。在這些硬件設備基礎上構建了很多軟件,比如搜索引擎、分布式文件系統、分布式存儲等等。在這些系統運行的過程中,面臨一些問題:如何去測離網絡時延,如何去判斷一個故障時網絡故障?如何去定位一個網絡故障?如何定義和追蹤網絡的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只能測單次的。無法測出多次往返的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM