知识卡片

三层负载均衡组合架构:地理/集群/机器级各司其职

结构图卡

内容

[[三种负载均衡机制:DNS、硬件与软件的取舍]]列出的DNS、硬件、软件三种方式,在实际大型系统里并不是非此即彼的单选题,而是按照各自的优势定位组合使用的:DNS负载均衡负责地理级别的分流,硬件负载均衡负责集群级别的分流,软件负载均衡负责机器级别的分流。以一个假想的大型系统为例:系统部署在北京、广州、上海三个机房,用户访问www.xxx.com时,DNS先根据用户的地理位置解析出离用户最近的机房IP(比如把某用户导向广州机房),这是第一层地理级负载均衡;请求到达广州机房后,由F5这类硬件设备接手,把请求分发到广州机房内部的某个具体集群(比如”广州集群2”),这是第二层集群级负载均衡;请求进入”广州集群2”后,再由Nginx这类软件负载均衡把请求分发到集群内某台具体服务器上,由这台服务器真正处理业务并返回响应,这是第三层机器级负载均衡。这套三层架构本质上是让每一层负载均衡都发挥自己最擅长的能力——DNS成本低、适合做粗粒度的跨地域分流;硬件性能强、适合承接单个机房内跨集群的大流量分发;软件灵活便宜、适合做集群内部对具体服务器的精细分发。但这套三层组合是为大型业务量级设计的,并不是所有系统都需要照搬——比如一个大学论坛这种规模不大的业务,完全不需要DNS负载均衡也不需要F5这类硬件设备,只用Nginx做一层简单的负载均衡就完全够用了;架构该做到多复杂,终究要看实际业务体量,而不是单纯追求”标准架构”的完整性。

结构图

flowchart TB
  A["用户请求"] --> B["第一层:DNS负载均衡(地理级)<br/>按用户地理位置解析到最近机房IP"]
  B --> C["第二层:硬件负载均衡(集群级)<br/>如F5,把请求分发到机房内某个集群"]
  C --> D["第三层:软件负载均衡(机器级)<br/>如Nginx,把请求分发到集群内某台服务器"]
  D --> E["服务器处理业务并返回响应"]
  F["组合原则:<br/>DNS管地理级(低成本粗粒度)<br/>硬件管集群级(高性能大流量)<br/>软件管机器级(灵活精细分发)"]
  F -.->|"业务量小时可简化<br/>如小型论坛只需Nginx一层即可"| E

参考来源

- 位置:《从零开始学架构》第20讲《高性能负载均衡:分类及架构》"负载均衡典型架构"(源文件:_epub-src/OEBPS/text00001.html) - 结论依据:原文说明组合的基本原则"DNS 负载均衡用于实现地理级别的负载均衡;硬件负载均衡用于实现集群级别的负载均衡;软件负载均衡用于实现机器级别的负载均衡",并通过三机房示例逐层说明各自的分工,同时提醒"一般在大型业务场景下才会这样用,如果业务量没这么大,则没有必要严格照搬这套架构",直接支撑本卡片结论与结构图。 - 原始内容:DNS 负载均衡用于实现地理级别的负载均衡;硬件负载均衡用于实现集群级别的负载均衡;软件负载均衡用于实现机器级别的负载均衡……一般在大型业务场景下才会这样用,如果业务量没这么大,则没有必要严格照搬这套架构。