load balancing

文章目录

负载均衡

负载均衡是指,将大量的请求分发到多台应用服务器,以此来分散压力的一种架构方式,它是以集群的方式存在,并且当某一个节点挂掉的时候,可以自动不再将请求分配到次节点。由于单个处理节点故障不影响整个服务,所以负载均衡集群实现了高可用性。

类型

  1. DNS
  2. CDN
  3. IP负载均衡
  4. Nginx

实现方式

  1. 重定向
    对于每一个请求都需要重定向一次,因此效率不是很高。
  2. 反向代理
    对前端机考验大
  3. 数据链路返回
    给应用的服务器设置虚拟IP,然后通过修改mac地址的方式将请求分发出去,服务器收到请求之后直接先响应给客户端,不需要经过前端机

负载均衡算法

  1. 轮询法
    将请求按顺序轮流分配到后端服务器上,它均衡地对待后端每一个服务器,而不关心服务器实际的连接数和当前的系统负载(可能会导致负载能力较差的服务器超载)
  2. 随机法
    通过随机算法,根据后端服务器列表大小之来随机选取其中一台服务器进行访问。概率统计论可知,随着客户端调用服务端的次数增多,其平均分配调用到后端的每一台服务器,也就是轮询的结果
  3. 源地址哈希法
    根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。同一IP的地址,当后端服务器列表不变时,它每次都会映射到同一台后端服务器。(可能会导致服务器不平衡)
  4. 加权轮询法
    给配置高,负载低的服务器配置高的权重。
  5. 加权随机法
    与上方基本一致
  6. 最小连接数法
    根据后端服务器当前的连接情况,动态选取其中连接数最少的一台服务器来处理当前的请求,尽可能体提高后端的利用效率,将负责合理地分流到每一台服务器。如果所有服务器都是相同的,第一个服务器优先。

Nginx负载均衡

Nginx的特点:高并发,高性能,低内存
内置策略:加权轮询和ip哈希

对加权轮询:先深搜索算法,即首先将请求都分给高权重的机器,直到机器的权值都降到比其他机器低,才可是请求分给下一个高权重的机器。当所有后端机器后挂掉的时候,nginx会立即将所有机器的标志位清成出事状态,以避免造成所有机器都处于timeout状态。

iphash:hash值即与ip有关,也与后端机器有关。

DNS负载均衡

DNS中可以拥有多个A记录,相比于重定向,基于DNS的负载均衡节省时间

  1. DNS可以根据用户IP来之智能解析,DNS服务器可以在所有可用的A记录中寻找离用户最近的一台服务器
  2. 动态DNS:每次IP地址变更时,及时更新DNS服务器。因为缓存,所以会有一定的延时。

采用简单的加权轮询负载算法

反响代理负载均衡

核心工作:转发HTTP请求
调整策略丰富。
对反响代理服务器的并发处理能力要求高,工作在HTTP层面
如果需要请求静态文件,更加适合使用前面的DNS负载均衡方式(转发性能消耗)
反向代理可以监控后台服务器,比如负载均衡、相应时间、是否可用等等来调整负载均衡的策略

IP负载均衡

工作在传输层,修改发送过来的IP包,将数据包的目标地址修改为实际服务器的地址。

CDN

请求LDNS –> 网站授权DNS –(cName)–> DNS调度系统 –> (IP) –> 访问(IP) –> 如果又缓存,则返回该缓存,如果没有,则向源站请求。

分享到: