文档协同编辑的同步算法
本文是一篇老文章,讲了很多种 Differential Synchronization 算法 - 这种算法可以用于多人实时编辑的文档应用。文章有点老不晓得快10年过去了算法有没出新的,当时的技术有三种:ownership, event passing, three-way merges, 没有最好的算法,看场景.
- Locking: 加锁,任一时刻只能一个用户编辑
- Event Passing: 所有用户编辑通过事件发送到服务器,再转发给其他所有用户。通过 Operation Transformation 算法保障序列合并。这些序列包括:typing, editing, cut, paste, drag, drop, replacements, autocorrect. 如果编辑其更高级,这些序列可能会更多。
- Three-way merges: 类似 SVN:client 发送全文,服务器做一次 3way merge 找到 change, 合并后将新的全文发给其他 clients。一般在停止 typing 后发出去。不适用有网络延迟的场景。
一般来说,Latency 是这些算法的天敌。我们没法预知 network packet 到达的时间。设想,Belters 和 Earthers 一起协同编辑文档,简直要崩溃。
衍生思考:曾经写过一次 diff 算法,case 太复杂了,希望博士们好好努力,提供一个好算法啊。