我正在考虑构建一个基于云的同步解决方案(类似于 Dropbox):
健壮的架构会是什么样子?
您需要哪些技术来支持不同的平台,如 windows、mac、linux 和移动设备?
你会使用什么有效的同步算法?
我知道一个天真的架构/解决方案是:
对您的云存储进行网络调用并获取同步文件夹树结构(只是元数据信息)。
在客户端有一个文件系统监视器来构建本地同步文件夹树结构(我猜你会使用类似 lsyncd 的文件系统监视器?)
从上一次同步中检索同步文件夹结构。现在您在客户端上有 3 个文件夹树结构。使用这 3 棵树可以确定需要在本地文件夹上做什么以及需要在服务器上的远程文件夹上做什么。例如,使用某种特定于应用程序的预定规则添加、删除、编辑、解决冲突等。
这种架构可能就足够了,但魔鬼在细节中。如果同步文件夹树非常大(非常宽且非常深)怎么办。显然,需要一种有效的算法来确定差异。如果网络连接中断并且您没有正确获取或发送整个树怎么办?还仅发送文件差异以减少网络负载等。
我知道这些是我设计的东西,但我的问题是这个架构是否足够,我是否应该把时间花在细节上?Dropbox 是如何设计的,他们使用什么技术和算法来使大型文件夹结构和数据大小的同步如此高效?有什么资源/书籍我可以参考设计这样的东西吗?
提前致谢。