SlapOS Home SlapOS

    GrandeNet - 互联网加速剂

    通过创建一个网状网络,GrandeNet 可以被用来优化分布在全球的电脑之间的连通性,甚至比互联网本身的速度还要快。
    • Last Update:2016-03-07
    • Version:001
    • Language:zh

    "伟大 (The Great)"的减速

    由于许多国家和 ICP 供应商倾向于通过施加工具来控制或监视用户以达到优化他们“内部”数据访问的目的,致使整体网络状况恶化,性能明显下降。这个现状大大增加了为终端用户提供应用的公司的运营成本。我们的研究显示互联网的速度 — 不仅仅是在中国 — 在全球范围内都有着显著的差异并常常因为互联网没有选择优化路径而导致一些应用或一些用户短期或长期的访问缓慢。GrandeNet 可以通过使用 Re6st 在所有相连的服务器之间保持优质并稳定的连接路径,达到优化一些服务器80%的连接。

    你会 Re6st 吗?

    Re6st 是一个多协议随机网格生成器,使用 Babel 路由协议来发现网格中每个节点之间的最优路径。它可支持 IPv6 和 IPv4, 也即将实现 RINA 支持。它被商业化应用于 VIFIB - 我们的分布式云供应商,用来解决因路由器上的漏洞,通过数据包检测来阻拦TCP协议,严格的政府信息过滤系统等造成的企业级分布式应用面临的互联网连接缺乏可靠性的问题。没有 re6st, 是不可能在一个分布式云上部署大型企业(如三菱, Sanef,Aide et Action等)所需的关键商业应用。也不可能在巴西,中国或科特迪瓦这样缺乏可靠互联网环境的地方部署分布式云。

    IPython Notebook

    IPython Notebook 是一个基于网页的互动式计算环境, 用来创建嵌入 Python 代码的可执行 Notebooks。IPython Notebook 被研究人员大量用于研发并分享他们的科学成果。我们选择使用 IPython Notebook 在这篇文章中提供一个清晰的攻略。

    这篇文章完全可以通过在你的 IPython Notebook 实例上导入这个 notebook 来重现。

    为了执行这个 notebook,我们需要一些常见的 python 库,特别是 panda, numpy, scipy 和 matplotlib。以下是一些初始化库需要的导入。

    In [1]:
    %pylab inline
    import sys
    from matplotlib import pyplot
    import matplotlib.pyplot as plt
    #from mpl_toolkits.basemap import Basemap
    from IPython.display import display, clear_output
    from IPython.core.display import HTML 
    
    import pandas as pd
    import numpy as np
    
    from pandas import rolling_median
    
    np.set_printoptions(threshold="nan")
    
    pd.set_option('display.max_rows', 2000)
    
    from pandas import Series, DataFrame, Panel
    
    Populating the interactive namespace from numpy and matplotlib

    接下来,我们将定义核心代码 - 以方法的形式记录,将为这篇文章执行数据收集并计算结果。如果你对代码不感兴趣,你可以直接跳到这篇文章的下一章节。

    In [2]:
    import urllib2
    
    def load_json(url, average="internet_ipv4", packet_lost="internet_ipv4_packet_lost"):
      """ Download JSON and normalize the data by:
            - Replace failed by a number '0', so the column is a float and not string
            - Replace 'average' and packet_lost by another name 
                for help concat 2 numpy array w/o recreate it.
            - Remove latest empty line.
      """
      req = urllib2.Request(url)
      response = urllib2.urlopen(req)
      content = response.read()
      return '[%s]' % content\
        .replace('"failed"', "0")\
        .replace('"average"', '"%s"' % average)\
        .replace('"packet_lost"', '"%s"' % packet_lost)\
        .replace("\n", ",")[:-1]
    
    def load_test(id, date_id):
      """ Load Test results from Distributed Monitoring Tool
          and transform into DataFrames """
        
      # Load JSON for ICMPv6
      ping6_as_jsonstring = load_json(
        log_dict[id]["grandenet_ipv6"] % date_id, 
        average="grandenet_ipv6",  packet_lost="grandenet_ipv6_packet_lost")
    
      # Load JSON for ICMPv4  
      ping_as_jsonstring = load_json(
        log_dict[id]["internet_ipv4"] % date_id, 
        average="internet_ipv4", packet_lost="internet_ipv4_packet_lost")
    
      return pd.read_json(ping6_as_jsonstring, convert_dates=["time"]), \
        pd.read_json(ping_as_jsonstring, convert_dates=["time"])
    
    def get_computer_list(dframeA, dframeB ):
        """ Extract all computer names at the DataFrames """
        return list(set([ computer_name[0] for computer_name in dframeA[["computer_name"]].as_matrix()] + 
                      [ computer_name[0] for computer_name in dframeB[["computer_name"]].as_matrix()]))
    
    def get_computer_destination_label(dframeA):
        """ Determinate the Label Name for the computer which are receiving the ping"""
        return getComputerLabel([computer_name[0] for computer_name in dframeA[["name_or_ip"]].as_matrix()][0])
    
    def getComputerLabel(computer_name):
        """ Translate hostname, ip addresses into meaningfull names for better understanting"""
        return server_label.get(computer_name, computer_name)
    
    # Initiallization function which are going to be used for 
    # collect the logs and transform them on Data Frames.
    def plot_ping_comparation(df_ping6, df_ping):
      """ Function to load, plot and compare 2 Data Frames 
      """
      computer_list = get_computer_list(df_ping, df_ping6)
    
      computer_destination_label = get_computer_destination_label(df_ping6)
    
      measured_average = []
      packet_lost = []
        
      for computer_name in computer_list:
        
        if getComputerLabel(computer_name) == computer_destination_label:
          continue
    
        df6 = pd.DataFrame(df_ping6[df_ping6["computer_name"] == computer_name][df_ping6["grandenet_ipv6"] > 0][["time", "grandenet_ipv6"]])    
        df4 = pd.DataFrame(df_ping[df_ping["computer_name"] == computer_name][df_ping["internet_ipv4"] > 0][["time", "internet_ipv4"]])
    
        # Use Moving average in order to eliminate noise spikes on the chart and measurement.
        df6['grandenet_ipv6'] = rolling_median(df6['grandenet_ipv6'], window=3, center=True)
        df4['internet_ipv4'] = rolling_median(df4['internet_ipv4'], window=3, center=True)
        
        label = "'%s' to '%s'" % (getComputerLabel(computer_name), computer_destination_label)
    
        if 0 in [len(df6), len(df4)]:
          print "Found one empty array for %s" % label
          continue
        
        df = pd.DataFrame(pd.concat([df6, df4]))
    
        if SHOW_ALL_CHARTS:
          df4.plot(x="time", title=label + " (lower is better)", 
                   sort_columns=["time"], figsize=(20,6))
          df6.plot(x="time", title=label + " (lower is better)", 
                   sort_columns=["time"], color='r', figsize=(20,6))
        
        df.plot(x="time", title=label + " (lower is better)",
                marker='o', color=["b", "r"], figsize=(20,6))
        
        # Ignore 0 entries as it represents a full failure (so no average).
        ipv6_mean = df6["grandenet_ipv6"].mean()
        ipv4_mean = df4["internet_ipv4"].mean()
    
        grandenet_ipv6_packet_lost = df_ping6[df_ping6["computer_name"] == computer_name]["grandenet_ipv6_packet_lost"].mean()
        internet_ipv4_packet_lost = df_ping[df_ping["computer_name"] == computer_name]["internet_ipv4_packet_lost"].mean()
     
        if ipv6_mean < ipv4_mean:
          improvement_ratio = float(ipv4_mean - ipv6_mean)/ipv4_mean
          state = "OPTIMIZED in %sms (%.2f%%)" % ((ipv4_mean - ipv6_mean), improvement_ratio*100)
        elif ipv6_mean < (ipv4_mean + max(20, ipv4_mean*0.15)):
          state = "OK (in acceptable range %s < %s < %s)" % (ipv4_mean, ipv6_mean, (ipv4_mean + max(20, ipv4_mean*0.15)))
        else:
          state = "BAD (%sms slower)" % (ipv6_mean - ipv4_mean)
    
        measured_average.append({"name" : "'%s' to '%s'" % (getComputerLabel(computer_name), computer_destination_label),
                                 "grandenet_ipv6": ipv6_mean,
                                 "internet_ipv4": ipv4_mean,
                                 "state": state})
    
        
        if grandenet_ipv6_packet_lost < internet_ipv4_packet_lost:
          loss_state = "OPTIMIZED (Better Packet Lost rate)"
        elif grandenet_ipv6_packet_lost == internet_ipv4_packet_lost:
          loss_state = "OK (Same Packet Lost rate)"
        elif (grandenet_ipv6_packet_lost - internet_ipv4_packet_lost) < 1:
          loss_state = "OK (less them 1% diference is considered same)"
        else:
          loss_state = "BAD (Worst Packet Lost rate)"
    
        packet_lost.append({"name" : "'%s' to '%s'" % (getComputerLabel(computer_name), computer_destination_label),
                                 "grandenet_ipv6_packet_lost": grandenet_ipv6_packet_lost,
                                 "internet_ipv4_packet_lost": internet_ipv4_packet_lost,
                                 "state": loss_state})
    
      return pd.DataFrame(measured_average), pd.DataFrame(packet_lost)
    

    用 SlapOS 分布式监测评估性能

    GrandeNet 架构的核心是基于分布在多个云供应商 (亚马逊,青云,OVH,Rackspace,Ucloud 等) 服务器上以及分布在企业办公区或个人家庭的独立机器上。客户可以添加位于他们处所甚至是家庭的服务器,来用作主要的生产服务器。

    这个 GrandeNet 混合动力和异构基础架构使用 SlapOS 管理和监测全球所有的分布式服务器。

    在这篇文章中,我们使用一小组服务器 (12个) 使用 IPv4 运行 SlapOS 分布式监测。每个服务器都试图联系 (使用 ICMP 协议)使用 IPv4 和 IPv6 的12个服务器的地址。每10分钟运行10次测试 (10 pings) ,然后我们来测试并比较观察到的平均值和数据流失量。

    下面这个图像说明了仅使用3个服务器时的测试:

    GrandeNet Connectivity Example

    下面我们初始化了每个服务器日志的位置,以及标签来提高图标和结果的可读性。

    In [3]:
    server_label = {
      'i-j0dshts2': "Guanghouz - Qincloud",
      '10-13-16-6': "Guanghouz - UCloud",
      'i-wbs0d67i' : "Hongkong - Qincloud 1",
      'i-vutfghrs': "Hongkong - Qincloud 0",
      'i-hf0f7ocn': "Beijing - Qincloud",
      'vps212661.ovh.net': "Strasbourg - OVH",
      'ip-172-31-30-97': "Singapour - Amazon",
      'ip-172-31-6-206': "Tokyo - Amazon",
      'ip-172-31-8-66' : "Virginia - Amazon",
      'ip-172-31-7-155': "US West - Amazon",
      'cloud-server-grandenet' : "Hongkong - Rackspace",
        
      'COMP-9': 'US West - Amazon',
      'COMP-8': 'Singapour - Amazon',
      'COMP-7': 'Tokyo - Amazon',
      'COMP-6': 'Hongkong - Qincloud 1',
      'COMP-4': 'Hongkong - Qincloud 0',
      'COMP-2': 'Beijing - Qincloud',
      'COMP-3': 'Guanghouz - Qincloud',
      'COMP-10': 'Guanghouz - UCloud',
      'COMP-11': 'Strasbourg - OVH',
      'COMP-12': 'Virginia - Amazon',
      "COMP-13": 'Beauharnois - OVH',
    
      "frontend0.grandenet.cn": "Beijing - Qincloud",
      "2401:5180::1": "Beijing - Qincloud",
      "frontend1.grandenet.cn": "Guanghouz - Qincloud",
      "2401:5180:0:6::1": "Guanghouz - Qincloud",
      "2401:5180:0:9::1" : "Hongkong - Qincloud 0",
      "frontend3.grandenet.cn" : "Hongkong - Qincloud 0",
      "2401:5180:0:8::1" : "Hongkong - Rackspace",
      "frontend4.grandenet.cn" : "Hongkong - Rackspace",
      "2401:5180:0:7::1": "Hongkong - Qincloud 1",
      "frontend5.grandenet.cn": "Hongkong - Qincloud 1",
      "2401:5180:0:c::1": "Tokyo - Amazon", 
      "frontend7.grandenet.cn": "Tokyo - Amazon",
      "2401:5180:0:d::1": "Singapour - Amazon",
      "frontend6.grandenet.cn": "Singapour - Amazon",
      "2401:5180:0:10::1": "US West - Amazon",
      "frontend8.grandenet.cn": "US West - Amazon",
      "2401:5180:0:13::1": "Guanghouz - UCloud",
      "frontend9.grandenet.cn": "Guanghouz - UCloud",
      "2401:5180:0:16::1": "Strasbourg - OVH",
      "frontend10.grandenet.cn": "Strasbourg - OVH",
      "2401:5180:0:15::1": "Virginia - Amazon",
      "frontend11.grandenet.cn": "Virginia - Amazon",
      "2401:5180:0:17::1": "Beauharnois - OVH",
      "frontend12.grandenet.cn": "Beauharnois - OVH",
    
    }
    
    
    log_dict = {
      "Hongkong - Qincloud 0": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-314/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-314/ping/log.%s.log",
          },
      "Virginia - Amazon": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-322/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-322/ping/log.%s.log",
          },
      "Strasbourg - OVH": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-321/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-321/ping/log.%s.log",
          },
      "Guanghouz - UCloud": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-320/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-320/ping/log.%s.log",
          },
      "Tokyo - Amazon": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-317/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-317/ping/log.%s.log",
          },
      "US West - Amazon": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-319/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-319/ping/log.%s.log",
          },
      "Singapour - Amazon": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-318/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-318/ping/log.%s.log",
          },
      "Hongkong - Qincloud 1": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-316/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-316/ping/log.%s.log",
          },
      "Guanghouz - Qincloud": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-313/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-313/ping/log.%s.log",
          },
      "Beijing - Qincloud": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-312/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-312/ping/log.%s.log",
          },
      "Hongkong - Rackspace": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-315/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-315/ping/log.%s.log",
          },
      "Beauharnois - OVH": {
          "grandenet_ipv6": "https://softinst303.node.grandenet.cn/SOFTINST-625/ping6/log.%s.log",
          "internet_ipv4": "https://softinst303.node.grandenet.cn/SOFTINST-625/ping/log.%s.log",
          }
    }
    

    我们同时还限制了这篇文章的规模,使测试运行在一定日期范围内,见如下变量“DAY”。

    In [4]:
    # Define here if you want more or less charts verbosity. Show all charts can
    # make this report quite big.
    SHOW_ALL_CHARTS = False
    
    # Generate Report for the Jan, 28, 2016
    DAY = "20160128"
    

    从分布式 SlapOS 监测收集数据

    为了出结果,我们使用了如上定义的方法,抓取日志并转化为数据帧。这些数据帧包含了指示时期 (DAY) 的测试结果。

    In [5]:
    hq0_df_ping6, hq0_df_ping = load_test(id = "Hongkong - Qincloud 0", date_id=DAY)
    
    In [6]:
    va_df_ping6, va_df_ping = load_test(id = "Virginia - Amazon", date_id=DAY)
    
    In [7]:
    gu_df_ping6, gu_df_ping = load_test(id =  "Guanghouz - UCloud", date_id=DAY)
    
    In [8]:
    sa_df_ping6, sa_df_ping = load_test(id = "Singapour - Amazon", date_id=DAY)
    
    In [9]:
    hq1_df_ping6, hq1_df_ping = load_test(id = "Hongkong - Qincloud 1", date_id=DAY)
    
    In [10]:
    hr_df_ping6, hr_df_ping = load_test(id = "Hongkong - Rackspace", date_id=DAY)
    
    In [11]:
    wa_df_ping6, wa_df_ping = load_test(id = "US West - Amazon", date_id=DAY)
    
    In [12]:
    go_df_ping6, go_df_ping = load_test(id = "Strasbourg - OVH", date_id=DAY)
    
    In [13]:
    ta_df_ping6, ta_df_ping = load_test(id = "Tokyo - Amazon", date_id=DAY)
    
    In [14]:
    gq_df_ping6, gq_df_ping = load_test(id = "Guanghouz - Qincloud", date_id=DAY)
    
    In [15]:
    bq_df_ping6, bq_df_ping = load_test(id = "Beijing - Qincloud", date_id=DAY)
    
    In [16]:
    bho_df_ping6, bho_df_ping = load_test(id = "Beauharnois - OVH", date_id=DAY)
    

    互联网 IPv4 vs Grandenet IPv6

    使用数据帧,我们可以视觉化在使用互联网 IPv4 (红色)和 Grandenet IPv6 (蓝色) 时的响应时间(毫秒)的比较。 由于我们使用的是 ICMP 协议来测量响应时间,下面的图表使用了“ping"作为 IPv4的名字,ping6 作为 IPv6 的名字,并且突出了互联网 IPv4 和 IPv6 之间的区别。响应时间越短, 绘制线越低,越好。

    In [17]:
    hq0_average_dataframe, hq0_packetloss_dataframe = plot_ping_comparation(hq0_df_ping6, hq0_df_ping)
    
    /srv/slapgrid/slappart8/srv/runner/software/9a8d67b31671ba36ac107c65a141c073/develop-eggs/pandas-0.16.2-py2.7-linux-x86_64.egg/pandas/core/frame.py:1825: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
      "DataFrame index.", UserWarning)
    
    In [18]:
    va_average_dataframe, va_packetloss_dataframe = plot_ping_comparation(va_df_ping6, va_df_ping)
    
    In [19]:
    go_average_dataframe, go_packetloss_dataframe = plot_ping_comparation(go_df_ping6, go_df_ping)
    
    In [20]:
    gu_average_dataframe, gu_packetloss_dataframe = plot_ping_comparation(gu_df_ping6, gu_df_ping)
    
    In [21]:
    ta_average_dataframe, ta_packetloss_dataframe = plot_ping_comparation(ta_df_ping6, ta_df_ping)
    
    In [22]:
    sa_average_dataframe, sa_packetloss_dataframe = plot_ping_comparation(sa_df_ping6, sa_df_ping)
    
    In [23]:
    hq1_average_dataframe, hq1_packetloss_dataframe = plot_ping_comparation(hq1_df_ping6, hq1_df_ping)
    
    In [24]:
    gq_average_dataframe, gq_packetloss_dataframe = plot_ping_comparation(gq_df_ping6, gq_df_ping)
    
    In [25]:
    bq_average_dataframe, bq_packetloss_dataframe = plot_ping_comparation(bq_df_ping6, bq_df_ping)
    
    In [26]:
    wa_average_dataframe, wa_packetloss_dataframe = plot_ping_comparation(wa_df_ping6, wa_df_ping)
    
    In [27]:
    hr_average_dataframe, hr_packetloss_dataframe = plot_ping_comparation(hr_df_ping6, hr_df_ping)
    
    In [28]:
    bho_average_dataframe, bho_packetloss_dataframe = plot_ping_comparation(bho_df_ping6, bho_df_ping)
    

    IPv4 和 IPv6 地址的平均 Ping 响应比较

    我们都知道网络延迟对网页应用的性能有直接的影响。通过比较 IPv4 和 IPv6 的平均 ping 响应时间,你会注意到服务器性能的极大提升。

    通过使用 Grandenet, 我们来看两个服务器之间连接的3个状态:

    • 当 IPv6 的速度比 IPv4 的速度快时, 连接质量就被优化了
    • 当 IPv4 比 IPv6 快超过15%或 20毫秒时,连接质量就不太好
    • 当 IPv4 比 IPv6 快不超过15%或20毫秒时,连接质量就还不错

    这些状态承认了一个事实,即在最坏的情况下,re6st 也可以提升 ping 响应时间至少20秒,也就是两个相隔很远的两个服务器之间直接相连。

    一个理想的情景是在做相互测试的时候让所有的服务器都处于被优化或还不错的状态。下面的表格就包含了之前所提到的服务器之间的全部连接列表。你可以发现不仅仅是有中国服务器的连接被优化了,日本和新加坡,日本和香港,美国和香港以及其他的连接都被优化了。

    In [29]:
    df_average_statistic = pd.concat([go_average_dataframe, hr_average_dataframe, 
                                      bho_average_dataframe,bq_average_dataframe, 
                                      gq_average_dataframe, va_average_dataframe, 
                                      hq0_average_dataframe, gu_average_dataframe,  
                                      ta_average_dataframe, sa_average_dataframe, 
                                      hq1_average_dataframe, wa_average_dataframe],
                                     ignore_index=True)
    
    df_average_statistic
    
    Out[29]:
    grandenet_ipv6 internet_ipv4 name state
    0 230.769642 227.776942 'Beijing - Qincloud' to 'Strasbourg - OVH' OK (in acceptable range 227.776942149 < 230.76...
    1 207.231196 199.779662 'Singapour - Amazon' to 'Strasbourg - OVH' OK (in acceptable range 199.779661871 < 207.23...
    2 234.477413 343.148734 'Hongkong - Qincloud 1' to 'Strasbourg - OVH' OPTIMIZED in 108.671320769ms (31.67%)
    3 235.069314 344.405986 'Hongkong - Qincloud 0' to 'Strasbourg - OVH' OPTIMIZED in 109.336671743ms (31.75%)
    4 159.144745 160.710180 'US West - Amazon' to 'Strasbourg - OVH' OPTIMIZED in 1.56543533057ms (0.97%)
    5 121.403561 121.298650 'Virginia - Amazon' to 'Strasbourg - OVH' OK (in acceptable range 121.29865 < 121.403561...
    6 246.411341 356.375993 'Guanghouz - Qincloud' to 'Strasbourg - OVH' OPTIMIZED in 109.964652226ms (30.86%)
    7 90.044151 90.002443 'Beauharnois - OVH' to 'Strasbourg - OVH' OK (in acceptable range 90.0024428571 < 90.044...
    8 254.088217 372.031417 'Guanghouz - UCloud' to 'Strasbourg - OVH' OPTIMIZED in 117.943199875ms (31.70%)
    9 247.874190 325.955576 'Hongkong - Rackspace' to 'Strasbourg - OVH' OPTIMIZED in 78.0813857585ms (23.95%)
    10 266.606167 278.157007 'Tokyo - Amazon' to 'Strasbourg - OVH' OPTIMIZED in 11.5508405276ms (4.15%)
    11 243.557295 325.525186 'Strasbourg - OVH' to 'Hongkong - Rackspace' OPTIMIZED in 81.9678907503ms (25.18%)
    12 41.762925 39.811375 'Beijing - Qincloud' to 'Hongkong - Rackspace' OK (in acceptable range 39.811375 < 41.762925 ...
    13 38.099014 34.921950 'Singapour - Amazon' to 'Hongkong - Rackspace' OK (in acceptable range 34.9219496403 < 38.099...
    14 2.153391 1.995842 'Hongkong - Qincloud 1' to 'Hongkong - Rackspace' OK (in acceptable range 1.99584172662 < 2.1533...
    15 2.160094 1.965309 'Hongkong - Qincloud 0' to 'Hongkong - Rackspace' OK (in acceptable range 1.96530935252 < 2.1600...
    16 164.382985 157.351396 'US West - Amazon' to 'Hongkong - Rackspace' OK (in acceptable range 157.351395683 < 164.38...
    17 211.392151 229.954993 'Virginia - Amazon' to 'Hongkong - Rackspace' OPTIMIZED in 18.562841778ms (8.07%)
    18 8.568826 8.248223 'Guanghouz - Qincloud' to 'Hongkong - Rackspace' OK (in acceptable range 8.24822302158 < 8.5688...
    19 229.472014 428.977350 'Beauharnois - OVH' to 'Hongkong - Rackspace' OPTIMIZED in 199.505335612ms (46.51%)
    20 12.660536 7.320137 'Guanghouz - UCloud' to 'Hongkong - Rackspace' OK (in acceptable range 7.32013669065 < 12.660...
    21 56.437174 71.705446 'Tokyo - Amazon' to 'Hongkong - Rackspace' OPTIMIZED in 15.2682721301ms (21.29%)
    22 90.059710 89.985175 'Strasbourg - OVH' to 'Beauharnois - OVH' OK (in acceptable range 89.9851751825 < 90.059...
    23 254.805042 288.993650 'Beijing - Qincloud' to 'Beauharnois - OVH' OPTIMIZED in 34.1886079832ms (11.83%)
    24 247.255138 269.330863 'Singapour - Amazon' to 'Beauharnois - OVH' OPTIMIZED in 22.0757256282ms (8.20%)
    25 224.304181 251.024281 'Hongkong - Qincloud 1' to 'Beauharnois - OVH' OPTIMIZED in 26.7200994161ms (10.64%)
    26 226.983348 284.750353 'Hongkong - Qincloud 0' to 'Beauharnois - OVH' OPTIMIZED in 57.7670046919ms (20.29%)
    27 70.884467 70.894246 'US West - Amazon' to 'Beauharnois - OVH' OPTIMIZED in 0.00977922352695ms (0.01%)
    28 43.673137 42.949250 'Virginia - Amazon' to 'Beauharnois - OVH' OK (in acceptable range 42.94925 < 43.67313669...
    29 232.296942 329.106576 'Guanghouz - Qincloud' to 'Beauharnois - OVH' OPTIMIZED in 96.8096335106ms (29.42%)
    30 237.192766 385.034875 'Guanghouz - UCloud' to 'Beauharnois - OVH' OPTIMIZED in 147.842108577ms (38.40%)
    31 228.411906 423.219410 'Hongkong - Rackspace' to 'Beauharnois - OVH' OPTIMIZED in 194.807504275ms (46.03%)
    32 177.716043 184.348388 'Tokyo - Amazon' to 'Beauharnois - OVH' OPTIMIZED in 6.63234501095ms (3.60%)
    33 240.231168 235.254507 'Strasbourg - OVH' to 'Beijing - Qincloud' OK (in acceptable range 235.254507143 < 240.23...
    34 76.299868 70.598232 'Singapour - Amazon' to 'Beijing - Qincloud' OK (in acceptable range 70.5982318841 < 76.299...
    35 39.032730 41.159784 'Hongkong - Qincloud 1' to 'Beijing - Qincloud' OPTIMIZED in 2.12705424565ms (5.17%)
    36 44.635572 43.729914 'Hongkong - Qincloud 0' to 'Beijing - Qincloud' OK (in acceptable range 43.7299136691 < 44.635...
    37 191.950588 172.012237 'US West - Amazon' to 'Beijing - Qincloud' OK (in acceptable range 172.012237037 < 191.95...
    38 239.912219 236.548706 'Virginia - Amazon' to 'Beijing - Qincloud' OK (in acceptable range 236.548705882 < 239.91...
    39 46.273000 47.747281 'Guanghouz - Qincloud' to 'Beijing - Qincloud' OPTIMIZED in 1.47428057554ms (3.09%)
    40 261.261261 301.428700 'Beauharnois - OVH' to 'Beijing - Qincloud' OPTIMIZED in 40.1674391304ms (13.33%)
    41 43.210993 52.811683 'Guanghouz - UCloud' to 'Beijing - Qincloud' OPTIMIZED in 9.60069069961ms (18.18%)
    42 42.063942 41.977022 'Hongkong - Rackspace' to 'Beijing - Qincloud' OK (in acceptable range 41.9770215827 < 42.063...
    43 96.826109 135.557187 'Tokyo - Amazon' to 'Beijing - Qincloud' OPTIMIZED in 38.7310783547ms (28.57%)
    44 253.286304 348.142114 'Strasbourg - OVH' to 'Guanghouz - Qincloud' OPTIMIZED in 94.8558099379ms (27.25%)
    45 45.542403 47.665650 'Beijing - Qincloud' to 'Guanghouz - Qincloud' OPTIMIZED in 2.12324663866ms (4.45%)
    46 46.796123 193.877259 'Singapour - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED in 147.081135804ms (75.86%)
    47 11.600123 28.864662 'Hongkong - Qincloud 1' to 'Guanghouz - Qincloud' OPTIMIZED in 17.2645386821ms (59.81%)
    48 14.198486 37.674871 'Hongkong - Qincloud 0' to 'Guanghouz - Qincloud' OPTIMIZED in 23.4763849964ms (62.31%)
    49 173.533544 292.845978 'US West - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED in 119.3124343ms (40.74%)
    50 220.941986 294.773657 'Virginia - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED in 73.8316716356ms (25.05%)
    51 236.891568 361.344309 'Beauharnois - OVH' to 'Guanghouz - Qincloud' OPTIMIZED in 124.452741007ms (34.44%)
    52 5.721768 5.410108 'Guanghouz - UCloud' to 'Guanghouz - Qincloud' OK (in acceptable range 5.41010791367 < 5.7217...
    53 8.664124 8.320640 'Hongkong - Rackspace' to 'Guanghouz - Qincloud' OK (in acceptable range 8.32064028777 < 8.6641...
    54 70.081956 131.256727 'Tokyo - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED in 61.1747704143ms (46.61%)
    55 121.487640 121.247236 'Strasbourg - OVH' to 'Virginia - Amazon' OK (in acceptable range 121.247235714 < 121.48...
    56 240.120950 230.511413 'Beijing - Qincloud' to 'Virginia - Amazon' OK (in acceptable range 230.511413223 < 240.12...
    57 222.681261 223.468777 'Singapour - Amazon' to 'Virginia - Amazon' OPTIMIZED in 0.787516108852ms (0.35%)
    58 209.687812 210.714964 'Hongkong - Qincloud 1' to 'Virginia - Amazon' OPTIMIZED in 1.02715243457ms (0.49%)
    59 206.991920 218.024158 'Hongkong - Qincloud 0' to 'Virginia - Amazon' OPTIMIZED in 11.0322379835ms (5.06%)
    60 76.374496 84.404000 'US West - Amazon' to 'Virginia - Amazon' OPTIMIZED in 8.02950364964ms (9.51%)
    61 220.761130 238.426374 'Guanghouz - Qincloud' to 'Virginia - Amazon' OPTIMIZED in 17.6652436659ms (7.41%)
    62 43.641381 42.894914 'Beauharnois - OVH' to 'Virginia - Amazon' OK (in acceptable range 42.8949142857 < 43.641...
    63 225.314246 389.168935 'Guanghouz - UCloud' to 'Virginia - Amazon' OPTIMIZED in 163.854688875ms (42.10%)
    64 211.599536 229.980266 'Hongkong - Rackspace' to 'Virginia - Amazon' OPTIMIZED in 18.3807299552ms (7.99%)
    65 152.523601 152.000986 'Tokyo - Amazon' to 'Virginia - Amazon' OK (in acceptable range 152.000985612 < 152.52...
    66 239.363849 347.087293 'Strasbourg - OVH' to 'Hongkong - Qincloud 0' OPTIMIZED in 107.723443936ms (31.04%)
    67 45.002513 41.264050 'Beijing - Qincloud' to 'Hongkong - Qincloud 0' OK (in acceptable range 41.26405 < 45.00251260...
    68 36.321246 35.532187 'Singapour - Amazon' to 'Hongkong - Qincloud 0' OK (in acceptable range 35.5321870504 < 36.321...
    69 0.837732 0.606295 'Hongkong - Qincloud 1' to 'Hongkong - Qinclou... OK (in acceptable range 0.606294964029 < 0.837...
    70 160.017212 169.572899 'US West - Amazon' to 'Hongkong - Qincloud 0' OPTIMIZED in 9.55568760174ms (5.64%)
    71 207.156094 218.038657 'Virginia - Amazon' to 'Hongkong - Qincloud 0' OPTIMIZED in 10.8825636177ms (4.99%)
    72 14.436101 36.616367 'Guanghouz - Qincloud' to 'Hongkong - Qincloud 0' OPTIMIZED in 22.1802654572ms (60.57%)
    73 229.083065 283.335871 'Beauharnois - OVH' to 'Hongkong - Qincloud 0' OPTIMIZED in 54.2528066804ms (19.15%)
    74 19.104543 63.614424 'Guanghouz - UCloud' to 'Hongkong - Qincloud 0' OPTIMIZED in 44.5098809822ms (69.97%)
    75 2.138971 1.951871 'Hongkong - Rackspace' to 'Hongkong - Qincloud 0' OK (in acceptable range 1.9518705036 < 2.13897...
    76 53.963688 51.621165 'Tokyo - Amazon' to 'Hongkong - Qincloud 0' OK (in acceptable range 51.6211654676 < 53.963...
    77 255.833453 365.678857 'Strasbourg - OVH' to 'Guanghouz - UCloud' OPTIMIZED in 109.845403905ms (30.04%)
    78 43.109625 52.778208 'Beijing - Qincloud' to 'Guanghouz - UCloud' OPTIMIZED in 9.66858333333ms (18.32%)
    79 52.838234 227.743525 'Singapour - Amazon' to 'Guanghouz - UCloud' OPTIMIZED in 174.905291603ms (76.80%)
    80 15.742594 69.543173 'Hongkong - Qincloud 1' to 'Guanghouz - UCloud' OPTIMIZED in 53.800578459ms (77.36%)
    81 20.123913 66.334302 'Hongkong - Qincloud 0' to 'Guanghouz - UCloud' OPTIMIZED in 46.2103891148ms (69.66%)
    82 178.273566 342.378604 'US West - Amazon' to 'Guanghouz - UCloud' OPTIMIZED in 164.10503814ms (47.93%)
    83 225.984885 382.897636 'Virginia - Amazon' to 'Guanghouz - UCloud' OPTIMIZED in 156.912750822ms (40.98%)
    84 5.724739 5.426122 'Guanghouz - Qincloud' to 'Guanghouz - UCloud' OK (in acceptable range 5.42612230216 < 5.7247...
    85 242.619297 421.211616 'Beauharnois - OVH' to 'Guanghouz - UCloud' OPTIMIZED in 178.592318841ms (42.40%)
    86 14.407255 7.411892 'Hongkong - Rackspace' to 'Guanghouz - UCloud' OK (in acceptable range 7.41189208633 < 14.407...
    87 71.360387 121.463964 'Tokyo - Amazon' to 'Guanghouz - UCloud' OPTIMIZED in 50.1035771675ms (41.25%)
    88 266.439424 278.120979 'Strasbourg - OVH' to 'Tokyo - Amazon' OPTIMIZED in 11.681554111ms (4.20%)
    89 95.726546 130.562108 'Beijing - Qincloud' to 'Tokyo - Amazon' OPTIMIZED in 34.8355621148ms (26.68%)
    90 74.860529 74.136101 'Singapour - Amazon' to 'Tokyo - Amazon' OK (in acceptable range 74.1361007194 < 74.860...
    91 57.655964 57.372640 'Hongkong - Qincloud 1' to 'Tokyo - Amazon' OK (in acceptable range 57.3726402878 < 57.655...
    92 54.828377 51.194863 'Hongkong - Qincloud 0' to 'Tokyo - Amazon' OK (in acceptable range 51.1948633094 < 54.828...
    93 108.687358 105.628540 'US West - Amazon' to 'Tokyo - Amazon' OK (in acceptable range 105.628539568 < 108.68...
    94 152.578827 152.403857 'Virginia - Amazon' to 'Tokyo - Amazon' OK (in acceptable range 152.403857143 < 152.57...
    95 70.801558 147.181209 'Guanghouz - Qincloud' to 'Tokyo - Amazon' OPTIMIZED in 76.3796506621ms (51.89%)
    96 178.120978 184.354986 'Beauharnois - OVH' to 'Tokyo - Amazon' OPTIMIZED in 6.23400729702ms (3.38%)
    97 74.521449 139.606777 'Guanghouz - UCloud' to 'Tokyo - Amazon' OPTIMIZED in 65.0853277031ms (46.62%)
    98 55.151833 73.062180 'Hongkong - Rackspace' to 'Tokyo - Amazon' OPTIMIZED in 17.9103465228ms (24.51%)
    99 205.582540 199.781236 'Strasbourg - OVH' to 'Singapour - Amazon' OK (in acceptable range 199.781235714 < 205.58...
    100 76.846342 70.112595 'Beijing - Qincloud' to 'Singapour - Amazon' OK (in acceptable range 70.1125950413 < 76.846...
    101 36.377196 35.139094 'Hongkong - Qincloud 1' to 'Singapour - Amazon' OK (in acceptable range 35.1390935252 < 36.377...
    102 36.252500 35.560604 'Hongkong - Qincloud 0' to 'Singapour - Amazon' OK (in acceptable range 35.5606043165 < 36.252...
    103 176.300474 175.301252 'US West - Amazon' to 'Singapour - Amazon' OK (in acceptable range 175.301251799 < 176.30...
    104 222.421165 223.566721 'Virginia - Amazon' to 'Singapour - Amazon' OPTIMIZED in 1.14555596095ms (0.51%)
    105 45.856601 184.241842 'Guanghouz - Qincloud' to 'Singapour - Amazon' OPTIMIZED in 138.385240277ms (75.11%)
    106 247.191863 269.351136 'Beauharnois - OVH' to 'Singapour - Amazon' OPTIMIZED in 22.1592724049ms (8.23%)
    107 50.988957 215.262813 'Guanghouz - UCloud' to 'Singapour - Amazon' OPTIMIZED in 164.273856428ms (76.31%)
    108 38.258377 34.939712 'Hongkong - Rackspace' to 'Singapour - Amazon' OK (in acceptable range 34.9397122302 < 38.258...
    109 74.865471 74.137086 'Tokyo - Amazon' to 'Singapour - Amazon' OK (in acceptable range 74.1370863309 < 74.865...
    110 238.208804 345.964200 'Strasbourg - OVH' to 'Hongkong - Qincloud 1' OPTIMIZED in 107.755395652ms (31.15%)
    111 38.542218 38.900467 'Beijing - Qincloud' to 'Hongkong - Qincloud 1' OPTIMIZED in 0.358248179272ms (0.92%)
    112 36.307116 35.202827 'Singapour - Amazon' to 'Hongkong - Qincloud 1' OK (in acceptable range 35.2028273381 < 36.307...
    113 1.923449 0.613331 'Hongkong - Qincloud 0' to 'Hongkong - Qinclou... OK (in acceptable range 0.613330935252 < 1.923...
    114 158.409131 163.004000 'US West - Amazon' to 'Hongkong - Qincloud 1' OPTIMIZED in 4.59486861314ms (2.82%)
    115 209.810568 210.780729 'Virginia - Amazon' to 'Hongkong - Qincloud 1' OPTIMIZED in 0.970160226105ms (0.46%)
    116 13.477819 30.705424 'Guanghouz - Qincloud' to 'Hongkong - Qincloud 1' OPTIMIZED in 17.2276056199ms (56.11%)
    117 229.279568 254.174107 'Beauharnois - OVH' to 'Hongkong - Qincloud 1' OPTIMIZED in 24.8945387975ms (9.79%)
    118 17.851478 72.304719 'Guanghouz - UCloud' to 'Hongkong - Qincloud 1' OPTIMIZED in 54.4532411636ms (75.31%)
    119 2.133971 1.995446 'Hongkong - Rackspace' to 'Hongkong - Qincloud 1' OK (in acceptable range 1.99544604317 < 2.1339...
    120 57.729732 57.445885 'Tokyo - Amazon' to 'Hongkong - Qincloud 1' OK (in acceptable range 57.4458848921 < 57.729...
    121 160.735741 160.635750 'Strasbourg - OVH' to 'US West - Amazon' OK (in acceptable range 160.63575 < 160.735741...
    122 187.261408 169.855325 'Beijing - Qincloud' to 'US West - Amazon' OK (in acceptable range 169.855325 < 187.26140...
    123 176.315312 175.277662 'Singapour - Amazon' to 'US West - Amazon' OK (in acceptable range 175.277661871 < 176.31...
    124 156.863964 162.888799 'Hongkong - Qincloud 1' to 'US West - Amazon' OPTIMIZED in 6.02483479304ms (3.70%)
    125 160.903761 169.578547 'Hongkong - Qincloud 0' to 'US West - Amazon' OPTIMIZED in 8.67478589302ms (5.12%)
    126 76.815309 83.863021 'Virginia - Amazon' to 'US West - Amazon' OPTIMIZED in 7.04771207605ms (8.40%)
    127 172.103768 284.596410 'Guanghouz - Qincloud' to 'US West - Amazon' OPTIMIZED in 112.492641956ms (39.53%)
    128 70.823345 70.792993 'Beauharnois - OVH' to 'US West - Amazon' OK (in acceptable range 70.7929928571 < 70.823...
    129 174.915174 359.936719 'Guanghouz - UCloud' to 'US West - Amazon' OPTIMIZED in 185.021545511ms (51.40%)
    130 163.996109 157.283007 'Hongkong - Rackspace' to 'US West - Amazon' OK (in acceptable range 157.283007194 < 163.99...
    131 108.594942 105.582734 'Tokyo - Amazon' to 'US West - Amazon' OK (in acceptable range 105.582733813 < 108.59...
    In [30]:
    df_packetlost_statistic = pd.concat([go_packetloss_dataframe, hr_packetloss_dataframe, 
                                         bho_packetloss_dataframe, bq_packetloss_dataframe,
                                         gq_packetloss_dataframe, va_packetloss_dataframe, 
                                         hq0_packetloss_dataframe, gu_packetloss_dataframe,
                                         ta_packetloss_dataframe, sa_packetloss_dataframe,
                                         hq1_packetloss_dataframe, wa_packetloss_dataframe
                                        ], ignore_index=True)
    
    df_packetlost_statistic
    
    Out[30]:
    grandenet_ipv6_packet_lost internet_ipv4_packet_lost name state
    0 1.147541 2.601626 'Beijing - Qincloud' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    1 0.000000 0.851064 'Singapour - Amazon' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    2 0.071429 0.127660 'Hongkong - Qincloud 1' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    3 0.785714 0.212766 'Hongkong - Qincloud 0' to 'Strasbourg - OVH' OK (less them 1% diference is considered same)
    4 0.215827 0.070922 'US West - Amazon' to 'Strasbourg - OVH' OK (less them 1% diference is considered same)
    5 0.000000 0.000000 'Virginia - Amazon' to 'Strasbourg - OVH' OK (Same Packet Lost rate)
    6 0.214286 18.652482 'Guanghouz - Qincloud' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    7 0.070922 0.281690 'Beauharnois - OVH' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    8 0.785714 26.659574 'Guanghouz - UCloud' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    9 1.357143 1.631206 'Hongkong - Rackspace' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    10 0.071429 0.283688 'Tokyo - Amazon' to 'Strasbourg - OVH' OPTIMIZED (Better Packet Lost rate)
    11 0.141844 1.549296 'Strasbourg - OVH' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    12 0.163934 0.327869 'Beijing - Qincloud' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    13 0.000000 0.780142 'Singapour - Amazon' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    14 0.000000 0.000000 'Hongkong - Qincloud 1' to 'Hongkong - Rackspace' OK (Same Packet Lost rate)
    15 0.000000 0.000000 'Hongkong - Qincloud 0' to 'Hongkong - Rackspace' OK (Same Packet Lost rate)
    16 2.517986 0.851064 'US West - Amazon' to 'Hongkong - Rackspace' BAD (Worst Packet Lost rate)
    17 1.276596 0.000000 'Virginia - Amazon' to 'Hongkong - Rackspace' BAD (Worst Packet Lost rate)
    18 0.000000 0.141844 'Guanghouz - Qincloud' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    19 1.134752 1.760563 'Beauharnois - OVH' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    20 0.071429 1.063830 'Guanghouz - UCloud' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    21 0.000000 2.198582 'Tokyo - Amazon' to 'Hongkong - Rackspace' OPTIMIZED (Better Packet Lost rate)
    22 0.780142 0.049296 'Strasbourg - OVH' to 'Beauharnois - OVH' OK (less them 1% diference is considered same)
    23 1.074380 0.573770 'Beijing - Qincloud' to 'Beauharnois - OVH' OK (less them 1% diference is considered same)
    24 0.000000 0.212766 'Singapour - Amazon' to 'Beauharnois - OVH' OPTIMIZED (Better Packet Lost rate)
    25 0.000000 0.141844 'Hongkong - Qincloud 1' to 'Beauharnois - OVH' OPTIMIZED (Better Packet Lost rate)
    26 0.000000 0.000000 'Hongkong - Qincloud 0' to 'Beauharnois - OVH' OK (Same Packet Lost rate)
    27 0.143885 0.000000 'US West - Amazon' to 'Beauharnois - OVH' OK (less them 1% diference is considered same)
    28 0.000000 0.000000 'Virginia - Amazon' to 'Beauharnois - OVH' OK (Same Packet Lost rate)
    29 0.214286 10.092199 'Guanghouz - Qincloud' to 'Beauharnois - OVH' OPTIMIZED (Better Packet Lost rate)
    30 1.071429 18.078014 'Guanghouz - UCloud' to 'Beauharnois - OVH' OPTIMIZED (Better Packet Lost rate)
    31 0.857143 1.638298 'Hongkong - Rackspace' to 'Beauharnois - OVH' OPTIMIZED (Better Packet Lost rate)
    32 0.000000 0.141844 'Tokyo - Amazon' to 'Beauharnois - OVH' OPTIMIZED (Better Packet Lost rate)
    33 3.475177 3.450704 'Strasbourg - OVH' to 'Beijing - Qincloud' OK (less them 1% diference is considered same)
    34 1.928571 3.049645 'Singapour - Amazon' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    35 1.857143 2.127660 'Hongkong - Qincloud 1' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    36 0.857143 1.560284 'Hongkong - Qincloud 0' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    37 1.438849 3.404255 'US West - Amazon' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    38 3.120567 6.478873 'Virginia - Amazon' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    39 0.000000 0.425532 'Guanghouz - Qincloud' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    40 1.985816 3.197183 'Beauharnois - OVH' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    41 0.000000 0.212766 'Guanghouz - UCloud' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    42 0.142857 0.709220 'Hongkong - Rackspace' to 'Beijing - Qincloud' OPTIMIZED (Better Packet Lost rate)
    43 1.357143 0.765957 'Tokyo - Amazon' to 'Beijing - Qincloud' OK (less them 1% diference is considered same)
    44 1.347518 24.443662 'Strasbourg - OVH' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    45 0.000000 0.000000 'Beijing - Qincloud' to 'Guanghouz - Qincloud' OK (Same Packet Lost rate)
    46 0.214286 0.212766 'Singapour - Amazon' to 'Guanghouz - Qincloud' OK (less them 1% diference is considered same)
    47 0.214286 1.134752 'Hongkong - Qincloud 1' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    48 0.642857 1.134752 'Hongkong - Qincloud 0' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    49 2.086331 14.014184 'US West - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    50 1.134752 10.464789 'Virginia - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    51 0.354610 22.147887 'Beauharnois - OVH' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    52 0.142857 0.070922 'Guanghouz - UCloud' to 'Guanghouz - Qincloud' OK (less them 1% diference is considered same)
    53 0.714286 0.000000 'Hongkong - Rackspace' to 'Guanghouz - Qincloud' OK (less them 1% diference is considered same)
    54 1.000000 8.865248 'Tokyo - Amazon' to 'Guanghouz - Qincloud' OPTIMIZED (Better Packet Lost rate)
    55 0.070922 0.000000 'Strasbourg - OVH' to 'Virginia - Amazon' OK (less them 1% diference is considered same)
    56 0.491803 0.975610 'Beijing - Qincloud' to 'Virginia - Amazon' OPTIMIZED (Better Packet Lost rate)
    57 0.000000 0.070922 'Singapour - Amazon' to 'Virginia - Amazon' OPTIMIZED (Better Packet Lost rate)
    58 0.000000 2.553191 'Hongkong - Qincloud 1' to 'Virginia - Amazon' OPTIMIZED (Better Packet Lost rate)
    59 0.000000 0.000000 'Hongkong - Qincloud 0' to 'Virginia - Amazon' OK (Same Packet Lost rate)
    60 0.000000 0.000000 'US West - Amazon' to 'Virginia - Amazon' OK (Same Packet Lost rate)
    61 0.071429 0.992908 'Guanghouz - Qincloud' to 'Virginia - Amazon' OPTIMIZED (Better Packet Lost rate)
    62 0.000000 0.000000 'Beauharnois - OVH' to 'Virginia - Amazon' OK (Same Packet Lost rate)
    63 0.357143 21.652482 'Guanghouz - UCloud' to 'Virginia - Amazon' OPTIMIZED (Better Packet Lost rate)
    64 0.571429 0.070922 'Hongkong - Rackspace' to 'Virginia - Amazon' OK (less them 1% diference is considered same)
    65 0.000000 0.000000 'Tokyo - Amazon' to 'Virginia - Amazon' OK (Same Packet Lost rate)
    66 1.631206 0.774648 'Strasbourg - OVH' to 'Hongkong - Qincloud 0' OK (less them 1% diference is considered same)
    67 0.330579 0.983607 'Beijing - Qincloud' to 'Hongkong - Qincloud 0' OPTIMIZED (Better Packet Lost rate)
    68 0.000000 0.000000 'Singapour - Amazon' to 'Hongkong - Qincloud 0' OK (Same Packet Lost rate)
    69 0.000000 0.000000 'Hongkong - Qincloud 1' to 'Hongkong - Qinclou... OK (Same Packet Lost rate)
    70 0.575540 0.000000 'US West - Amazon' to 'Hongkong - Qincloud 0' OK (less them 1% diference is considered same)
    71 0.000000 0.000000 'Virginia - Amazon' to 'Hongkong - Qincloud 0' OK (Same Packet Lost rate)
    72 0.857143 0.851064 'Guanghouz - Qincloud' to 'Hongkong - Qincloud 0' OK (less them 1% diference is considered same)
    73 0.000000 0.492958 'Beauharnois - OVH' to 'Hongkong - Qincloud 0' OPTIMIZED (Better Packet Lost rate)
    74 0.142857 4.680851 'Guanghouz - UCloud' to 'Hongkong - Qincloud 0' OPTIMIZED (Better Packet Lost rate)
    75 0.000000 0.000000 'Hongkong - Rackspace' to 'Hongkong - Qincloud 0' OK (Same Packet Lost rate)
    76 0.000000 0.141844 'Tokyo - Amazon' to 'Hongkong - Qincloud 0' OPTIMIZED (Better Packet Lost rate)
    77 0.709220 17.605634 'Strasbourg - OVH' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    78 0.000000 0.409836 'Beijing - Qincloud' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    79 0.785714 0.709220 'Singapour - Amazon' to 'Guanghouz - UCloud' OK (less them 1% diference is considered same)
    80 0.357143 2.808511 'Hongkong - Qincloud 1' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    81 0.071429 4.326241 'Hongkong - Qincloud 0' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    82 3.237410 21.588652 'US West - Amazon' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    83 0.780142 23.556338 'Virginia - Amazon' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    84 0.000000 0.000000 'Guanghouz - Qincloud' to 'Guanghouz - UCloud' OK (Same Packet Lost rate)
    85 3.191489 20.669014 'Beauharnois - OVH' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    86 0.928571 1.560284 'Hongkong - Rackspace' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    87 0.857143 8.297872 'Tokyo - Amazon' to 'Guanghouz - UCloud' OPTIMIZED (Better Packet Lost rate)
    88 0.070922 0.352113 'Strasbourg - OVH' to 'Tokyo - Amazon' OPTIMIZED (Better Packet Lost rate)
    89 0.826446 0.327869 'Beijing - Qincloud' to 'Tokyo - Amazon' OK (less them 1% diference is considered same)
    90 0.000000 0.000000 'Singapour - Amazon' to 'Tokyo - Amazon' OK (Same Packet Lost rate)
    91 0.000000 0.000000 'Hongkong - Qincloud 1' to 'Tokyo - Amazon' OK (Same Packet Lost rate)
    92 0.142857 0.141844 'Hongkong - Qincloud 0' to 'Tokyo - Amazon' OK (less them 1% diference is considered same)
    93 0.000000 0.000000 'US West - Amazon' to 'Tokyo - Amazon' OK (Same Packet Lost rate)
    94 0.000000 0.000000 'Virginia - Amazon' to 'Tokyo - Amazon' OK (Same Packet Lost rate)
    95 0.214286 10.567376 'Guanghouz - Qincloud' to 'Tokyo - Amazon' OPTIMIZED (Better Packet Lost rate)
    96 0.070922 0.211268 'Beauharnois - OVH' to 'Tokyo - Amazon' OPTIMIZED (Better Packet Lost rate)
    97 0.785714 9.716312 'Guanghouz - UCloud' to 'Tokyo - Amazon' OPTIMIZED (Better Packet Lost rate)
    98 0.000000 2.553191 'Hongkong - Rackspace' to 'Tokyo - Amazon' OPTIMIZED (Better Packet Lost rate)
    99 0.212766 0.985915 'Strasbourg - OVH' to 'Singapour - Amazon' OPTIMIZED (Better Packet Lost rate)
    100 0.245902 1.056911 'Beijing - Qincloud' to 'Singapour - Amazon' OPTIMIZED (Better Packet Lost rate)
    101 0.000000 0.000000 'Hongkong - Qincloud 1' to 'Singapour - Amazon' OK (Same Packet Lost rate)
    102 0.000000 0.000000 'Hongkong - Qincloud 0' to 'Singapour - Amazon' OK (Same Packet Lost rate)
    103 0.000000 0.000000 'US West - Amazon' to 'Singapour - Amazon' OK (Same Packet Lost rate)
    104 0.000000 0.000000 'Virginia - Amazon' to 'Singapour - Amazon' OK (Same Packet Lost rate)
    105 0.214286 0.141844 'Guanghouz - Qincloud' to 'Singapour - Amazon' OK (less them 1% diference is considered same)
    106 0.070922 0.140845 'Beauharnois - OVH' to 'Singapour - Amazon' OPTIMIZED (Better Packet Lost rate)
    107 0.071429 0.638298 'Guanghouz - UCloud' to 'Singapour - Amazon' OPTIMIZED (Better Packet Lost rate)
    108 0.000000 1.347518 'Hongkong - Rackspace' to 'Singapour - Amazon' OPTIMIZED (Better Packet Lost rate)
    109 0.000000 0.000000 'Tokyo - Amazon' to 'Singapour - Amazon' OK (Same Packet Lost rate)
    110 1.134752 0.492958 'Strasbourg - OVH' to 'Hongkong - Qincloud 1' OK (less them 1% diference is considered same)
    111 0.991736 1.229508 'Beijing - Qincloud' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    112 0.071429 0.000000 'Singapour - Amazon' to 'Hongkong - Qincloud 1' OK (less them 1% diference is considered same)
    113 0.000000 0.000000 'Hongkong - Qincloud 0' to 'Hongkong - Qinclou... OK (Same Packet Lost rate)
    114 0.000000 0.000000 'US West - Amazon' to 'Hongkong - Qincloud 1' OK (Same Packet Lost rate)
    115 0.000000 2.957746 'Virginia - Amazon' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    116 0.285714 0.780142 'Guanghouz - Qincloud' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    117 0.070922 0.633803 'Beauharnois - OVH' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    118 0.000000 1.631206 'Guanghouz - UCloud' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    119 0.000000 0.070922 'Hongkong - Rackspace' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    120 0.000000 0.070922 'Tokyo - Amazon' to 'Hongkong - Qincloud 1' OPTIMIZED (Better Packet Lost rate)
    121 0.141844 0.000000 'Strasbourg - OVH' to 'US West - Amazon' OK (less them 1% diference is considered same)
    122 0.491803 0.327869 'Beijing - Qincloud' to 'US West - Amazon' OK (less them 1% diference is considered same)
    123 0.000000 0.000000 'Singapour - Amazon' to 'US West - Amazon' OK (Same Packet Lost rate)
    124 0.000000 0.000000 'Hongkong - Qincloud 1' to 'US West - Amazon' OK (Same Packet Lost rate)
    125 0.928571 0.000000 'Hongkong - Qincloud 0' to 'US West - Amazon' OK (less them 1% diference is considered same)
    126 0.070922 0.000000 'Virginia - Amazon' to 'US West - Amazon' OK (less them 1% diference is considered same)
    127 1.642857 16.439716 'Guanghouz - Qincloud' to 'US West - Amazon' OPTIMIZED (Better Packet Lost rate)
    128 0.000000 0.140845 'Beauharnois - OVH' to 'US West - Amazon' OPTIMIZED (Better Packet Lost rate)
    129 1.785714 23.531915 'Guanghouz - UCloud' to 'US West - Amazon' OPTIMIZED (Better Packet Lost rate)
    130 3.357143 0.921986 'Hongkong - Rackspace' to 'US West - Amazon' BAD (Worst Packet Lost rate)
    131 0.000000 0.000000 'Tokyo - Amazon' to 'US West - Amazon' OK (Same Packet Lost rate)

    我们可以有多快?是否有速度限制?

    我们监测到的实验结果超出了我们的最高设想。我们发现与标准 IPv4 相比,GrandeNet 整体降低网络延迟15%到30%, 数据流失降到少于1% (5-10倍的提升)。

    考虑到被监测的服务器之间的所有独立链接和 ping 响应时间 (网络延迟), 50%和70%的连接都通过 GrandeNet 优化了,45%到65%的连接数据流失都得到有效降低。

    由于 GrandeNet 还没有使用一个完整的网格配置,所以我们同时还观察到使用 GrandeNet IPv6 时,一小部分连接的质量下降。但是这个问题可以通过创建额外的服务器之间的直接通道来解决,监测结果表明,它要比标准 IPv4 更快。通过创建直接通道,我们可以稳定网格质量,因为它只包含优化了的或 GrandeNet 上有同样速度的链接 (额外的直接通道)。

    In [31]:
    # Global Average result
    
    ipv4_mean = df_average_statistic["internet_ipv4"].mean() 
    ipv6_mean = df_average_statistic["grandenet_ipv6"].mean()
    
    display("IPv4 Final Average from all links: %.2fms" % ipv4_mean)
    display("IPv6 Final Average from all links: %.2fms" % ipv6_mean)
    
    if ipv4_mean > ipv6_mean:
        display("Grandent Optimized the network Globally in %.2f%% in average for each ping response." % \
                (((ipv4_mean - ipv6_mean)/ipv4_mean)*100))
    elif ipv4_mean == ipv6_mean:
        display("<h1>No Optimisation found.</h1>")
    elif ipv4_mean < ipv6_mean:
        display("Grandenet is making things worst in %sms, please review the configuration." % (ipv6_mean - ipv4_mean))
    
    'IPv4 Final Average from all links: 161.75ms'
    'IPv6 Final Average from all links: 127.46ms'
    'Grandent Optimized the network Globally in 21.20% in average for each ping response.'
    In [32]:
    # Number of optimisations
    total = len(df_average_statistic)
    optimized = len(df_average_statistic[df_average_statistic["internet_ipv4"] > df_average_statistic["grandenet_ipv6"]])
    
    worst = len(df_average_statistic[
        df_average_statistic.apply(lambda x: x["internet_ipv4"] < x["grandenet_ipv6"] - max(20, x["internet_ipv4"]*0.1), axis=1)])
    
    
    display("Total Number of Links tested: %s" % total)
    display("Number of Optimized Links: %s (%.2f%%)" % (optimized, (float(optimized)/total)*100))
    display("Number of links which becomes worst: %s (%.2f%%)" % (worst, (float(worst)/total)*100))
    display("Number of links which unchanged : %s (%.2f%%)" % ((total-(optimized+worst)), (float(total-(optimized+worst))/total)*100))
    
    'Total Number of Links tested: 132'
    'Number of Optimized Links: 78 (59.09%)'
    'Number of links which becomes worst: 0 (0.00%)'
    'Number of links which unchanged : 54 (40.91%)'
    In [33]:
    ipv4_package_lost_rate = df_packetlost_statistic["internet_ipv4_packet_lost"].mean()
    ipv6_package_lost_rate = df_packetlost_statistic["grandenet_ipv6_packet_lost"].mean()
    
    display("Average of Packet Lost Rate per link using Internet (IPv4): %.2f%%" % ipv4_package_lost_rate)
    display("Average of Packet Lost Rate per link using Grandenet (IPv6): %.2f%%" % ipv6_package_lost_rate)
    
    
    if ipv4_package_lost_rate > ipv6_package_lost_rate:
        display("Grandent Optimized the network Globally in %.2f%% less packet lost in average, it is %.2f times better." % \
                (ipv4_package_lost_rate - ipv6_package_lost_rate, (float(ipv4_package_lost_rate/ipv6_package_lost_rate))))
    elif ipv4_package_lost_rate == ipv6_package_lost_rate:
        display("No Optimisation found.")
    elif ipv4_package_lost_rate < ipv6_package_lost_rate:
        display("Grandenet is making things worst in %.2f%% , please review the configuration." % (ipv6_package_lost_rate - ipv4_package_lost_rate))
    
        
        
    
    'Average of Packet Lost Rate per link using Internet (IPv4): 3.12%'
    'Average of Packet Lost Rate per link using Grandenet (IPv6): 0.52%'
    'Grandent Optimized the network Globally in 2.61% less packet lost in average, it is 6.05 times better.'
    In [34]:
    dps = df_packetlost_statistic
    
    total = len(dps)
    optimized = len(dps[dps["internet_ipv4_packet_lost"] > dps["grandenet_ipv6_packet_lost"]])
    worst = len(dps[(dps["internet_ipv4_packet_lost"] < dps["grandenet_ipv6_packet_lost"])]
                    [(dps["grandenet_ipv6_packet_lost"] - dps["internet_ipv4_packet_lost"]) > 1])
    same = len(dps[(dps["internet_ipv4_packet_lost"] == dps["grandenet_ipv6_packet_lost"])])
    
    same += len(dps[(dps["grandenet_ipv6_packet_lost"] - dps["internet_ipv4_packet_lost"]) < 1]
                     [(dps["grandenet_ipv6_packet_lost"] > dps["internet_ipv4_packet_lost"])])
    
    display("Total Number of Links tested: %s" % total)
    display("Number of Optimized links with less packet lost: %s (%.2f%%)" % (optimized, (float(optimized)/total)*100))
    display("Number of links which becomes worst: %s (%.2f%%)" % (worst, (float(worst)/total)*100))
    display("Number of links which unchanged : %s (%.2f%%)" % (same, (float(same)/total)*100))
    
    'Total Number of Links tested: 132'
    'Number of Optimized links with less packet lost: 75 (56.82%)'
    'Number of links which becomes worst: 3 (2.27%)'
    'Number of links which unchanged : 54 (40.91%)'

    总结

    根据以上例子我们可以发现,相比标准 IPv4 连接而言,GrandeNet IPv6 降低了15-30%的网络延迟,数据流失降到低于1% (5-10倍的提升)。50-70%的连接可以被优化,45-65%的连接可以减少数据丢失。GrandeNet IPv6 最终的平均响应时间127.46毫秒,远低于默认的IPv4平均响应时间161.75毫秒。

    使用 GrandeNet,整体21.20%的 pings 都被优化了,数据丢失从3.12% (IPv4) 降至0.52 (IPv6), 说明监测和网络连接优化可以带来显著的效益。创建工具自动化了我们的实验,并为用户提供了易于使用的应用,实时展示路径情况以及连接问题将是下一个研究方向。