首先,这是我一直同时在用的 3 个开源同步服务。那为什么我要同时用着多个同步服务呢?主要是因为它们各有优势,有一些无可替代的功能。Resilio Sync 高级版提供的 可选择性同步,让我用 0KB 的占用空间,可以得到所有文件的目录和名称。在我需要的时候,又能以极快的速度下载到本地。这是个我使用极少的功能,但是却是使用中最为爽快的一个功能。分享和下载的时候,我都毫无负担,因为它们都不存在于本地,我只用下载自己想要的文件。Nextcloud 提供的文件 分享 可以让你有更多的选择以及权限控制,只用一条 url 链接,你就可以简单的分享给需要的人,而且还能提供文件操作动态,你可以知道文件在什么时候做了哪些变动,这对你希望监控文件动态的时候非常好用。并且它还提供许多不同类型的 App 拓展,其中包括 Rss程序、Keepass管理程序、音乐播放、视频播放 等诸多功能。Syncthing 这是我 个人文件同步 的主力服务,我用它进行跨设备同步和备份。它是我的 Inbox 文件夹,收集着每台设备上的数据,我用它来进行 数据、库、配置 等文件的同步。它的优点也非常简单,安装简单,网络要求低,提供完善的版本控制。我只需要后台开启,配置好,就无需再担心。当然,我并不单单只依赖上面 3 个同步服务(当然rsync、webdav、ftp我也用,但这不在讨论范围内。),我还搭配电脑的备份服务进行备份。家庭文件服务器还会有快照计划,重要文件也会定时冷备份。这样,我才能任性的对待数据,并再也不用担心它们会消失不见了。: )下面,我们进入正题,对比一下 3 款同步服务的优缺点吧。1. 平台覆盖平台SyncthingResilio SyncNextcloudiOS✘✔︎✔︎Android✔︎✔︎✔︎macOS✔︎✔︎✔︎Windows✔︎✔︎✔︎Linux✔︎✔︎✔︎Linux Arm✔︎✔︎✔︎Docker x86✔︎✔︎✔︎Docker Arm✘✘✔︎Nas System✔︎✔︎✘PS: 主要统计的是官方支持的平台。第三方方案,不计入统计。这里比较遗憾的是 Syncthing 并没有 iOS 客户端,曾经有一款但是现在已经下架了,我手机端主要用 Nextcloud 偶尔用 Resilio Sync(毕竟只同步大文件用)。docker arm 不支持的服务需要自行构建(第三方也可),通常支持 linux arm 的都支持 docker arm,但是官方只构建了 x86 版本。Nextcloud 的 Nas 版本很可能是有的,但是 Nextcloud 官方没介绍,NAS 系统 官方库一般也有下载,毕竟这个服务很普遍了。2. 功能对比功能SyncthingResilio SyncNextcloud版本控制阶段性版本控制回收站限客户端网络环境1. 同步无限制2. 中区中转服务器稀少1. 同步无限制2. 设备发现需国外环境1. 同步无限制2. 应用下载需国外环境3. 部分应用依赖国外服务同步速度1. 内网满带宽2. 外网依赖中转服务器带宽1. 内网满带宽2. 外网依赖同步设备带宽总和1. 内网满带宽2. 外网依赖部署服务器带宽WebDav✘✘✔︎选择同步✘✔︎(高级版)✘文件加密✘✔︎(加密文件夹)✔︎(需设置)同步加密✔︎✔︎✔︎(需启用https)部署难度低低高文件分享✔︎(只能整库分享)✔︎(只能整库分享)✔︎权限管理✔︎✔︎✔︎2.1 网络问题这里重点讨论一下主要影响大家使用的网络问题。2.1.1 Syncthing 的同步速度为什么那么慢?先说结论,原因是由于对 Syncthing 开放且距离你最近的 中继服务器 过少并且速度较慢导致的。PS: https://relays.syncthing.net/ 这里可以看到开放的 中继服务器 列表。(个人使用的中继服务器可以不开放)最开始用的时候,我并没有觉得这个问题影响使用,因为数据量不大(都是配置文件),也就没有在意。自从 Resilio Sync 因为众所周知的问题挂了以后,我把大量同步任务也迁移到了 Syncthing,其中就包括了 虚拟机、多媒体文件、下载的系统文件、备份文件 等大文件数据。但这就要了命了,几十 kb 的速度同步至少按周来算,而且是不关机的那种。这时候,我就想了 2 个办法先缓缓。通过复制/同步到目标机器的方式,把所有文件传输过去。(这种方式不治本,因为虚拟机变化产生的文件很大,如果不经常变动,你可以采用此方法。)修改 文件拉取顺序 为 小文件优先。在文件夹 选项->高级->文件拉取顺序 中修改。——————– (想治本的同学看这里)我是善良友好的分割线 ——————–当然以上方法都是不解决根本问题的。真正解决问题的办法是,自建中继服务器(划重点)。如何构建 Syncthing Relay Server。(官方英文文档)如何设置 Relaying。(官方英文文档)我在测试过的的docker镜像 t4skforce/syncthing-relay。(构建源码可参考)碍于篇幅,这里不能教大家如何去部署。先提供一些资料给大家参考。 : )2.1.2 Resilio Sync 为什么无法找到设备?先说结论,原因是 Resilio Sync 的 trackers and relays 服务器无法访问。解决办法也很简单,让无法访问的地址走代理就可以了。获取配置文件 https://config.resilio.com/sync.conf参考图:碍于篇幅,细节就略略略了。 : )Nextcloud 为什么无法访问应用页面下载应用?先说结论,原因是因为应用商店无法访问。你可以自行去 GitHub 下载 App 项目。并解压到 NEXTCLOUD-PATH/apps 目录下,按照项目教程进行部署。解决部署服务器无法访问 Nextcloud App Servier 无法访问的问题。碍于篇幅,略略略。 : )2.2 版本控制既然和数据有关,那最害怕的是什么?那当然就是数据 同步异常、数据丢失、数据误删、意外导致数据丢失 等数据消失不见的严重问题了。——————– (结论看这里)我是善良友好的分割线 ——————–这里不讲如何保障数据,直接说结论:以上软件所提供的版本控制,都无法完全保证数据同步过程中不丢失。所以不要认为有了版本控制,数据就可以随意处理了。有时候你想找回某个数据还真不一定找得到。(自行搭配快照、副本、备份。)——————– (评测看这里)我是善良友好的分割线 ——————–Syncthing 提供的 版本控制 非常多,可以适应多种场景下使用。其中 阶段版本控制 提供了 小时 级别的历史记录,最大程度的保障数据安全,并且提供了历史记录查看器,可以很方便的查看历史记录,并恢复。基本上,它可以适应所有个人同步需求,并且同步过程中对数据也相对安全。参考图:Resilio Sync 并不提供版本控制功能,只有最简单的回收站机制。甚至你也不清楚有没有放入回收站。所以它只适合 分享型、大文件型、变动少、文件相对而言不那么重要、目录层次少结构不复杂 等使用环境。我基本上,都是用来放大文件和多媒体文件。Nextcloud 提供文件变化版本控制,但仅限于使用其客户端的方式。通过 WebDav 等访问的方式,是 没有版本控制 的,由于其使用数据库来记录所有文件,所以文件数量和结构,考验着你的数据库服务器。并且其 http 传输原理导致默认对 文件大小 有所限制。当然以上问题,都能通过其他方法来解决,但是我仍然 不推荐用来作为主要的同步服务。但是其丰富的拓展性,以及详尽的文件记录,非常适合 分享 和 多人协作,适合对外提供服务,可以弥补 Syncthing 这类个人同步服务的短板,也就是协作和分享。3. 结语这 3 款开源同步服务,在同步速度上,都是可以满速运行的,同步速度上体验没多大区别。但是由于各自服务的机制不同,需要一定动手能力,才能达到最佳效果。以上只是对这 3 款开源服务的一些细节做了一些对比。如果大家有比较关心的其他细节,再做补充。Bye. : )