负载均衡导学
Posted Java架构之道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了负载均衡导学相关的知识,希望对你有一定的参考价值。
负载均衡
负载均衡(Load Balancing,简称LB),用于在计算机集群、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到资源使用最优化、吞吐率最大化、响应时间最小化,同时避免过载的目的。通常由专用软件或硬件来完成。
在分布式系统中,负载均衡组件通常位于客户端和服务端中间,它接收客户端请求并使用特定算法将流量分发到服务端不同节点,以降低单个节点的负载;同时,它可以跟踪和记录资源的状态,如果一个集群中的某个节点响应变慢或者出错率上升,负载均衡组件可以暂停将请求分发到该节点;综上,负载均衡组件可以提升应用集群的响应效率和可用性。
为了使系统更具可伸缩性,我们可以在系统的不同层级使用负载均衡组件:
-
在客户端和Web服务层之间 -
在Web服务层和应用服务层之间 -
在应用服务层和数据库之间
负载均衡带来的好处
-
高性能,用户可以体验到更快速的服务,多个节点可以均衡地、并发地处理多个用户请求 -
高可靠,集群高可靠,支持故障切换 -
高可用,单个服务节点停机维护不影响整体服务,系统可用性=平均无故障时间/(平均无故障时间+平均修复时间) -
可伸缩,节点可以动态下线或扩容 -
可防护,智能的负载均衡器可以通过收集和分析流量信息,预测系统瓶颈
负载均衡实现方式
硬件实现
-
F5:BIG-IP -
A10 -
Citrx:Netscaler
软件实现
-
LVS -
nginx -
HaProxy
负载均衡协议划分
根据网络七层协议划分,不同层次的使用方式并不一样,比如:在应用层使用Nginx可以直接分发Http请求到Tomcat服务器;在传输层使用HaProxy根据IP分发数据包,不同层次由低到高分别是
链路层
-
LVS
网络层
-
LVS -
路由器
传输层
-
LVS -
HaProxy
应用层
-
HaProxy -
Nginx
负载均衡常见类型
服务端负载均衡
客户端负载均衡
客户端负载均衡是相对服务端负载均衡而言的,当调用方调用服务时,服务端会从可用的服务器列表中,选出一个可提供服务的节点,然后由客户端直接调用该服务节点。
负载均衡常见算法
在了解具体负载均衡算法之前,我们先看看负载均衡器是如何选择服务节点的?它必须确保提供服务的节点,都能够提供正确的响应,然后根据配置好的算法规则从多个节点中选择一个健康的节点。
为了确保选择的节点都是健康的,负载均衡器需要具备健康检测功能,通常是定时地发送心跳检测到服务器节点,比如2秒钟一次,如果服务器超过限制次数未响应,则从可用的服务器列表中剔除掉。
以下是常用的负载均衡算法,不同算法可用满足不同的需求:
-
最少连接;该方法选择最少活跃连接的节点提供服务 -
最低响应时间;该方法选择平均响应时间最低的节点提供服务 -
最少带宽;该方法选择目前服务器网络带宽最低的节点提供服务 -
顺序轮训;循环遍历服务器列表,将请求均匀分配到各个节点 -
加权轮训;对于配置较高的服务器,通过配置更高的权重,以便在轮训的时候,得到更多被选中的机会 -
IP Hash;根据客户端IP计算Hash值,并映射到对应服务器上
以上通过几个方面简单介绍负载均衡,接下来会结合项目中经常用到的组件,着重介绍Nginx、LVS等实战应用,欢迎继续关注。
以上是关于负载均衡导学的主要内容,如果未能解决你的问题,请参考以下文章