60 秒回答模板

分布式 master 和 slave 通信通常分两类:控制面和数据面。控制面包括 slave 启动后向 master 注册、定期心跳、汇报资源和任务状态,master 下发任务、配置和调度指令;数据面包括任务输入输出、日志、checkpoint、复制数据或增量同步。协议上可以用 RPC、HTTP/gRPC、消息队列或自定义 TCP,关键要处理超时重试、幂等、心跳丢失、leader 选举、版本兼容和网络分区。系统设计时要明确 master 是否单点、slave 失联怎么判定、任务如何重分配,以及状态一致性要求。

考点 控制面通信
难度 真实面经题
回答目标 讲清方法、取舍和追问

深入解析

01

注册和发现

slave 启动后通常向 master 或注册中心上报节点信息、资源能力、版本和可服务状态。master 维护节点表,作为后续任务调度和健康检查的依据。

02

心跳和状态

slave 定期发送心跳,携带负载、任务进度、资源使用、错误码和时间戳。master 根据心跳超时判断节点异常,但要避免网络抖动导致误判。

03

任务和控制指令

master 负责下发任务、配置、停止、重试和迁移命令。slave 执行后回报状态,任务消息要设计幂等 ID,避免重试时重复执行造成副作用。

04

数据同步方式

数据可以通过 RPC 拉取、对象存储、共享日志、消息队列或复制协议传递。全量同步简单但成本高,增量同步效率高但要处理顺序、断点和一致性。

05

故障和一致性

master 单点需要主备或选举,slave 失联要重分配任务,网络分区要明确可用性和一致性取舍。关键状态最好有持久化和可恢复日志。

易错点

  • 不要只说用 TCP 或 HTTP,面试更关心通信内容和故障处理。
  • 不要忽略心跳误判,网络抖动不等于节点真实死亡。
  • 不要把控制面和数据面混成一条链路,二者带宽、延迟和一致性要求不同。
  • 不要忘记 master 单点问题,分布式系统必须考虑接管和恢复。

面试官追问

心跳间隔怎么设置?

要在故障发现速度和误判率之间平衡。一般结合业务 SLA、网络抖动、重试次数和超时窗口设置,而不是只看单次心跳。

master 挂了怎么办?

可以做主备热切、基于 ZooKeeper/etcd 的 leader 选举,或把任务状态持久化,新的 master 接管后恢复调度。

任务重复下发如何避免副作用?

给任务分配唯一 ID,slave 做幂等检查,结果提交也要支持去重或 compare-and-set,必要时使用状态机约束流转。