各位读者朋友,大家好。
面试的时候,我经常问候选人:“你们项目是分布式架构吗?” 十个人里有九个会自信满满地回答:“是啊,我们用了 Spring Cloud,全家桶都上了,Nacos、Feign、Sentinel 一个都没少。”
再往下问:“那分布式事务怎么处理的?服务雪崩怎么预防的?网络分区了怎么办?” 大部分人就开始支支吾吾,最后憋出一句:“呃……这些框架底层应该都帮我们处理了吧?”
这就是典型的 “伪分布式”。很多人以为引几个 Jar 包,把单体应用拆成几个 Jar 包运行,就是分布式架构师了。今天咱们就来泼盆冷水,聊聊架构师眼里真正的分布式挑战,以及这些概念在软考高级架构师里是怎么考的。
一、 最大的谎言:网络是可靠的
L. Peter Deutsch 早在 1994 年就总结了“分布式计算的八大谬误”,排名第一的就是 “网络是可靠的”。
在单体应用里,你调一个函数,要么成功,要么抛异常,几乎没有第三种状态。 但在分布式系统里,服务 A 调用服务 B,可能会出现最恶心的 **“超时”**状态。请求发出去没?不知道。对方收到了没?不知道。对方处理完了没?还是不知道。
架构师的思维转变:做单体是“基于确定性”编程,做分布式是 “基于不确定性”防御