负载均衡策略
负载均衡(Load Balance)是实现系统高可用、缓解网络压力以及处理能力扩容的重要手段之一,负载均衡可以帮我们把一些网络请求的压力“均衡”到所有的服务器进行处理。
当然,因为多台服务器的承载能力各不相同,有的硬件配置高而有的硬件配置低,有的网络带宽高而有的网络带宽低,所以负载均衡是在保证服务器不会过载情况下,发挥程序的最大作用。
我们通常所说的负载均衡指的是服务器端负载均衡,可分为硬件负载均衡和软件负载均衡两种。
硬件负载均衡是直接在服务器节点之间安装专门的负载均衡设备,来完成网络请求转发的任务,它独立于操作系统,整体性能高,负载均衡策略多样化,流量管理智能化。
它的优点是功能强大,不仅包含负载均衡,还包括其他应用,例如,网络地址转换、SSL加速等;
缺点是成本太高,并且无法掌握服务器和应用的状态。
软件负载均衡是通过在服务器上安装和使用一些具有负载功能或模块的软件来实现请求的转发,使用比较多的有Nginx、LVS、HAProxy等。
其中Nginx在中小型Web应用中使用较为广泛,是服务器端常用的一种软件负载均衡策略,如图所示。
负载均衡模块都会维护一个可用服务器节点的清单,通过心跳等策略来判断以及从清单中剔除故障服务器节点,来确保清单中的服务器节点都是可以正常访问的。
当客户端发送请求给负载均衡软件的时候,它会按线性轮询、按权重大小等负载均衡算法命中某个服务器节点,然后转发请求。
根据服务清单存储的位置和维护方式不同,负载均衡又分为服务器端负载均衡和客户端负载均衡。
前面提到的Nginx负载均衡的清单在Nginx负载均衡软件处,在集群前添加Nginx,所有访问集群节点的请求都会交给Nginx,然后由Nginx转发请求,这种属于服务器端负载均衡。
在Spring Cloud微服务开发中,所有的客户端都维护着自己要访问的服务清单,而这些服务清单都存储在Eureka注册中心,同服务端负载均衡一样,客户端访问时也需要进行负载均衡处理,那么它是怎么实现负载均衡的呢?使用Spring Cloud Netflix提供的客户端负载均衡器Ribbon即可。