负载均衡算法知识总结

负载均衡之随机算法(Random)

第1个情况:

假定有10个性能相同的服务器,随机生成随机数(1-10),来选择去使用哪一个服务器。

第2个情况:

假定有10个服务器,每个服务器都有权重(表示服务器的性能),10个服务器的总权重之和假设为100。

将这10个服务器根据权重放在x坐标轴上,权重越大,服务器在坐标轴上的范围越大,刚好组成了x1-x100,比如第五个服务器的范围是x36-x77。

生成1-100的随机数,如果随机数是55,就使用第五个服务器。

ps:还可以对这种算法优化---->如果这10个服务器权重一样,就执行第1种情况,如果不一样,就执行第2种情况。

负载均衡之轮询算法(RoundRobin)

1)服务器轮着被使用,第一个请求交给第一个服务器,下一个请求交给第二个服务器。。。。以此类推

2)针对上一个算法优化。根据服务器的性能给服务器加上权重,类似于随机算法的第2种情况,比如第一个服务器的范围是x1-x3,第二个服务器的范围是x4-x10。此时,前三个请求都会交给第一个服务器,第四个请求才会交给第二个服务器。。。以此类推。

3)针对2)的算法,有一个问题。比如有三个服务器A(w=5)B(w=1)C(w=1),假设有7个请求,根据上一个算法,服务器的使用顺序是AAAAABC。如果能让服务器的使用顺序改成AABACAA,从结果上来看后一个顺序肯定比前一个顺序效果要好。这就是针对2)算法做的优化----->

平滑加权轮询算法

假设有三个服务器A(w=5)B(w=1)C(w=1),服务器的属性有三个(ip,weight,currentweight)。相较于3)的轮询算法,多了一个动态权重的属性。

上图是平滑加权轮询算法的过程。

1、计算出动态权重(动态权重+静态权重)。

2、在动态权重中找到权重最大的ip,即选中该服务器处理请求。

3、更新动态权重(动态权重中最大的权重-总权重),如果动态权重为(0,0,0),就结束,否则重复1,2,3的操作。

一致性哈希负载均衡算法

问题:假设有三个服务器ABC,现在有一个用户发送一个登录请求给了A服务器,A服务器记录了这个用户的session,如果按照轮询算法,下一个请求给B服务器,但B服务器没有用户的session,就会要求用户再次登录。所有我们需要让一个用户的所有请求都交给一个服务器。一致性哈希负载均衡算法就是解决这个问题的。

让每个用户的ip计算出唯一的hashcode,而这个hashcode对应唯一的服务器。在每次代理服务器接到请求的时候,根据用户ip计算出hashcode,如果当前的hashcode已经分配了服务器,就把请求给那个服务器;如果没有,就给它分配一个服务器。

                                   

 

发布了247 篇原创文章 · 获赞 53 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/105406464