负载均衡算法分为两种:一种为静态负载均衡,另一种为动态负载均衡
静态负载均衡即将用户的发送到服务器但是并不考虑服务器的性能以及相关指标。
优点:静态负载均衡优点在于简单,容易操作。
缺点:静态负载均衡的缺点就很明显,服务器的性能好不好,是否能够处理请求等都未考虑,所以静态负载的适应性和精确性都比较差。
静态负载均衡算法:
轮询:简单的轮询就是将用户的请求先发送到负载均衡器上,在用负载均衡器按照一定的顺序依次将请求发送到服务器上
上图就是简单轮询的过程,很简单就可以看出请求是由上到下依次循环发送到服务器端。
缺点:倘若没有实时监控这些请求的传递就会很容易导致服务器过载,从而引发一系列的问题。
粘性轮询法:粘性轮询法是在简单轮询的基础上修改,即将用户的请求与服务器绑定,即同一用户的请求都是发送到一个服务器上,这样就可以使得服务器拥有相关的数据,从而提供性能。但是由于用户都是随机分配给服务器上,所以就会很容易导致负载不均衡。
加权轮询法:即人为的将服务器设置权重值,权重值高的服务器接收更多的请求,权重低的则接收更少的请求,这样我们就可以通过人工的方法使得更好的服务器接收更多的数据,从而避免服务器的过载。但显然的缺点在于权重值必须认为的手动调整,在适应变化上不够灵活。
一致性hash算法:即通过设置hash函数将客户端的IP地址或请求的URL作为输入,确定好每个路由的请求,然后再一一映射到服务器上,hash函数具有唯一性和不可逆性,能够较好的响应。但是如何设置好hash函数是一个较大的考验。
动态负载均衡算法:动态负载均衡算法会进行实时的监控,在分发请求时会考虑到服务器的条件和性能,能够最大程度上运用服务器。
最小链接算法:最小链接算法是将每个新请求分享到当前活跃的链接和请求较少的服务器上,但是这需要实时跟踪后端服务器的链接数量,再通过最小链接算法将请求发送到适应的服务器上。最小链接算法的优点就是可以灵活的根据请求分配服务器。然而如果连接不均匀的堆积在一个服务器上,该服务器就有可能负载。
最小响应时间算法:最小响应时间算法需要实时监控每个服务器的延迟从而将请求发送到延迟较低或者是响应时间较快的服务器上。优点:最小响应时间算法能够高度的自适应和快速的进行反应,能够快速的响应请求。缺点:
最小响应时间算法需要实时监控每个服务器的延迟,而这会带来较大的成本开销和复杂性。
总结:静态和动态都有各自的优缺点,如何选择合适的算法才是关键。静态算法比较适合无状态的应用,动态算法比较适合需要大型复杂响应的应用。