编辑
2021-03-09
P-Infra
00
请注意,本文编写于 1085 天前,最后修改于 50 天前,其中某些信息可能已经过时。

目录

需求分析
支援对象存储
支援多节点数据同步
支援跨平台访问
解决方案
FAQ
1. 为什么不使用 Syncthing 进行数据同步?
2. 为什么不用直接使用 Nextcloud ?
3. 有什么推荐的 S3 兼容存储吗?

前排劝退,这不是一个免费的个人云存储方案,它的实现需要你投入一定的成本。

需求分析

Perkeep [https://github.com/perkeep/perkeep] ( Golang 核心开发者的一个项目 ) 在其官方网站上探讨了如何实现一个永久保存个人文件的存储系统。从 Perkeep 所实现的主要功能来看,一个满足上述需求的系统应该具备以下几个特征。

支援对象存储

有很多只能使用 Local File System 的个人存储系统,使用这些存储系统时,往往需要在扩容和迁移方面需要投入额外的精力。因此,能够良好的对接诸如 S3 这样的对象存储的个人存储系统会成为你节省下很多时间成本。

支援多节点数据同步

能够从一个实例向另一个实例同步数据,这会让你的数据能够存放在两个地方,减少不可抗力所带来的损失。

支援跨平台访问

在实际使用上,我认为通用性与易管理性也是个人文件存储系统所应该考虑的。能够同时提供 Web、FTP 或是 WebDAV 的访问方式会极大的提高使用的便利性。

解决方案

使用 Pydio + Seafile + SftpGo + Rclone + Filestash 就可以完美实现上述需求。

  • SftpGo 能够对接 Azure Blob 以及兼容 S3 的对象存储,并提供 WebDAV 和 FTP 的访问接口
  • Pydio Seafile 能够对接兼容 S3 的对象存储,并提供 Web 以及多种平台的客户端, 还包括了 WebDAV 访问接口
  • Rclone 能够实现定期在多种对象存储之间进行数据同步
  • Filestash 能够提供通过 Web 的方式访问 WebDAV 和 FTP,并且支援文件分享功能。
  • SftpGo 自带的 Web Client 实际上已经满足基本的使用,并且同样支援文件分享功能,减少组件能够降低性能损耗和维护成本。

FAQ

1. 为什么不使用 Syncthing 进行数据同步?

Syncthing 很好,能够实时同步,不过遗憾的是 Syncthing 没有办法直接在两个对象存储之间完成数据同步。虽然可以通过将对象存储挂载到本地的方式完成这种操作。但是,你真的需要在两个对象存储之间实时同步吗?我认为通过 Rclone 进行定期的同步已经足矣满足个人用户的需求了。

2. 为什么不用直接使用 Nextcloud ?

Nextcloud 需要的硬件资源更多, 而 SFTPGo 只需要一台 512MB 内存的虚拟机,并且有着远超过 Nextcloud 的性能,改用 Seafile 后,内存需求虽然增加,但是性能依旧好于 Nextcloud。

3. 有什么推荐的 S3 兼容存储吗?

个人认为,国内的话,青云的对象存储还不错,而国外的话,Scaleway 或是 Blackblaze 是比较经济的选择。目前,我所使用的是 Scaleway 和 Azure Blob 做主要存储,使用这两种存储分别放大文件和小文件,大文件 Scaleway 经济一些,小文件 AzureBlob 速度快一些,而在备份方面则是选择了 Blackblaze。

本文作者:XiaFan

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!