现今常用负载均衡有两个:Nginx 和 Envoy。
Envoy 是一个高性能的开源代理(Proxy)和通信中间层,常用于做 七层负载均衡(L7 Load Balancer) ,和 Nginx 类似,但定位更偏"云原生基础设施"。Envoy = 面向微服务架构的智能代理 + 负载均衡器
Envoy 通常部署在服务之间,负责处理网络通信,比如:
text
客户端 → Envoy → 后端服务A / 服务B / 服务C
它主要做这些事:
七层负载均衡(HTTP级别)
- 根据 URL、Header、Cookie 做路由
- 支持灰度发布、A/B测试
服务发现
- 自动感知后端服务变化(比如配合 Kubernetes)
熔断 / 限流 / 重试
- 某个服务挂了 → 自动熔断
- 请求失败 → 自动重试
- 防止雪崩
可观测性
- 提供丰富的指标(metrics)
- 支持分布式追踪(Tracing)
- 日志详细
vs Nginx
| 对比点 | Nginx | Envoy |
|---|---|---|
| 定位 | Web服务器 + 负载均衡 | 云原生代理 |
| 配置方式 | 静态配置为主 | 动态配置(xDS) |
| 微服务支持 | 一般 | 非常强 |
| 可观测性 | 较弱 | 原生支持 tracing / metrics |
| 使用场景 | 网站、反向代理 | 微服务、Service Mesh |
👉 Nginx 更像传统网关
👉 Envoy 更像微服务时代的"通信中枢"
Envoy 最出名的用途是作为 Sidecar(边车代理) ,比如在:
👉 Istio(服务网格)中
每个服务旁边都会部署一个 Envoy:
text
服务A ←→ Envoy ←→ Envoy ←→ 服务B
这样带来的好处是:
- 服务之间通信统一治理
- 不用在业务代码里写网络逻辑
- 安全、流量控制都交给 Envoy
比如"下单服务",要调用"库存服务":
如果不用 Envoy:
text
下单服务 → 直接调用库存服务
用了 Envoy:
text
下单服务 → Envoy → Envoy → 库存服务
👉 Envoy 可以帮你做:
- 超时控制
- 自动重试
- 熔断
- 灰度发布(只让10%请求走新版本)
总之:👉 Envoy 是一个为微服务而生的高性能七层代理,负责服务间通信、负载均衡和流量治理。
不过从全行业来看:
-
Nginx
👉 仍然是最主流的 Web 服务器 / 反向代理之一
👉 大量网站、公司都在用(包括中小公司)
-
Envoy
👉 更多出现在云原生 / 微服务体系里
原因在于:
- Nginx 出现更早(历史包袱优势)
- 配置简单、上手快
- 很多公司不做微服务,也没必要用 Envoy
但在"新架构"里,Envoy 更火,例如这些场景:
- Kubernetes
- Service Mesh
- 微服务架构
那确实:
👉 Envoy 的存在感更强
尤其是在:
- Istio
- Kubernetes
这些体系中,Envoy几乎是"标配"。
在生产环境中两者可以协同工作,分工不同
🧱 Nginx(偏"入口网关")
- 放在最前面(接用户请求)
- 做:
- 静态资源
- HTTPS
- 简单负载均衡
👉 更像"门卫"
🔁 Envoy(偏"服务间通信")
- 放在服务之间(内部调用)
- 做:
- 服务治理(熔断、重试)
- 动态路由
- 可观测性
👉 更像"调度中心"
真实公司架构
text
用户 → CDN → WAF → Nginx → 微服务 → Envoy → 服务A/B/C
- 外部流量 → Nginx
- 内部流量 → Envoy
👉 这才是最常见的组合