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