架构风格与模式58 条

边车模式(Sidecar)

把日志采集、代理、配置注入等横切能力放到与主应用并行的辅助进程或容器中,二者共享生命周期与网络命名空间,主应用保持技术无关。

边车模式是什么

边车模式把日志采集、流量代理、配置注入这类横切能力放到与主应用并行的辅助进程或容器里,两者共享生命周期与网络命名空间。主应用只关心业务逻辑,辅助能力的实现语言与升级节奏不受主应用限制。

代价是什么

服务网格的数据面就是边车模式的规模化实践。评估时必须计入每个实例的额外资源开销与启动时间:一旦实例规模上千,边车的 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          # 管理端口,仅集群内可访问

典型使用场景

  • 服务网格数据面:用边车代理统一处理流量治理与加密
  • 日志与指标采集:采集器与业务容器同生命周期,随实例上下线
  • 配置热加载:配置代理负责拉取与重载,主应用不必改代码
  • 协议适配:为旧应用旁挂协议转换边车,避免改造存量代码
  • 本地调试:用边车模拟生产环境的代理与认证链路

与类库和网关的区别

边车不是类库:类库随主应用一起编译发布,升级必须改主应用;边车独立发布,主应用不需要重新构建。边车也不是中心化的代理网关:网关在流量入口集中处理,边车部署在每个实例旁边,因此能覆盖实例之间的内部调用。选择边车意味着接受每个实例多一份进程开销,换来的是语言无关与统一升级。

边车适合承载与业务无关的横切能力;一旦边车里出现业务语义判断,它就会变成第二个需要独立测试与发布的应用,收益迅速消失。

易错点

  • 边车与主容器版本不匹配,升级其中一个时互相影响,故障难以定位
  • 边车数量膨胀,实例资源开销与启动时间显著上升,成本超出预期
  • 主应用与边车通过本地文件交换配置,重启顺序错乱导致启动失败
  • 把强依赖业务语义的逻辑放进边车,边车变成第二个应用

数据来源与参考

  • Microsoft Azure 架构中心 Sidecar 模式
  • Kubernetes 官方文档(Pod 多容器)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌