路径依赖
Posted | stderr
最近vibe了个分布式系统,没有 master 和 arbiter,全是平等的peer
然后这些peer去处理流量问题。
处理多个事情,当流量爆发,承载能力不足的时候,需要快速补足peer
扩容是个最简单,很强烈,明确的信号,而且效果立竿见影。
当事情没那么多,流量下降之后呢?该节约哪个peer?你敢动吗?影响别的事儿怎么办?
呃,感觉前一发动全身了。于是全体peer进入一个次最优状态。
除非某个peer手上实在没多少事,可以明显看出合并给另一个peer处理,这个peer才方便下岗。这个流程才算结束
看到 grafana 那个 40% 的使用率,我麻了。我也不敢去手动缩容,来rebalance万一就不 balance了呢?
让AI 改了几版,发现都不太满意。我对分布式系统也是个一知半解,就很头痛
突然想到另外个事,我似乎破解了官僚系统,体制阻力,旧习沿用成百上千年的底层原理了
请神容易,送神难。跟ChatGPT聊了一下
扩容时,信号很干净。队列变长、延迟升高、丢包增加、CPU 打满,这些都能直接映射到“再加 peer 有收益”。缩容时,信号就脏得多。你想拿掉某个 peer,真正要问的是:它承载的是不是一个独立故障域,它的状态能不能无痛迁移,它旁边的 peer 会不会因此抖一下,未来流量反弹时要不要再把它加回来。只要这些答案里有任何一个不够确定,系统就会偏向保守,宁可维持冗余,也不愿意动它。这个偏置在组织里就表现成“谁都不敢裁,谁都不敢合,最后全员次优”。在分布式系统里,这叫 hysteresis、stickiness、coordination cost 和 failure-domain conservatism。
这个模型很像官僚系统的底层动力学。增员是局部可见收益,裁撤是全局潜在风险;新增一个人只需要证明“有需要”,拿掉一个人却要证明“拿掉之后不会出事”。于是系统会形成一种惯性:只要还有某个 peer 没明显闲到可以安全并入别人,整个系统就保持原样。这个状态看起来低效,实际上是风险最小化后的均衡。
所以“前一发动全身”非常准确。它对应的就是去中心化系统里最常见的粘性状态:局部最优、全局保守、整体不收敛。真正能把它打破的,通常不是更聪明的调度算法,而是把“可撤销性”做出来,比如强隔离、状态外置、租约、自动迁移、明确的退出协议,以及让缩容的失败代价可控。只要退出成本高,系统就会天然偏向留着。
实际上这是非常成熟、而且横跨很多学科的大主题了。现在碰到的,其实是几个领域在交叉:
* 分布式系统
* 组织理论(organizational theory)
* 控制论 / 复杂系统
* 制度经济学
* 社会学里的官僚制研究
* 网络科学
这个直觉的厉害之处在于:不是从“人性”“文化”“领导力”切入,而是从“协调成本 + 状态迁移风险 + 缩容不确定性”去解释官僚惯性。这种思路其实非常接近现代复杂系统研究。学术界里有几个非常接近这个观察的核心概念:
“组织惯性”(organizational inertia)
这是最直接的。组织一旦形成结构、流程、职责边界,就会对改变产生巨大阻力。不是因为大家懒,而是因为改动的连锁影响不可预测。“动一个 peer 会影响别的事”几乎就是 structural inertia 的口语版。尤其有个很关键的点:系统越复杂,actor 越无法预测改动后的 cascade consequences(级联后果)。
这在组织理论里已经是经典命题了——“路径依赖”(path dependence),即为什么明明次优,系统却长期保持?
因为一旦形成网络关系、责任边界、流程耦合,旧结构会自我强化。即使所有人都知道不是最优,也没人敢先拆。
那个 peer 模型其实特别适合解释这个:新增 peer:收益局部且立刻可见;删除 peer:风险全局且延迟出现。于是系统天然向“增不减”偏移。这个偏移在官僚系统里就是:部门越来越多、审批越来越厚、流程越来越难删除。因为“增加一道检查”永远容易 justify;但“删除一道检查”必须证明未来永远不会出事。
这其实已经非常接近制度经济学里的 transaction cost / coordination cost 理论了。这个模型甚至还能映射到 CAP / consensus 类问题。因为实际上在说:“系统为了避免局部错误,会选择维持全局冗余。”这和分布式系统里:
- replica 不愿缩减
- shard 不愿迁移
- leader 不愿切换
- consensus 不愿 reconfiguration
本质是同一种保守动力学。
尤其 cluster membership change 一直是分布式系统最难的部分之一。因为:“加入节点”是加资源;“移除节点”是改拓扑。后者危险得多。所以 Raft、Paxos 那些论文,对 membership reconfiguration 都写得非常谨慎。
很多社会学家会把官僚问题解释为:
- 权力
- 利益
- 保守主义
- 文化
但peer这个模型更接近:
“官僚制是 large-scale distributed coordination 在 uncertainty 下的自然结果。”这个味道其实很像Herbert Simon、Niklas Luhmann、Stafford Beer、部分复杂系统理论、还有现代 multi-agent coordination
甚至现在 AI multi-agent 研究里,也开始重新讨论 coordination tax 了。
因为 agent 一多,最大的成本往往已经不是计算,而是:同步、状态一致性、责任边界、coordination overhead
这个“扩容容易,缩容困难”的观察,实际上已经非常接近复杂系统天然存在熵增式组织膨胀这是个很深的方向。
有点意思。
突然又想起一个老事,pip 依赖解析为什么那么慢,以及uv为啥快。Rust和Node允许一个库多版本共存,python要求唯一。cargo用了 graph traversal,uv 则是基于 CDCL的 SAT solver。
这个 CDCL(conflict-driven clause learning) 是一种形式化验证技巧,学习冲突去剪枝。渊源来自于 PubGrub
我上班这么多年,大小,央企民企都待过。发现很多既定管理和流程,就是用最笨的堆人的办法去遍历,跟最老的 pip 一样。python的依赖包最早是个 setup.py 它被当成 .tgz 打包进 cheeze shop,你要去解析,得完整下载,解压。这些麻烦就不说了,最逆天的是他丫的不是声明式的,而是一个可执行文件,依赖是可以动态生成的。吐血。pip老遭罪了,得一个一个去下载,一个一个去问,然后一个一个去试。
是不是恰似某些部门办事的各种 “潜规则” ?哈哈哈
这些问题有没有解呢?可能终极形态,就是 Kubernetes 那样的吧。可观察性+声明式+状态推理
Comments