文档协作技术——Operational Transformations简单了解

文章探讨了运营转型(OT)技术在协作软件中的应用,强调了其如何通过副本文档、无锁操作和转换机制确保一致性。内容涉及一致性模型(CCI)、转换函数设计、操作执行流程、撤销和压缩策略,以及在分布式系统中的挑战和复杂性。

OT是支持协作软件系统的一种广泛使用的技术。

OT通常使用副本文档储存,每个客户端都拥有对文档的副本。客户端在本地副本以无锁非堵塞方式操作,并将改变传递到其他客户端。当客户端收到其他客户端传播的改变之后,通过转换应用更改,从而保证一致性

  1. 初始文档为"abc",并存在客户端A、B

  2. A发起操作O1=insert[0, “x”],在位置0插入字符x

    B发起操作O2=delete[2, “c”],在位置2删除字符c

在没有OT之前,加入O1发生在O2之前,那么执行O1之后字符串变为"xabc",执行O2之后由于位置2从原来的c变为了b,所以最终字符串会变为"xac",这并不符合预期

而利用OT的协作系统通常使用复制文档存储,其中每个客户端都有自己的文档副本。客户端以无锁、非阻塞的方式操作其本地副本,然后将更改传播到其他客户端。这确保了客户机在Internet等其他高延迟环境中的高响应性。

当客户端接收到从另一个客户端传播的更改时,它通常在执行更改之前对更改进行转换。转换确保所有副本都维护一致性标准(不变量)。这种操作模式产生的系统特别适合在web等高延迟环境中实现协作功能,例如同时编辑文档。

一致性模型——CCI

收敛性

所有文档副本在所有操作执行完成之后都要保持一致

意图保持

确保一个操作作用于所有文档副本的状态需与操作意图一致。操作意图定义为在操作者在其副本执行效果

因果关系保持

操作必须根据自然因果顺序执行

结构

  • transformation control algorithm:

    决定什么操作被转换,并以什么顺序转换

  • transformation properties and conditions:

    定义算法和函数之间关系,并验证算法和函数是否正确

  • transformation functions:

    负责根据操作的影响执行实际的转换。转换函数取决于操作的类型和参数,以及OT系统的数据和操作模型。

在这里插入图片描述

OT方法

以字符层面的OT方法为例

  • T({insert c1, p1}, {insert c2, p2}):

    // 例如插入b到位置4,应用插入a到位置3,那么转换之后就是插入a到位置3,因为插入b到位置4并不影响插入a到位置3
    // 如果是插入b到位置1,应用插入a到位置3,那么转换之后就是插入a到位置4,因为插入b之后,原来3的位置变成了4
    
飞书云文档实时协作技术的实现原理涉及多个关键方面。 在数据同步方面,主要采用了操作转化(Operational Transformation,OT)和冲突检测机制。当多个用户同时对文档进行编辑时,每个用户的操作会被封装成操作指令,这些指令会被实时发送到服务器。服务器接收到这些操作指令后,会运用操作转化算法对其进行处理,将不同用户的操作进行排序和合并,确保所有用户看到的文档内容一致。例如,用户 A 和用户 B 同时对同一段文字进行修改,操作转化算法会根据操作的时间戳等信息,决定如何合并这两个操作,避免数据冲突[^1]。 在实时通信上,使用了 WebSocket 协议。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许客户端和服务器之间进行实时、双向的数据传输。在飞书云文档中,客户端通过 WebSocket 与服务器建立连接,当用户进行编辑操作时,客户端会立即将操作信息通过 WebSocket 发送给服务器,服务器再将这些信息广播给其他正在编辑该文档的客户端,从而实现实时更新。以下是一个简单的 WebSocket 客户端示例代码(使用 JavaScript): ```javascript const socket = new WebSocket('ws://example.com/socket'); socket.addEventListener('open', (event) => { console.log('Connected to the server'); // 可以在这里发送初始消息 socket.send('Hello, server!'); }); socket.addEventListener('message', (event) => { console.log('Received message from server:', event.data); // 处理接收到的消息,如更新文档内容 }); socket.addEventListener('close', (event) => { console.log('Disconnected from the server'); }); ``` 在数据存储和版本管理上,采用了分布式存储系统和版本控制技术。每次用户的操作都会被记录下来,形成文档的不同版本。当出现冲突或需要回溯时,可以通过版本控制机制恢复到之前的版本。同时,分布式存储系统保证了数据的可靠性和可扩展性,确保大量文档数据能够高效存储和访问[^1]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值