边车模式是什么
边车模式把日志采集、流量代理、配置注入这类横切能力放到与主应用并行的辅助进程或容器里,两者共享生命周期与网络命名空间。主应用只关心业务逻辑,辅助能力的实现语言与升级节奏不受主应用限制。
代价是什么
服务网格的数据面就是边车模式的规模化实践。评估时必须计入每个实例的额外资源开销与启动时间:一旦实例规模上千,边车的 CPU 与内存占用会变成可观成本,启动顺序、就绪探针与优雅退出也都要额外处理。
基本信息
| 部署形态 | Kubernetes 中同一 Pod 内的多个容器;传统环境中为同主机进程 |
|---|---|
| 典型能力 | 流量代理、双向 TLS、指标采集、配置热加载 |
| 收益 | 能力与语言无关,可独立升级 |
| 代价 | 每个实例的额外资源开销与启动时间 |
Kubernetes 片段
Kubernetes 片段
spec:
containers:
- name: app
image: registry/app:1.4.2 # 主应用容器,不含横切逻辑
- name: envoy
image: envoyproxy/envoy:v1.29 # 边车容器,共享 Pod 网络命名空间
ports:
- containerPort: 9901 # 管理端口,仅集群内可访问典型使用场景
- 服务网格数据面:用边车代理统一处理流量治理与加密
- 日志与指标采集:采集器与业务容器同生命周期,随实例上下线
- 配置热加载:配置代理负责拉取与重载,主应用不必改代码
- 协议适配:为旧应用旁挂协议转换边车,避免改造存量代码
- 本地调试:用边车模拟生产环境的代理与认证链路
与类库和网关的区别
边车不是类库:类库随主应用一起编译发布,升级必须改主应用;边车独立发布,主应用不需要重新构建。边车也不是中心化的代理网关:网关在流量入口集中处理,边车部署在每个实例旁边,因此能覆盖实例之间的内部调用。选择边车意味着接受每个实例多一份进程开销,换来的是语言无关与统一升级。
边车适合承载与业务无关的横切能力;一旦边车里出现业务语义判断,它就会变成第二个需要独立测试与发布的应用,收益迅速消失。