类似dropbox、evernote以及国内的有道云笔记等云应用如何实现同步的?

发布于 2022-08-24 08:50:25 字数 58 浏览 21 评论 0

在一处更改文件内容,另一处很快就会同步。
这个过程中,如何实现文件的比对,以及推送内容的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

飞烟轻若梦 2022-08-31 08:50:25

对于dropbox,我也只是从使用体验上来说一说,并没有仔细研究。
首先,肯定每一个文件都有版本号,并且版本号可能还有一种算法,这个算法肯定不会是单一要素,如根据时间或者存储的上一个文件之间的对比,因为还要面临离线状态下的文件更新。
再,dropbox为了体验比较快速,当你删除文件的时候其实他是存放在本地的隐藏目录,这样如果你撤消删除的时候,可以很快的恢复,而不需要重新在下载。
再,对于@iammutex 说需要人肉解决冲突,我所知道的是dropbox应该是自动解决的,对于用户是透明的,所以自动解决冲突肯定也要有一个比较全面的方案,这样可以将面临各种终端设备的问题。
最后,dropbox服务器端肯定是存储一份最完整的文件结构和文件列表,而且肯定也会有文件的md5或者hash的方法保证文件的完整性,进行相应的对比,还要有一个机制可以让文件自动的同步,文件的自动同步分为两种,一种是各客户端在打开软件之后进行同步,这个比较容易实现是客户端发起的;另一种是其它客户端更新之后,服务器告之其它同时在线的客户端同时进行更新,我想应该是对客户端加入了一个计划任务隔一段时间主动与服务器端进行联系(如果是服务器主动告之客户端更新,我想难度很大,光客户端ip就是非常难判断的事,所以dropbox的的更新应该不是及时的,而是有延时的)。
以上只是自己思考的dropbox实现的几个难点和猜测他的工作方式。我也很关注这个问题。

月牙弯弯 2022-08-31 08:50:25

内部协议没研究,不过原理上应该就是做一下diff,把diff结果传到服务器。另一端从服务器获取到这个diff,再将修改施加到自己本地的内容中就行了。
当然,每次diff应该都会有版本号,如果收到的修改版本比当前本地版本更小,那说明有冲突,就需要人肉解决冲突了。
-----------------------------------
补充一下,人肉解决冲突这个我指的是evernote,对同一个版本,在不同终端进行修改后提交。后提交的终端会接收到带有冲突标识的文档。标识形式和svn冲突后的展示差不多,需要手动合并一下才变成正常文档。如图是我简单的实验结果
屏幕快照 2012-09-29 上午10.53.09.png
dropbox没遇到过冲突,不过据我猜测,dropbox更多的是一种last win的模式,就是按先来后到,最新的版本直接覆盖旧版本。所以说也可以理解为无版本管理的概念。
而从evernote付费版提供的历史版本查询功能来看,evernote是肯定有版本控制,冲突监测在里面的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文