文章目录
负载均衡
负载均衡是指,将大量的请求分发到多台应用服务器,以此来分散压力的一种架构方式,它是以集群的方式存在,并且当某一个节点挂掉的时候,可以自动不再将请求分配到次节点。由于单个处理节点故障不影响整个服务,所以负载均衡集群实现了高可用性。
类型
- DNS
- CDN
- IP负载均衡
- Nginx
实现方式
- 重定向
对于每一个请求都需要重定向一次,因此效率不是很高。 - 反向代理
对前端机考验大 - 数据链路返回
给应用的服务器设置虚拟IP,然后通过修改mac地址的方式将请求分发出去,服务器收到请求之后直接先响应给客户端,不需要经过前端机
负载均衡算法
- 轮询法
将请求按顺序轮流分配到后端服务器上,它均衡地对待后端每一个服务器,而不关心服务器实际的连接数和当前的系统负载(可能会导致负载能力较差的服务器超载) - 随机法
通过随机算法,根据后端服务器列表大小之来随机选取其中一台服务器进行访问。概率统计论可知,随着客户端调用服务端的次数增多,其平均分配调用到后端的每一台服务器,也就是轮询的结果 - 源地址哈希法
根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。同一IP的地址,当后端服务器列表不变时,它每次都会映射到同一台后端服务器。(可能会导致服务器不平衡) - 加权轮询法
给配置高,负载低的服务器配置高的权重。 - 加权随机法
与上方基本一致 - 最小连接数法
根据后端服务器当前的连接情况,动态选取其中连接数最少的一台服务器来处理当前的请求,尽可能体提高后端的利用效率,将负责合理地分流到每一台服务器。如果所有服务器都是相同的,第一个服务器优先。
Nginx负载均衡
Nginx的特点:高并发,高性能,低内存
内置策略:加权轮询和ip哈希
对加权轮询:先深搜索算法,即首先将请求都分给高权重的机器,直到机器的权值都降到比其他机器低,才可是请求分给下一个高权重的机器。当所有后端机器后挂掉的时候,nginx会立即将所有机器的标志位清成出事状态,以避免造成所有机器都处于timeout状态。
iphash:hash值即与ip有关,也与后端机器有关。
DNS负载均衡
DNS中可以拥有多个A记录,相比于重定向,基于DNS的负载均衡节省时间
- DNS可以根据用户IP来之智能解析,DNS服务器可以在所有可用的A记录中寻找离用户最近的一台服务器
- 动态DNS:每次IP地址变更时,及时更新DNS服务器。因为缓存,所以会有一定的延时。
采用简单的加权轮询负载算法
反响代理负载均衡
核心工作:转发HTTP请求
调整策略丰富。
对反响代理服务器的并发处理能力要求高,工作在HTTP层面
如果需要请求静态文件,更加适合使用前面的DNS负载均衡方式(转发性能消耗)
反向代理可以监控后台服务器,比如负载均衡、相应时间、是否可用等等来调整负载均衡的策略
IP负载均衡
工作在传输层,修改发送过来的IP包,将数据包的目标地址修改为实际服务器的地址。
CDN
请求LDNS –> 网站授权DNS –(cName)–> DNS调度系统 –> (IP) –> 访问(IP) –> 如果又缓存,则返回该缓存,如果没有,则向源站请求。