在多台机器实现负载均衡的时候,经常用到轮询调度算法(Round-Robin Scheduling)。
轮询调度算法就是以循环的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。
算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
1、算法流程:
假设有一组服务器 S = {S0, S1, …, Sn-1} ,有相应的权重,变量i表示上次选择的服务器,权值cw初始化为0,i初始化为-1 ,当第一次的时候取权值取最大的那个服务器,通过权重的不断递减,寻找适合的服务器返回,直到轮询结束,权值返回为0
2、代码实现:
/*
* 权重轮询调度算法(Weighted Round-Robin Scheduling)
* 在多台机器实现负载均衡的时候,存在调度分配的问题.
* 如果服务器的配置的处理能力都一致的话,平均轮询分配可以直接解决问题,然而有些时候机器的处理能力是不一致的.
* 假如有2台机器 A和B , A的处理能力是B的2倍,则A的权重为2,B的权重为1.权值高的服务器先收到的连接,
* 权值高的服务器比权值低的服务器处理更多的连接,相同权值的服务器处理相同数目的连接数。
* */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <vector>
using namespace std;
#define SERVER_COUNT 10
#define RAND_WEIGHT 10
#defi