群集中n个Web服务器之间的文件同步

时间:2015-11-06 08:55:52

标签: go synchronization consul

Web群集中有 n 个节点。文件可以上载到任何节点,然后必须分发到每个其他节点。这种分布不一定发生在事务中(实际上它不能,分布式事务不能扩展)并且一些延迟是可以接受的,尽管必须是最小的。冲突可以任意解决(通常是最后写入获胜),前提是分辨率也分配给所有节点,以便最终所有节点都具有相同的文件集。可以动态添加和删除节点,而无需重新配置现有节点。必须没有单点故障,并且不需要额外的盒子来解决这个问题(例如RabbitMQ)

我正在考虑使用consul.io进行动态配置,以便每个节点可以参考consul来确定哪些其他节点可用,并编写监视相关文件夹并与其他节点通信的守护进程(Golang) ZeroMQ。

感觉就像我会重新发明轮子一样。这是一个常见问题,我希望已经有一些我不知道的解决方案?或者也许我的方法是错误的,还有另一种解决方法吗?

1 个答案:

答案 0 :(得分:1)

是的,最近发生了一些分布式同步的事情:

您可以使用syncthing(开源)或BitTorrent Sync

Syncthing是基于节点的,即您将节点添加到群集并选择要同步的文件夹。

BTSync是基于文件夹的,即你获得了一个"秘密"对于一个文件夹,可以与swarm中的每个人同步该文件夹。

根据我的经验,BTSync具有更好的发现和连接性,但整个同步过程都是封闭源,没有人真正知道会发生什么。 Syncthing是用go编写的,但有时候很难发现同行。

syncthing和BTSync都通过广播和发现跟踪器AFAIK使用LAN发现。

编辑:或者,如果您真的很酷,请使用IPFS托管最新版本,IPNS为" name"并在服务器上安装IPNS。您可以将IPFS引导程序列表设置为某些服务器,这甚至可以使您独立于外部跟踪器。 :)