真实面经题目 · 原创解析
分布式的 slave 和 master 之间如何通信?
master/slave 通信本质上是分布式节点之间的控制面和数据面协作。回答要覆盖心跳、注册发现、任务下发、状态上报、数据同步、故障检测和一致性取舍。
真实面经题目 · 原创解析
master/slave 通信本质上是分布式节点之间的控制面和数据面协作。回答要覆盖心跳、注册发现、任务下发、状态上报、数据同步、故障检测和一致性取舍。
分布式 master 和 slave 通信通常分两类:控制面和数据面。控制面包括 slave 启动后向 master 注册、定期心跳、汇报资源和任务状态,master 下发任务、配置和调度指令;数据面包括任务输入输出、日志、checkpoint、复制数据或增量同步。协议上可以用 RPC、HTTP/gRPC、消息队列或自定义 TCP,关键要处理超时重试、幂等、心跳丢失、leader 选举、版本兼容和网络分区。系统设计时要明确 master 是否单点、slave 失联怎么判定、任务如何重分配,以及状态一致性要求。
slave 启动后通常向 master 或注册中心上报节点信息、资源能力、版本和可服务状态。master 维护节点表,作为后续任务调度和健康检查的依据。
slave 定期发送心跳,携带负载、任务进度、资源使用、错误码和时间戳。master 根据心跳超时判断节点异常,但要避免网络抖动导致误判。
master 负责下发任务、配置、停止、重试和迁移命令。slave 执行后回报状态,任务消息要设计幂等 ID,避免重试时重复执行造成副作用。
数据可以通过 RPC 拉取、对象存储、共享日志、消息队列或复制协议传递。全量同步简单但成本高,增量同步效率高但要处理顺序、断点和一致性。
master 单点需要主备或选举,slave 失联要重分配任务,网络分区要明确可用性和一致性取舍。关键状态最好有持久化和可恢复日志。
要在故障发现速度和误判率之间平衡。一般结合业务 SLA、网络抖动、重试次数和超时窗口设置,而不是只看单次心跳。
可以做主备热切、基于 ZooKeeper/etcd 的 leader 选举,或把任务状态持久化,新的 master 接管后恢复调度。
给任务分配唯一 ID,slave 做幂等检查,结果提交也要支持去重或 compare-and-set,必要时使用状态机约束流转。