Zer0e's Blog

浅谈负载均衡

字数统计: 1.5k阅读时长: 5 min
2020/06/15 Share

前言

面对大量的访问请求与海量的数据,我们可以通过加大单机的性能来实现服务的稳定,还可以考虑拆分系统来防止单机故障。
负载均衡(Load Balance)是指将负载(例如访问请求,任务等等)进行平衡分摊到多个服务器或组件上执行,以提高性能,作为单点故障的解决方案。
本文将讨论常见的负载均衡分类。

负载均衡分类

从实现方式不同,可以分为软件实现与硬件实现。从实现的节点不同,我们可以分为DNS负载均衡,HTTP负载均衡,IP负载均衡,链路层负载均衡等等。

DNS负载均衡

这是一种利用域名解析来实现的负载均衡技术,在DNS服务器上配置多个A记录,这些A记录对应的是服务器集群,在大型网站中,DNS解析通常作为第一级负载均衡。
优点有:

  • 使用简单,全交给DNS服务器来处理,不需要额外配置负载均衡服务器。
  • 基于用户的地址,可以解析成距离用户最近的服务器地址,加快访问速度。

缺点有:

  • DNS服务是多级服务,在增加或者修改DNS后,需要较长时间才能传递到全网。在这段时间内用户可能会访问失败。
  • 维护性差。由于DNS服务不能知道服务器的负载情况,所以支持的算法较少,无法根据服务器当前负载量进行调节。
  • DNS的控制器通常来说在域名商手里,导致无法做更多的扩展。

HTTP负载均衡

这是一种利用反代技术来转发HTTP流量的技术,通常使用Nginx作为负载均衡工具,在用户的HTTP请求到达后,由反向代理服务器根据算法,将HTTP请求发送给相应的服务器,服务器完成处理后,再将数据返回给代理服务器,由代理服务器将数据转交给用户。
优点有:

  • 没有暴露真实服务器ip。可以有效的隐藏内网信息。
  • 支持的算法较多,可以根据需求不同来配置不同负载均衡策略。
  • 安装和配置相对简单。

缺点有:

  • 对服务器的健康检查只支持端口检测,而不支持url检测。如出现错误,则会转至另一服务器进行重试。
  • 适用的范围较小,只支持http,https等协议。

IP负载均衡

在网络层通过修改目的地址来实现负载均衡。用户请求到达负载均衡服务器后,负载均衡服务器从负载均衡算法得到一个真实服务器地址,将ip数据报的目的地址改为改真实服务器的地址。真实服务器处理完成后,将响应数据包返回给负载均衡服务器,负载均衡服务器再将ip数据报的源地址改为自身的ip地址,发送给用户。
其中,真实服务器将数据返回给负载均衡服务器时,存在两种方式,第一种是负载均衡服务器作为真实服务器集群的网关,则不用配置其他东西。第二种方式是负载均衡服务器在修改目的ip地址的同时修改源地址,然后就可从真实服务器收到返回数据,这种方式成为源地址转换(snat)。

链路层负载均衡

工作在数据链路层,通过修改mac地址来进行负载均衡。在用户请求到达时,不修改ip地址,而是修改目的mac地址,配置真实服务器集群与负载均衡服务器的ip一致,达到不修改ip地址来进行数据转发。这种方式也成直接路由模式(DR模式)。

混合型负载均衡

通常作为一个大型架构,不会只使用一种负载均衡方案,而是采用多个负载均衡方案来实现。
这里举个简单方式:
用户进行DNS查询时,由DNS服务器根据负载均衡算法返回不同的反向代理服务器,再由反向代理服务器将请求分配给应用负载均衡服务器,接着由应用负载均衡服务器通过ip模式或者DR模式进行请求转发。
这种方式反向代理服务器不仅用于请求的转发,并且可以缓存静态资源,当请求是静态资源时,可以直接返回,而不是将请求进行转发。如果是动态页面时,则请求后面的应用负载均衡服务器。

由于混合模式需要根据具体场景来灵活搭配各种方式,所以以上的方式仅供参考。

硬件负载均衡

硬件负载均衡是直接在服务器与外部网络间安装负载均衡设备。一般而言,硬件负载均衡在功能、性能上优于软件方式。硬件负载均衡通常用作全局负载均衡,搭配软件负载均衡来实现整个负载均衡架构。常见的硬件负载均衡器有F5和A10。
优点: 能够直接通过智能交换机实现,处理能力更强,而且与系统无关,负载性能强。
缺点: 成本高,配置冗余。负载均衡器可能无法掌握服务器集群的状态,而是从网络的层面来判断负载情况,网络负载正常的情况下,也可能应用层已经阻塞了。

总结

以上主要从负载均衡的分类入手,对各种负载均衡进行介绍,并简单介绍了常见负载均衡架构。
之后会单独聊聊负载均衡的算法。

CATALOG
  1. 1. 前言
  2. 2. 负载均衡分类
    1. 2.1. DNS负载均衡
    2. 2.2. HTTP负载均衡
    3. 2.3. IP负载均衡
    4. 2.4. 链路层负载均衡
    5. 2.5. 混合型负载均衡
    6. 2.6. 硬件负载均衡
  3. 3. 总结