EnriqueMark
設計模式與架構

分散式系統

2026-07 繁體中文

分散式的關鍵問題在於使系統在運作中逐漸收斂到一致,核心有三個因素:設定的預期校準點、觀測、誤差。我們希望的是縮小貫徹和校準點之間的誤差,因此每次測量後就可以得到應該修正的方向,然後不斷迭代收斂,這就是「協調控制環」。但是這一套顯然存在一定的技巧,比如觀察的錨點應該放在什麼地方?控制器應該設定多少?

從複雜系統的角度上考慮分散式的問題,因為他的問題很明顯,那就是配合和交叉,本質上人類的各個部門關係一樣,錯位,時序不一——我們的社會或者複雜系統中的任意一個子系統都是局部資訊的,就和ABM的代理人一樣,他只能依賴周邊的其他人作為訊號參考,最終總體湧現出秩序。我們不談湧現,談的是一個可控制的非複雜系統(至少目前的規模下是),那麼他的情況會簡單很多,但局部資訊的問題仍然在。解決局部資訊的問題要麼是:共同標準,比如ISO或者是定期進行校準時間這樣的廣播,要麼是由某一協調訊號在整個系統中傳播並讓系統在執行中趨近於收斂。

對前者來說,實際上就是經典的契約對齊,所有人以一套共同的標準行動,從而在非同步下達成配合一致性,這裡的核心點是「約定」;而對後者來說,關鍵點不只是在於傳播,還同時在於「合併」,收斂的方向得是確定性的,每個子系統在接收到該訊號後應當都朝向同一個方向收斂,否則波動仍然會持久下去——從這裡能發現,它仍然需要「約定」,收斂的方向顯然是約定出來的。因此,兩者並不矛盾。工程化的分散式子系統內,每個元件如何收斂是由我從最初就定義好的,我們的目的就在於使子系統在接收到特定訊號後湧向那個「不動點」,即儘可能收斂至指定的全局狀態。這裡,我的設想是細胞,接收到激素訊號時觸發特定行為,每個細胞只關注自身,而不考慮外部,同時接受訊號調控,這個訊號不一定是中樞傳送的,也可能是其他細胞傳送的,構建成一個只以來自身的反饋迴圈。

工程上這叫做 Actor 模型 / 反應式系統,即將個別子系統視作細胞,時刻主動的感知外部狀態並調控自身。各個細胞對外的資訊廣播是純粹的傳送,而不關心對方是否收到,具體的處置依賴自身的控制——這本質是外部無關的體現。因此,該模型下的訊息傳遞是分等級的濃度(level-triggered,不斷的對外部的重取樣行為,水平觸發),在接收到資訊後便自行觸發,比如自帶的守門,而直接拒絕指定的外部操作。但是,反應式系統是宏觀穩態的,但不適合需要一次性穩健的「硬操作」,它依賴的是和細胞一樣的「自愈」和在反饋中將錯誤波動「熨平」的冗餘穩健性。對於「硬操作」來說,濃度感知的重取樣可以保留,但也需要有足夠硬的保證來確保其行為穩健性,比如分佈操作的原子性守衛和檢查兜底,而不能只依賴於冗餘「自愈」。

很多此類分散式的問題歸根結底都可以歸結到「局部資訊」,說白了就是「縣官不如現管」,上面的跟下面的錯開,一方資訊和另一方資訊不一致導致的錯位——而藉助現實中官僚系統的處置方案,解決這玩意兒一個有效舉措就是「授權」。誰有權行動,這決定了現管的行為範圍。許可權控制,這也是同步縣官和現管的一條線——確保現管的行為都在縣官的知曉之內,保證即便最壞的情況下,現管的行為邊界也是明確的。儘管現實中現管很難真的靠這套管住,但程式不是人,單向鎖那就是單向鎖,設定了只有某行為有許可權,那就是隻能此處有許可權。