---
title: "分布式系统"
date: "2026-07"
category: "设计模式与架构"
tags: ["设计模式与架构"]
description: "分布式的关键问题在于使系统在运作中逐渐收敛到一致，核心有三个因素：设定的预期校准点、观测、误差。我们希望的是缩小贯彻和校准点之间的误差，因此每次测量后就可以得到应该修正的方向，然后不断迭代收敛..."
source: "https://enriquemark.com/zh-hans/posts/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F"
---

分布式的关键问题在于使系统在运作中逐渐收敛到一致，核心有三个因素：设定的预期校准点、观测、误差。我们希望的是缩小贯彻和校准点之间的误差，因此每次测量后就可以得到应该修正的方向，然后不断迭代收敛，这就是「协调控制环」。但是这一套显然存在一定的技巧，比如观察的锚点应该放在什么地方？控制器应该设置多少？

从复杂系统的角度上考虑分布式的问题，因为他的问题很明显，那就是配合和交叉，本质上人类的各个部门关系一样，错位，时序不一——我们的社会或者复杂系统中的任意一个子系统都是局部信息的，就和ABM的代理人一样，他只能依赖周边的其他人作为信号参考，最终总体涌现出秩序。我们不谈涌现，谈的是一个可控制的非复杂系统（至少目前的规模下是），那么他的情况会简单很多，但局部信息的问题仍然在。解决局部信息的问题要么是：共同标准，比如ISO或者是定期进行校准时间这样的广播，要么是由某一协调信号在整个系统中传播并让系统在运行中趋近于收敛。

对前者来说，实际上就是经典的契约对齐，所有人以一套共同的标准行动，从而在异步下达成配合一致性，这里的核心点是「约定」；而对后者来说，关键点不只是在于传播，还同时在于「合并」，收敛的方向得是确定性的，每个子系统在接收到该信号后应当都朝向同一个方向收敛，否则波动仍然会持久下去——从这里能发现，它仍然需要「约定」，收敛的方向显然是约定出来的。因此，两者并不矛盾。工程化的分布式子系统内，每个组件如何收敛是由我从最初就定义好的，我们的目的就在于使子系统在接收到特定信号后涌向那个「不动点」，即尽可能收敛至指定的全局状态。这里，我的设想是细胞，接收到激素信号时触发特定行为，每个细胞只关注自身，而不考虑外部，同时接受信号调控，这个信号不一定是中枢发送的，也可能是其他细胞发送的，构建成一个只以来自身的反馈循环。

工程上这叫做 Actor 模型 / 反应式系统，即将个别子系统视作细胞，时刻主动的感知外部状态并调控自身。各个细胞对外的信息广播是纯粹的发送，而不关心对方是否收到，具体的处置依赖自身的控制——这本质是外部无关的体现。因此，该模型下的消息传递是分等级的浓度（level-triggered，不断的对外部的重采样行为，水平触发)，在接收到信息后便自行触发，比如自带的守门，而直接拒绝指定的外部操作。但是，反应式系统是宏观稳态的，但不适合需要一次性稳健的「硬操作」，它依赖的是和细胞一样的「自愈」和在反馈中将错误波动「熨平」的冗余稳健性。对于「硬操作」来说，浓度感知的重采样可以保留，但也需要有足够硬的保证来确保其行为稳健性，比如分布操作的原子性守卫和检查兜底，而不能只依赖于冗余「自愈」。

很多此类分布式的问题归根结底都可以归结到「局部信息」，说白了就是「县官不如现管」，上面的跟下面的错开，一方信息和另一方信息不一致导致的错位——而借助现实中官僚系统的处置方案，解决这玩意儿一个有效举措就是「授权」。谁有权行动，这决定了现管的行为范围。权限控制，这也是同步县官和现管的一条线——确保现管的行为都在县官的知晓之内，保证即便最坏的情况下，现管的行为边界也是明确的。尽管现实中现管很难真的靠这套管住，但程序不是人，单向锁那就是单向锁，设定了只有某行为有权限，那就是只能此处有权限。
