最近重温了下nginx
,看到负载均衡调度算法默认是round robin
,也就是轮询调度算法。
算法本身很简单,轮着一个一个来,非常简单高效公平的调度算法。
简单的算法实现:
int datas = [1, 2, 3, 4, 5];
int size = 5;
...
...
...
int GetNextData()
{
static int curIdx = 0;
int nextData = datas[curIdx];
curIdx = (curIdx + 1) % size;
return nextData;
}
突然发现了一直被忽视的问题,为啥叫 round robin
?
robin
明明是旅鸫,亦称美洲知更鸟,与轮询一点关系都没有。在查询资料后发现这个单词来源挺有意思的,这里分享给大家。
round robin
来源于法语ruban rond(round ribbon)
,意思是环形丝带。
在17、18世纪时法国农民希望以请愿的方式抗议国王时,通常君主的反应是将请愿书中最前面的两至三人逮捕并处决,所以很自然地没有人希望自己的名字被列在前面。为了对付这种专制的报复,人们在请愿书底部把名字签成一个圈(如同一条环状的带子),这样就找不出带头大哥,于是只能对所有参与者进行同样的惩罚。1731年,英国皇家海军最初使用了这个名词,以循环顺序签署请愿书,这样就没法找到带头大哥了。
非常贴切有木有,后端服务器轮着来处理请求,一个个都不要抢,都要出来接受处决。