负载均衡
负载均衡(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
负载均衡常见类型
服务端负载均衡
对于上述提到的负载均衡技术,基本都是服务端负载均衡,比如Nginx,对于调用方来说,只需要知道Nginx地址,并将请求交给Nginx,Nginx会根据配置好的负载均衡策略将请求分发到后台服务节点。
客户端负载均衡
客户端负载均衡是相对服务端负载均衡而言的,当调用方调用服务时,服务端会从可用的服务器列表中,选出一个可提供服务的节点,然后由客户端直接调用该服务节点。
负载均衡常见算法
在了解具体负载均衡算法之前,我们先看看负载均衡器是如何选择服务节点的?它必须确保提供服务的节点,都能够提供正确的响应,然后根据配置好的算法规则从多个节点中选择一个健康的节点。
为了确保选择的节点都是健康的,负载均衡器需要具备健康检测功能,通常是定时地发送心跳检测到服务器节点,比如2秒钟一次,如果服务器超过限制次数未响应,则从可用的服务器列表中剔除掉。
以下是常用的负载均衡算法,不同算法可用满足不同的需求:
- 最少连接;该方法选择最少活跃连接的节点提供服务
- 最低响应时间;该方法选择平均响应时间最低的节点提供服务
- 最少带宽;该方法选择目前服务器网络带宽最低的节点提供服务
- 顺序轮训;循环遍历服务器列表,将请求均匀分配到各个节点
- 加权轮训;对于配置较高的服务器,通过配置更高的权重,以便在轮训的时候,得到更多被选中的机会
- IP Hash;根据客户端IP计算Hash值,并映射到对应服务器上
以上通过几个方面简单介绍负载均衡,接下来会结合项目中经常用到的组件,着重介绍Nginx、LVS等实战应用,欢迎继续关注。
网友评论