「反正有分布式了,单机随便写写。」这句话流传很广。下面这条链路是真的:一个 Java 服务经 HTTP 串行调用一个 Python 服务,所有耗时都在服务端测,再和同一个 JVM 里一次普通方法调用并排放在一起。所谓一跳(hop),就是一次完整的跨服务调用:请求发给下游服务、下游处理完、再把结果传回来。一跳里包含了网络往返、序列化反序列化和两边的框架调度,这些是单体应用里不存在、分布式强加给你的成本。跳数你定,每一跳还能注入指定的模拟业务耗时,跑一遍就知道差几个数量级。
sleep,不碰数据库。
没有。它只是把单机性能的角色换了:从决定「能不能用」,变成决定用户等多久、你花多少钱、系统离雪崩有多远。上面那条链路的每一跳,都要为跨进程这件事付一笔固定成本,跳数一乘,这笔成本就直接压在用户的等待时间里。链路越长,每个节点的单机性能越金贵。
把上面的「每跳注入」拉到 80 ms 再跑一次,你看到的就是一个慢下游怎么吃掉整条链路的预算。真实系统里那一跳可能是一条没走索引的查询、一次 GC 停顿,或者一个没配连接池的调用。熔断、限流、降级这一整套,很大一部分都是在给单机性能不足擦屁股。
反过来看做得最好的那批系统:Kafka、Redis、ClickHouse、Netty,全是先有单机性能怪物,才谈得上分布式。共识、选主、副本同步这些协调动作的成本是固定的,节点越慢,协调开销占总时间的比重越高,横向扩展的收益递减得越快。