• 使用Numpy验证Google GRE的随机选择算法


    最近在读《SRE Google运维解密》第20章提到数据中心内部服务器的负载均衡方法,文章对比了几种负载均衡的算法,其中随机选择算法,非常适合用 Numpy 模拟并且用 Matplotlib 画图,下面是我的代码:

    # 使用 numpy 模拟 GRE 中的随机选择算法,并使用 pyplot绘图
    
    import numpy as np
    from numpy import random
    
    r = random.randint(1,301,size = (300,225) )
    a = {}
    for i in r:
        for j in i:
            if(j in a.keys()):
                a[j] = a[j] + 1
            else:
                a[j] = 0
    
    height = []
    z = a.values()
    for i in z:
        height.append(i)
    
    height.sort()
    x = np.arange(1,301)
    
    plt.bar(x,height)
    plt.axis([0,301,0,280])
    plt.grid(True)
    plt.title("75%子集,225个后端")
    

    整个模拟的思路就是首先随机生成一个二维数组,然后再统计每台服务器被选中的次数,并对次数排序并画图,然后就能够出来书中的图的样式。整个代码感觉还是有些繁琐,如果有更好的想法的朋友,欢迎与我沟通改进。

    刚开始还想用直方图来绘制,仔细看了之后发现图上的并不是直方图,直方图能够反映每台前端连接后端服务器的分布情况,但是未经过排序,所以无法明显的看出最大和最小的区别。所以要对数据做一下处理,排序后再重新做图。

    我按照三个参数模拟了一下,感觉随机选择算法不管子集的大小如何,负载的情况都不是很均衡。子集小的情况下,能够偏出平均值50%,子集大的时候(75%)仍能偏出平均值15%左右。

    本文为作者原创,如果您觉得本文对您有帮助,请随意打赏,您的支持将鼓励我继续创作。

    参考资料:
    1、SRE Google 运维解密
    2、Python中plt.hist参数详解
    3、Matplotlib
    4、彻底解决matplotlib中文乱码问题
    5、numpy中的随机数模块

  • 相关阅读:
    JS中数组的sort()排序
    清除浮动方法
    浏览器兼容问题
    前端切图
    设置页面默认为繁体字
    7月计划
    css的层叠和继承
    Flex 布局教程:语法篇
    轮播图淡入淡出的js和jquery的效果
    接口调用async/await
  • 原文地址:https://www.cnblogs.com/cocowool/p/8716297.html
Copyright © 2020-2023  润新知