跳到主要内容

图解分布式架构:一个 Console,一群 Sidecar

前言

负责 CloudDM 这个产品有一段时间了,终于抽出一点时间,准备把产品里一些值得讨论的设计陆续整理出来。今天聊一下 Console + Sidecar 分布式架构,核心思路很简单:Console 负责统一控制,Sidecar 部署在目标资源附近负责执行。

架构总览

Console + Sidecar 可以理解为控制面与执行面的拆分:

  • Console 负责用户侧的任务调度
  • Sidecar 负责所在网络环境内的任务执行

被访问的资源环境无需额外开放网络入口,只需与 Console 机器建立单向通道,即可从外部访问完全内网的资源。

1

一次任务如何完成

一条完整链路大致分为八步:

  1. Sidecar 启动并主动与 Console 建立长连接
  2. Console 保存并返回 Sidecar 信息
  3. Sidecar 持续发送心跳,报告当前状态
  4. 用户请求资源 A
  5. Console 将请求发送给 Sidecar
  6. Sidecar 请求资源 A
  7. Sidecar 将资源 A 返回给 Console
  8. 返回给用户资源 A

2

灵活部署方式

本地体验或小规模场景下,Console、Sidecar 可以合并部署,降低运维成本。

当资源分散在不同网络区域时,将 Console 独立部署,再在各区域分别部署一个或多个 Sidecar 即可。

两种模式共享同一套职责划分,区别仅在于组件是否拆开部署。

优缺点

优点:

  • Console 保留统一的入口和全局状态
  • Sidecar 可以靠近目标资源部署
  • 新增区域时,主要增加 Sidecar,不必复制整个控制系统

缺点:

  • 连接和节点状态需要持续管理
  • 任务必须考虑重复、超时和不确定状态
  • 日志、指标和链路追踪要覆盖两个组件

组件拆开以后,网络问题会变成业务状态问题,这是 Console + Sidecar 架构里最值得投入设计的地方。

最后

Console + Sidecar 的核心并不复杂: Console 决定应该执行什么,Sidecar 负责让它真正执行。

💬 评论区