使用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中的随机数模块

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法工程师

实例介绍TensorFlow的输入流水线

在训练模型时,我们首先要处理的就是训练数据的加载与预处理的问题,这里称这个过程为输入流水线(input pipelines,或输入管道,[参考:https://...

36960
来自专栏漫漫深度学习路

pytorch学习笔记(十三):backward过程的底层实现解析

博主水平有限,如有错误,请不吝指出。 pytorch源码注释,欢迎 pr,提 issue 和 star 当我们使用 pytorch 的 python 的接口编写...

685100
来自专栏信数据得永生

《Scikit-Learn与TensorFlow机器学习实用指南》第9章 启动并运行TensorFlow

609110
来自专栏Python小屋

详解Python GUI版24点游戏制作过程

本文作者为浙江温州永嘉县教师发展中心应根球老师,电子邮箱:ycicada@163.com。 传统用扑克牌算24点游戏用于小学低中段学生训练四则运算效果不错,也可...

56350
来自专栏腾讯AlloyTeam的专栏

png的故事:获取图片信息和像素内容

现在时富媒体时代,图片的重要性对于数十亿互联网用户来说不言而喻,图片本身就是像素点阵的合集,但是为了如何更快更好的存储图片而诞生了各种各样的图片格式:jpeg、...

1.9K00
来自专栏简书专栏

基于tensorflow、CNN、清华数据集THUCNews的新浪新闻文本分类

tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。 CNN是convolutional neural netwo...

1.8K10
来自专栏PingCAP的专栏

Succinct Data Structure

最近看了一篇论文 SuRF: Practical Range Query Filtering with Fast Succinct Tries,里面提到使用一种...

39660
来自专栏深度学习计算机视觉

pytorch demo 实践

相关环境 python opencv pytorch ubuntu 14.04 pytorch 基本内容 60分钟快速入门,参考:https://blog...

76860
来自专栏深度学习之tensorflow实战篇

Python基础整理操作积累

Python编程积累 列表内容 Python基础 for变化量的灵活应用 for x,y in [[0,1],[0,2],[1,2]]: d...

359100
来自专栏知识分享

当年参加飞思卡尔自己写的双线识别算法

原理 先找到一个白点A,然后向右找到黑点,记录黑点的位置,以当前黑点的竖坐标位置向上判断,上面的点是什么点,如果为黑点向左找白点,如果为白点向右找黑点(找到边界...

30670

扫码关注云+社区

领取腾讯云代金券