负载均衡(Load Balancing)解析

420 阅读4分钟

本文主要总结个人学习负载均衡(Load Balancing)的知识,主要包括以下内容:

  • 为什么要有负载均衡?
  • 负载均衡的具体方法
  • 参考链接

1. 为什么要有负载均衡?

1.1 负载均衡定义:

负载平衡是在多个服务器间分发网络流量的过程,它确保单个服务器不会承受太多的负载。

负载均衡示意图

负载均衡是高可用网络基础架构的关键组件,通常将网络流量均衡分配到多个服务器来提高应用或其他服务的性能和可靠性

1.2 为什么要有负载均衡?传统的无负载均衡的架构:

无负载均衡的单点架构

在这个例子中,用户直接访问 web 服务器:

  • 如果服务器不小心挂了(宕机),则用户自然也就没办法访问了。
  • 如果同时有超级多用户试图访问服务器,超过了服务器的物理性能的极限,也会出现加载速度缓慢或无法访问的情况。
1.3 如何进行负载均衡?负载均衡架构:

通过在后端引入负载均衡器和额外的 web 服务器(如下图所示),可以缓解上面提到的故障。

负载均衡架构

  • 从图里可以看出,用户首先访问负载均衡器,然后再由负载均衡器决定哪个服务器进行响应,达到均衡网络流量的目的。
  • 通常情况下,后端服务器应提供相同的服务,以便用户无论访问哪个服务器,都能收到一致的内容。 在上面的情况下,如果负载均衡器挂了(单点故障),用户也还是不能访问web服务器了,此时可以通过引入第二个负载均衡器来缓解,如下图所示:
    Redundant Load Balancers
    将两个负载均衡器连接在一起形成集群,当主负载均衡器发生了故障,就可以将用户访问请求转到第二个负载均衡器。
1.4 总结

负载均衡的意义在于,让所有节点以最小的代价、最好的状态对外提供服务,这样系统吞吐量最大,性能更高,对于用户而言请求的时间也更小。而且,负载均衡增强了系统的可靠性,最大化降低了单个节点过载、甚至crash的概率。

2. 负载均衡的具体方法

2.1 负载均衡的实现方式:

负载平衡开始于20世纪90年代,当时硬件设备通过网络分发流量,管理者希望提高在服务器上运行的应用程序的可访问性。当前的负载均衡有以下实现方式:

  1. DNS轮询:DNS轮询是最简单的负载均衡方式。以域名作为访问入口,通过配置多条DNS 记录使得请求可以分配到不同的服务器。
  2. CDN:通过发布机制将内容同步到大量的缓存节点,并在DNS服务器上进行扩展,找到里用户最近的缓存节点作为服务提供节点。
  3. IP负载均衡:具有硬件实现和软件实现方式。
2.1 IP负载均衡的实现方式:
2.1.1 硬件实现方式:
  • F5,全称是F5-BIG-IP-GTM(是最流行的硬件负载均衡设备,其并发能力达到百万级)
2.1.2 软件实现方式:
  • Nginx 工作在7层
  • LVS(Linux Virtual Server, Linux虚拟服务器)工作在4-7层
  • HAProxy 工作在4-7层 以上三种方法的对比,可以参考这里
2.2 负载均衡算法:
  • 轮询算法(round-robin)
  • 加权轮询算法(weight round-robin)
  • 随机算法(random)
  • 加权随机(weight Random)
  • IP哈希法(IP hash)
  • 最少连接算法(least connection) 关于负载均衡算法的详细介绍,请看这里

参考链接

  1. 什么是负载均衡?
  2. What Is Load Balancing?
  3. 关于负载均衡的一切:总结与思考
  4. 系统架构之负载均衡【F5\nginx\LVS\DNS轮询】
  5. Nginx/LVS/HAProxy负载均衡软件的优缺点详解
  6. 负载均衡算法的几种常用方案
  7. 亿级PV请求的三种负载均衡技术
  8. Web负载均衡的几种实现方式
  9. 几种简单的负载均衡算法及其Java代码实现