服务器逻辑开发设计中,调度算法随处可见,资源的调度,请求的分配,负载均衡的策略等等都喝调度算法相关。
1. 轮询
轮询是一个非常简单的调度算法那,轮询是指将请求一次分配到各个服务节点,从第一个节点开始,依次将请求分配到最后一个节点,之后再开始下一个循环,最终所有的请求会均摊到每一个节点上,假设每个请求的消耗一致,那么轮询调度就是最平衡的调度算法。
2. 加权轮询
有时候服务节点的性能与配置各不相同,处理能力也不一样,因此轮询的方式来进行调度就不太合适了,这里引入一种算法,是根据节点处理能力的强弱而去配置不同的权重值,采用加权轮询的方式进行调度。
加权轮询可以描述为:
1. 调度节点记录所有服务节点当前权重值,初始化为配置对应值
2. 当有请求需要调度时,每次分配选择当前权重最高的节点,同时被选择的节点权重值减一
3. 若所有节点权重值都为0,则重置为初始化时配置的权重值。
最终所有的请求都会按照各个节点的权重值成比例的分配到各个服务节点上。
3. 平衡权重轮询
加权轮询算法比较容易造成某个服务街店短时间内呗集中调用,导致瞬时压力过大,权重高的节点会先被选中直至达到权重次数才会选择下一个节点,请求连续的分配在同一个节点上的情况。
为了应对这种问题,平滑权重轮询实现了基于权重的平滑轮询算法。所谓平滑,就是在一段时间内,不仅服务节点被选择次数的分布和它们的权重一致,而且调度算法还能比较均匀的选择节点,不会在一段时间之内集中只选择某一权重较高