分布式系统如何负载均衡,如何确定访问的资源在哪个服务器上?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38789941/article/details/83619133

今天看了一篇方志朋 面试美团的面经,感受颇深,特在此汇总,以提升自己。

思考:分布式系统如何负载均衡,如何确定访问的资源在哪个服务器上?

负载均衡将请求派发到网络中的一个或多个节点上进行处理。 
硬件负载均衡,即通过在服务器间安装专门的硬件来进行负载均衡工作 
软件负载均衡,通过服务器上安装的软件来对请求进行分配派发。

负载均衡策略

1.轮询

给每个请求标记序号,之后把请求依次分发到服务器节点上。
适用集群各节点提供服务能力相等,且无状态的场景。
但是实际情况中各个节点所能提供服务的能力并不相同。
所以加权轮询,对每个节点加上了权重属性。
但是合适的权重难以随实际情况的改变而改变。

2.随机

每次请求随机分发给服务器节点。
缺点是在同一截面上发生碰撞的概率比较高;
在非对等集群组网,或者硬件配置差异较大时,各节点负载不均匀
通过加权随机进行提升。

 3.服务调用时延(最小响应时间)

根据每个服务器处理请求的时间和平均时间的差值,来动态调整分发权重,
可以保证服务延时大的服务器,处理更少的请求。
该策略可以保证处理请求能力强的服务器接收到更多的请求。
通过动态权重缩小服务调用时延的震荡范围,是所有请求的处理时间接近平均值。
但计算平均响应时间会耗费时间,滞缓请求的分发。
改进地只计算最近若干次的平均时间的策略。

4.一次性哈希 

哈希值是32位的正整数,其值的分布范围按照一定规则分配给多个虚拟节点;
虚拟节点数量至少应是实际节点的两倍;
实际节点通过哈希值再对虚拟节点进行瓜分;
对“请求”取哈希值,分发到相应虚拟节点,虚拟节点对应的实际节点来处理“请求”。

相同参数的请求,总是发送到同一个服务提供者。
当某一台服务器宕机时,原本发往该节点的请求,基于虚拟节点,平摊到其他提供者,
从而避免引起集群剧烈变动。

5.粘滞链接

主要适用于有状态的服务,同一客户端每次访问,处理请求的服务器为同一台。
客户端首次和服务端交互时,将链路与相应处理的服务器进行绑定。
当原有服务器宕机后,返回不可用消息,服务端重新为客户端绑定服务器。

猜你喜欢

转载自blog.csdn.net/qq_38789941/article/details/83619133