大家好,我是小米。前几天和一位准备跳槽的朋友吃饭,他一脸愁容地问我:“面试官问我:分布式集群中为什么要有 Master 主节点?我当时只回答了:为了管理集群……然后面试官就微微一笑。”这个“微微一笑”,程序员都懂。因为这个问题,其实背后藏着分布式系统设计的核心思想。今天我们就用一个小故事,把这件事聊透。先讲个故事:一家“没有店长”的奶茶店想象一下,你和几个朋友一起开了一家奶茶店。店里有 5 个员工,大家能力都差不多,于是你决定:大家都是平等的,没有店长。听起来很民主对吧?但很快问题来了。早上 8 点,大家都开始做一件事:A 在统计昨天销量B 也在统计昨天销量C 也在统计昨天销量D 也在统计昨天销量E 也在统计昨天销量结果就是:同一件事情被做了 5 次。不仅浪费时间,还可能统计出 5 个不同结果。这时候你突然意识到:这种事情,只需要一个人做就行。于是你任命了一个店长。每天只让店长统计数据,其他员工直接看店长的统计结果。于是问题解决了。分布式系统遇到的其实是同样的问题在分布式系统中,我们往往会部署很多台机器:Server1Server2Server3Server4Server5这样做的目的主要有两个:提高系统性能提高系统可用性但是问题来了:有些任务其实只需要执行一次。比如:定时任务数据同步日志汇总资源调度集群配置管理如果让所有机器都执行,就会出现严重问题。如果没有 Master 会发生什么?假设一个系统有 5 台服务器,都部署了同样的代码。现在有一个任务:每天凌晨 2 点统计订单数据。如果没有 Master 节点,可能会变成这样: