简介
设计模式是软件设计中,针对 “反复出现的常见问题” 的 “可复用解决方案”(比如 “如何让多个服务通信更高效”“如何解耦业务与非业务逻辑” 这类高频难题,都有对应的成熟模式)。
Sidecar 模式(边车模式)就是这类设计模式中的一种,并且在现代软件工程中(尤其是分布式系统、云原生架构中)越来越重要(比如之前讲的服务网格,核心就是基于 Sidecar 模式实现的)。
Sidecar 模式的本质是给 “主应用(primary application) ”(比如处理订单的 “订单服务”、管理用户的 “用户服务”)配对一个 “次要进程 / 服务(sidecar,即边车) ”—— 主应用负责核心业务逻辑,边车负责 “辅助性任务(complementary tasks) ”(非业务但必需的工作)。
边车负责的任务都是主应用运行中需要,但又不属于 “核心业务” 的工作,常见包括:
- 日志(logging):收集主应用的运行日志(如 “用户下单失败” 的记录),统一上报到日志系统;
- 监控(monitoring):监控主应用的运行状态(如 CPU 使用率、请求响应时间),一旦异常就报警;
- 代理(proxying):接管主应用的网络通信(如服务网格中的 Sidecar,转发主应用的调用请求);
- 安全(security):处理主应用的加密 / 解密(如 TLS 证书管理)、身份验证; 配置管理(configuration management):为主应用同步最新配置(如数据库地址、限流阈值),无需主应用重启。
物理共存,逻辑独立:
- 物理层面:边车与主应用 “一起运行”(runs alongside),共享同一个运行环境(比如在同一台服务器、同一个容器中)—— 确保边车能高效获取主应用的信息(如日志、网络流量);
- 逻辑与操作层面:边车与主应用 “完全独立”—— 二者代码分离(边车的代码不嵌入主应用)、部署独立(边车升级 / 重启不影响主应用)、故障隔离(边车挂了不会直接导致主应用崩溃)。
Sidecar 可以这样类比:
- 摩托车(主服务):核心功能是 “载人运输”,对应软件中主应用的 “核心业务逻辑”(如订单服务的 “创建订单”“查询订单”);
- 边车(辅助服务):功能是 “装工具、载额外乘客”,不影响摩托车的核心运输功能,对应软件中边车的 “辅助任务”(如日志、监控);
- 类比核心:边车 “扩展了摩托车的能力”(能装更多东西),但不 “绑定” 摩托车(边车可以拆下来,摩托车没边车也能正常跑)—— 对应软件中,边车 “扩展了主应用的能力”(如主应用不用自己写监控代码,边车帮它做),但不 “紧耦合”(主应用和边车互不依赖)。
核心概念
用容器技术(如 Docker、Kubernetes)部署应用时的典型架构—— 即把 “主应用” 和 “Sidecar 辅助服务” 分别打包成两个独立容器,但让它们在同一台主机 / 同一个 K8s Pod 中运行(符合 Sidecar 模式 “物理共存、逻辑独立” 的特性):
- 应用容器:承载主应用的核心业务逻辑,是整个部署单元的 “价值核心”,直接满足业务需求。
- Sidecar 容器(sidecar container):“能力增强载体”:为应用容器提供 “辅助能力”,相当于给主应用 “加装插件”,但自身不承担核心业务逻辑。
关键特性:
- 协同部署(Co-location):Sidecar(边车)与主服务(primary service)必须 “一起部署”,在 Kubernetes(主流容器编排平台)环境中,二者通常被放在同一个 “Pod”(K8s 中最小的部署单元,一个 Pod 可包含多个容器)里。
- 独立性(Independence):Sidecar 与主应用是 “松耦合” 关系(不是紧绑定),二者在代码、部署、运维上完全独立。
- 资源共享(Resource Sharing):Sidecar 与主服务运行在同一 “资源载体” 上(如同一台服务器、同一个 K8s Pod),因此会共享该载体的底层硬件 / 软件资源,无需为 Sidecar 单独分配独立的服务器资源。
- 通信方式(Communication):Sidecar 与主服务之间的通信,不依赖复杂的跨节点网络,而是通过本地方式实现,确保简单、高效且低延迟。

