Distributed System 5: Bayou Algorithm
- 分布式系统
- 1天前
- 16热度
- 0评论
分布式一致性
怎么在弱网情况下保证事件一致性,弱网指的是,只能时不时连接一下
Bayou算法
Bayou 是 1990 年代中期由 Xerox PARC 提出的一个早期分布式协作数据库系统(由 Terry、Demers、Pajankar 等人设计),它是后来 eventual consistency 和 CRDT 等思想的先驱之一。
它最初是为了移动设备和断网协作编辑场景设计的——在当时笔记本、PDA 之间网络很不稳定,但用户仍希望多个节点能共享、更新同一份数据。
Bayou 的目标是:
在没有中心协调者、网络不可靠甚至分区的情况下,让每个副本都可以独立地读写数据,并最终达成一致。
它实现的是一种 弱一致性 / 最终一致性(eventual consistency) 模型,通过「乐观复制 + update 日志传播 + 应用级冲突解决」来实现。
Bayou 是分布式系统史上非常有启发意义的项目:
- 它在 1995 年就探索了离线协作 + 最终一致性 + 冲突解决函数;
- 其思想影响了后来的 Amazon Dynamo、CouchDB、Riak、CRDT、Conflict-free Replicated Datatypes 等;
- 可以认为是「从强一致性数据库到现代 NoSQL 的过渡性原型」。
Intelligence that can identify and resolve conflicts
• More like users’ updates: read database, think, change request to eliminate conflict
• Must ensure all nodes resolve conflicts in the same way to keep replicas consistent
开会冲突:
节点X会走A,节点Y会走B
解决冲突的idea:全局日志文件
大家只要按照全局日志文件执行就可以了(github)
全局日志 example
马上更新!
idea:所有的一致性是临时的一致性,只有联网了,才能最终同步
⚙️ 系统机制
1. 每个节点都是可读写副本
所有副本都维护一份完整的数据库拷贝。
每个副本都可以本地执行 write
操作,即使当前离线。更新会被记录成一条 update log entry。
2. Update 日志的传播
节点恢复网络连接后,会将自己的更新日志与其他副本进行 anti-entropy(反熵同步),即:
-
按时间戳或版本号比较日志;
-
互相发送缺失的更新;
-
应用新的更新到本地数据库。
3. Tentative 和 Committed 更新
Bayou 的一个关键特性是区分:
-
Tentative(暂定)更新:在本地执行但尚未被所有副本确认;
-
Committed(已提交)更新:通过某种全局顺序(由“primary replica”决定)确定执行顺序后,才算最终确认。
每个副本都执行相同顺序的 committed 更新,因此最终收敛。
4. Conflict Resolution(冲突解决)
由于更新可能并发、乱序,Bayou 让应用层提供冲突解决函数(conflict resolution procedure):
-
每条更新都携带一段可执行逻辑,用于检测并解决冲突;
-
例如两个用户修改相同字段时,可以合并、覆盖或提示用户手动解决。
特性 | Bayou | Git / GitHub | 相似点解释 |
---|---|---|---|
副本模型 | 每个节点都有完整副本 | 每个 clone 仓库都是完整副本 | 都是「多主复制」(multi-master replication) |
写入模型 | 每个副本都可本地写入(offline update) | 本地 commit 可以离线执行 |
支持离线写、断网提交 |
更新传播 | Anti-entropy(对比日志、同步缺失更新) | git fetch / git pull / push |
都是基于“日志比对 + 合并”的同步 |
冲突解决 | 应用层函数解决冲突 | 人工/算法执行 merge / rebase |
都需要解决并发修改冲突 |
最终一致性 | 最终所有副本日志一致(通过全序 commit) | 最终所有分支 commit DAG 一致 | 异步收敛、不是实时一致 |
版本顺序 | Tentative → Committed | 本地 commit → main branch merge | 只有被合并的才是“全局已提交” |
特性 | Bayou | 现代系统类比 |
---|---|---|
副本模型 | 全对等(每个节点都可写) | DynamoDB, CouchDB |
一致性 | 最终一致性 | Dynamo-style, CRDT |
更新传播 | Anti-entropy(日志同步) | Gossip protocol |
冲突处理 | 应用层自定义函数 | CRDT merge、custom resolver |
时间顺序 | Tentative → Committed 两级 | “causal + total order” hybrid |