第37周:L4/L7 负载均衡架构
目标:理解工业级负载均衡器(Maglev、Katran、Envoy)的设计思想,掌握一致性哈希算法与高并发调度。
1. 工业级 LB 概览
1.1 主要产品
1 | ┌──────────────────┬────────────┬──────────────┬──────────────┐ |
1.2 设计目标
1 | 现代 LB 的核心要求: |
2. Maglev 详解
2.1 Maglev 概述
1 | Google Maglev(2016 发布论文): |
2.2 Maglev 一致性哈希
传统一致性哈希问题
1 | 传统一致性哈希(环形): |
Maglev 哈希表
1 | Maglev 改进: |
2.3 Maglev 表的生成
1 | // maglev_consistent_hash.c |
2.4 Maglev 表的特性
1 | 1. 均匀性 |
2.5 实践:实现一致性哈希调度
1 | // maglev_demo.c |
3. Katran 详解(Facebook)
3.1 Katran 概述
1 | Katran(Facebook): |
3.2 Katran 源码分析
1 | // katran_lb.bpf.c — 关键代码片段(简化) |
3.3 Katran 的优化
1 | Katran 的关键优化: |
4. Envoy 线程模型
4.1 Envoy 概述
1 | Envoy(Lyft 开源,现为 CNCF 毕业项目): |
4.2 Envoy 线程模型
1 | Envoy 线程模型: |
4.3 Envoy 过滤器链
1 | # envoy.yaml — 过滤器链配置 |
4.4 Envoy 的过滤器类型
1 | Envoy 过滤器分类: |
5. L7 负载均衡(Envoy 高级路由)
5.1 高级路由
1 | # 复杂的 L7 路由 |
5.2 重试与熔断
1 | cluster: |
6. 性能对比
1 | 各类 LB 性能(典型 10GbE,64B 包): |
7. 一致性哈希补充
7.1 哈希函数选择
1 | 常见哈希函数: |
7.2 实战代码(完整)
1 | // consistent_hash.c |
8. 调度算法对比
| 算法 | 哈希分布 | 加权 | 增删迁移 | 复杂度 |
|---|---|---|---|---|
| Round Robin | 不均 | 简单 | 100% | O(1) |
| Weighted RR | 一般 | 支持 | 100% | O(1) |
| Random | 不均 | 困难 | 高 | O(1) |
| 一致性哈希(环形) | 不均 | 复杂 | ~50% | O(log n) |
| Maglev 哈希 | 均匀 | 简单 | < 1% | O(1) |
| Rendezvous | 均匀 | 简单 | ~33% | O(log n) |
9. 工程实践要点
9.1 部署考虑
1 | 部署 LB 的常见架构: |
9.2 健康检查
1 | // health_check.c — 简单 TCP 健康检查 |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/05/25/第37周:L4-L7 负载均衡架构/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!