learning_notes

学习笔记

View project on GitHub

负载均衡

任务分配器

推荐

参考

架构之家

根据服务器的能力(硬件),承担相应的工作,是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案

作用

  1. 解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

  2. 提供故障转移,实现高可用;

  3. 通过添加或减少服务器数量,提供网站伸缩性(扩展性);

  4. 安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

分类

  1. DNS负载均衡
  2. 硬件负载(F5)
  3. 软件负载

http重定向

当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转

缺陷:
  1. 吞吐率限制(负责重定向的主服务器,需要高吞吐量)
  2. 重定向访问深度不同(重定向的资源处理时间不通,主服务器无感知)

DNS负载均衡

可以实现地理级别的负载 通过配置域名到DNS的服务器,达到一对多的映射,相比http重定向,基于DNS的负载均衡完全节省了所谓的主站点,DNS有浏览器等的600s缓存,不用担心吞吐率限制

一般将DNS作为第一级负载均衡,A记录对应着内部负载均衡的IP地址

缺点
  1. 扩容非实时
  2. 非高可用,只负责解析ip,不负责探活
  3. 暴露太多外网ip

反向代理负载均衡

反向代理的调度器扮演的是用户和实际服务器中间人的角色

特点
  1. 调度策略丰富
  2. 根据实时情况调整策略
  3. 粘滞会话
缺陷

对反向代理服务器要求高,需要keeplive监控心跳,单机有上限和时延增加

LVS

lvs:Linux Virtual Server,使用集群技术,实现在linux操作系统层面的一个高性能、高可用、负载均衡服务器

IP负载均衡(LVS-NAT)

在网络层通过修改请求目标地址进行负载均衡

用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为,获得的真实ip地址,不需要经过用户进程处理

缺点
  1. 但是一旦请求的内容过大时,不论是基于反向代理还是NAT,负载均衡的整体吞吐量都差距不大
  2. 网络是瓶颈,需要转发数据包

链路层负载均衡(LVS-DR)

数据分发时,不修改ip地址,只修改目标mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的,也称为直接路由模式

优点:性能好;

缺点:配置复杂;

IP隧道(LVS-TUN)

LVS-DR和LVS-TUN都适合响应和请求不对称的Web服务器,如何从它们中做出选择,取决于你的网络部署需要,因为LVS-TUN可以将实际服务器根据需要部署在不同的地域,并且根据就近访问的原则来转移请求,所以有类似这种需求的,就应该选择LVS-TUN。

混合型负载均衡

  1. 动静分离的场景:DNS负载均衡 + 反向代理负载均衡 + IP负载均衡/链路层负载均衡
  2. 动态场景:DNS负载均衡 + IP负载均衡 + 链路层负载均衡

算法

  1. 轮询
  2. 随机
  3. 最少链接
  4. Hash(源地址散列)
  5. 加权
软件负载均衡

caddy