首页/开发/系统分析与架构设计速查/大使模式(Ambassador)
架构风格与模式58 条

大使模式(Ambassador)

为主应用代理出站连接:统一处理服务发现、重试、TLS、分片路由与限流;与边车方向相反(边车多处理入站与横切,大使专注出站)。

大使模式是什么

大使模式为主应用代理出站连接:在应用同主机或同容器内运行一个代理进程,统一处理服务发现、连接池、重试与超时、传输层加密、分片与异地路由,应用侧只关心业务参数。它与边车方向相反:边车多处理入站流量与横切能力,大使专注出站依赖,典型场景是数据库分片代理、异地双活路由与老应用对接新协议。

为什么把出站治理外提

老应用常把连接地址写死在配置里,各自实现重试与超时,改一处就要动代码并重新发布。把这部分逻辑移到代理层后,治理策略可以统一下发、独立升级,应用无需改造就能获得连接复用与故障切换能力。代价是多了一跳延迟与一类新的运维对象,代理本身必须做高可用,否则出站通道的单点故障会直接让应用不可用。

基本信息

部署位置与应用同主机或同容器内的代理进程
典型职责连接池、重试与超时、服务发现、分片与异地路由
主要收益应用无需内置复杂的网络治理逻辑,策略可独立升级
与边车区别边车侧重入站与横切能力,大使专注出站依赖
成本代价增加一跳延迟与运维对象,代理自身必须高可用

职责分工

职责代理承担应用保留
连接管理连接池、复用与健康检查无
重试与超时统一策略与重试预算业务级补偿逻辑
路由分片、读写与异地路由业务参数拼装
安全传输加密与凭据轮换无
可观测出站调用指标与日志业务埋点

典型使用场景

  • 老应用访问分片数据库,用代理统一处理分片键路由
  • 异地双活场景按策略把出站请求路由到不同集群
  • 应用需要对接新协议或新证书体系,但短期无法改造代码
  • 多语言应用统一出站治理策略,避免每种语言各写一套
代理会成为出站路径上的单点:要与业务实例同生命周期部署并配置健康检查,避免代理异常后应用整体无法访问外部依赖。
重试逻辑不要同时存在于应用与代理:两层各重试一次会让实际重试次数相乘,故障期间反而把下游压垮。

易错点

  • 代理单点部署,故障时整个应用无法出站,影响面超过原有设计
  • 应用与代理同时实现重试,重试次数被放大,故障期间压垮下游
  • 把代理当成万能改造层,业务语义也塞进去,升级风险随之上升
  • 缺少出站调用的指标采集,出问题时无法判断是应用还是路由导致
  • 凭据轮换只在代理侧更新,应用侧旧配置残留,出现鉴权失败

数据来源与参考

  • Microsoft Azure 架构中心 Ambassador 模式
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌