请问老师,问题1: Document Service 在做 图1 第5步 compute transform for each client 的时候, 是需要知道each client 的 current version id么? 我的理解是这个是必须要知道的,否则没法compute transform. 那么这个信息是存储在server端还是client端?如果是存在server端,那么client端做edit的时候需要发送start version ID(图2 第1步)就是不必要的。但是如果是存在client端,那么compute transform 前就需要向client询问其current version, 感觉cost很高并不合理。
计算时需要知道 client 发送的变化基于的版本号。在服务器端会存储版本变化的历史和其中的所有版本号。Client edit 时仍然需要发送 start version id,因为 client 并不一定是基于最新版本进行的更新。
图二描述的是服务器和客户端之间的数据流,可以支持两台以上的机器同步。图三描述的是 OT 的算法,讲的是两台机器如何同步。讨论的问题不一样,所以不是一一对应的关系。图三因为讨论的是两台机器之间的情况所以没有fanout的概念。图二的第三步是从服务器向客户端发送客户端需要做的修改,肯定是需要最终版本号+更新的,否则客户端没办法根据服务器端接收到的其他客户端的更新请求来更新本地的状态。