# 负载均衡
作者:Ethan.Yang
博客:https://blog.ethanyang.cn (opens new window)
上一篇文章介绍了现代架构的演进,本篇将深入讲解**负载均衡(Load Balancing)**的核心概念与常见实现。
# 一、常见的指标
衡量系统性能的常见指标包括:
# 1. 并发数(Concurrency)
- 并发用户数:同时在线使用业务的用户数(部分用户可能处于挂机状态)。
- 并发连接数:客户端与服务器之间的连接数(部分连接仅保持活跃)。
- 并发请求数:系统同时处理的请求数(包括静态请求和写操作)。
- 并发线程数:系统内部并发运行的线程数量。
并发数的高低直接影响系统的负载能力。
# 2. 吞吐量(Throughput)
单位时间内系统处理请求的总量。吞吐量受业务逻辑复杂度和请求数据大小的影响。
# 3. TPS & QPS
- TPS(Transactions Per Second):每秒完成的事务数,一个事务通常代表一次完整的业务操作(如“打开首页”)。
- QPS(Queries Per Second):每秒查询次数,偏向接口级调用统计。
TPS 与 QPS 的区别在于度量粒度:TPS 是“业务级”,QPS 是“接口级”。
# 4. 平均响应时间(Response Time)
从请求发出到收到响应的平均耗时。该指标体现了用户体验。
# 5. 可靠性指标
- 平均无故障时间(MTBF):系统从上线到第一次故障发生之间的平均运行时间。
- 平均修复时间(MTTR):从故障发生到恢复的平均时间。
这些指标通常是系统优化的核心目标,而优化的根本在于分流:
将原本指向单一系统的请求分散到多个系统上,从而降低单节点压力。
# 二、DNS 负载均衡
DNS 的主要职责是:将域名解析为 IP 地址。
# 1. 常见记录类型
- A 记录(Address Record):域名 → IP 地址
- CNAME 记录(Canonical Name):域名 → 域名
# 2. DNS 负载均衡原理
通过在同一个域名下配置多个 A 记录(多个 IP 地址),实现流量分散到不同服务器上。
# 三、CDN 加速与分流
# 1. CDN 基本原理
CDN(Content Delivery Network,内容分发网络)通过将内容分发到距离用户网络拓扑最近的节点,提升访问速度并降低源站压力。
- CDN 节点(Edge Node):离用户最近的缓存节点。
- 源站(Origin Server):内容的原始服务器。
CDN 的“近”并非地理距离,而是指网络拓扑上的最优路径,它会动态评估网络负载、节点可用性等因素。
# 2. CDN 的作用
- 减少源站系统的并发压力;
- 降低平均响应时间;
- 缓解网络带宽拥堵。
# 3. 缓存策略
- 静态内容(图片、CSS、JS 等):在 CDN 节点缓存;
- 动态内容:直接请求源站。
缓存规则由配置策略(如路径、文件类型、参数)决定哪些内容可被缓存。
# 4. CDN 工作流程概览
- 用户请求访问
taobao.com; - DNS 将请求解析至最近的 CDN 节点;
- CDN 节点检查本地缓存:
- 若命中缓存:直接返回;
- 若未命中:向源站请求内容并缓存。
CDN 的核心是“拦截 + 缓存 + 注册中心映射”。
# 四、动态内容的分流——直连方案
静态内容可通过 CDN 缓存优化,而动态请求需要直接访问源站。
这时可以采用 直连方案:
- 用户 → 注册中心(地址映射) → 实际源站
通过在注册中心维护地址映射关系,实现动态请求的智能分流,从而进一步减轻主站压力。
CDN 适用于静态资源加速;
DNS 适用于简单的流量分发;
直连或注册中心适用于动态业务请求分流。
系统的每一步优化,都是从问题中演化而来。
“好的架构设计不出来,只能演化出来。”