缓存一致性协议和分布式共识算法,听起来像两个世界的语言。但最近有工程师把MESI和Paxos摆在一起对比,发现硬件和软件在"谁该负责一致性"这件事上,扯了三十年的皮。
MESI是CPU缓存的看家协议,1970年代就有了。它用四个状态(Modified、Exclusive、Shared、Invalid)保证多核看到的数据一致,全程硬件自动完成,软件无感知。问题是——它只在单机内部有效,一旦跨机器,这套状态机就失效了。
Paxos则是Leslie Lamport1990年提出的分布式共识算法。跟MESI相反,它假设网络不可靠、节点会崩溃,用多轮投票来达成一致。代价是延迟高、代码复杂,Raft出来之前没几个团队敢碰。
关键冲突在这里:硬件工程师觉得"一致性就该我来做,你们软件别操心";分布式系统的人反驳"你那个一致性根本出不了机箱」。有研究者直言:「MESI解决的是多核问题,Paxos解决的是多机问题,但中间那层——单机多进程共享内存的一致性——两边都不管。」
这个灰色地带导致无数Bug。比如某个服务在单机上跑得好好的,一上分布式就崩,团队排查两周发现是CPU乱序执行和语言内存模型没对齐。硬件不暴露细节,软件做不了优化;软件假设的抽象,硬件又不保证。
现在有人提议把Paxos的思想下沉到网卡甚至缓存层,也有人想让硬件暴露更多一致性原语。但两边社区互相听不懂对方的需求文档——一个用皮秒思考,一个用毫秒思考,开会时像鸡同鸭讲。
热门跟贴