为了她,我自研了一款现代化的网盘

相比 NextCloud 之类的网盘,ZPan 是一款更加现代化的网盘系统,它的底层使用业界通用的 S3 协议进行开发,这使得用户可以使用任何云存储来驱动它。你可以使用七牛云搭建一个免费的私人网盘给家人朋友或者员工使用,你也可以使用阿里云 OSS 搭建一个统一的资源管理系统给公司内部用。

# 起源

某度网盘,充了会员还这么慢,咋办啊? XX,你!赶紧给我弄一下啊!!

女票的抱怨又来了,我真的是很无奈啊。女票的网盘需求比较多,但是 Pandownload 的前车之鉴在那里,走灰色路线虽然也能解决问题,但始终有风险不是。那么,最根本的解决方式是什么呢? 对,那就是不用某度网盘!

都 0202 年了,提供对象存储的厂商比比皆是,甚至有的还有免费额度给你用。那么为什么不基于对象存储自己搭建一个网盘呢?

# 目标

那么,接下来就是想办法搭建一个基于对象存储的网盘。经过搜索,我发现大家搭建网盘一般用到的软件有 OwnCloud、NextCloud、Cloudreve、Seafile、Z-File 等。但是,经过了解我发现大多数网盘都是基于本地文件系统进行的存储,只有 Cloudreve 支持配置对象存储策略。

很显然,NextCloud 之类的传统网盘与我们的目标不符。那么选择就只剩下了 Cloudreve,经过试用,我发现 Cloudreve 总有一些我不满意的地方。虽然 Cloudreve 是一款开源产品,但一方面它是基于 PHP 实现的,再加上它的某些设计理念与我的设想实在不相符,所以最终决定还是自己用 Go 语言写一个。

# 设计

一般来说不管是上传还是下载都是需要经过服务器的,那么我们的上传下载速度就会受服务器带宽限制。比如一台 1M 的服务器它可以达到的速度就只有 128KB/s。那如果我们自建网盘,想要跑满自己家里的带宽(比如 200M),那你就需要一台同样 200M 带宽的服务器。而阿里云上一台 200M 的服务器带宽费用是 ¥660.48/天。

这显然是不可能的,自建网盘的成本这么高就啥都别玩了。别担心,我们另辟蹊径!那就是使用对象存储。那么什么是对象存储呢?

::: tip 对象存储 对象存储,也称为基于对象的存储,是一种数据存储,其中每个数据单元存储为称为对象的离散单元。对象可以是离散单元,类似于 pdf,音频,图像或视频文件。这些对象实际上可以是任何类型的数据和任何大小的数据。对象存储中的所有对象都存储在单个平面地址空间中,而没有文件夹层次结构。 :::

看完了是不是觉得还是不懂? 没关系,其实不用理解对象存储的底层实现,我们只需要知道各大云平台都提供了一种叫做对象存储的服务就可以了。在国内有阿里云的 OSS 和七牛的 Kodo,在国外有亚马逊的 S3 和谷歌的 Storage 等等。

对象存储天然的支持不限速的上传和下载,它是按存储量和下载流量计费的。而像七牛云会给予 10G 的免费存储空间。

# 基于 S3 协议

虽然我们可以单独的对接每一个云平台,但那样开发成本未免太高了。经过了解我们发现有一个叫做 S3 协议的东西,因为亚马逊是最早做对象存储的,所以它设计的 S3 协议各大云平台都有兼容(感谢 V 友提醒)。

那么,这样一来就很简单了,基于 S3 协议进行开发,可以轻松的对接所有对象存储云平台。另外开源社区也有基于 S3 实现的对象存储,像 MinIO。基于这种开源的产品,如果你不想用云平台,想要完全自建,那么也是可以轻松实现的。

# 直链传输

虽然对象存储不限速,但是网盘的运行服务器还是有带宽限制的啊。别担心,对象存储提供了一种直链传输的方式,也就是预签名链接。我们完全没有必要让流量到网盘服务器兜一圈,只需要将经过签名的 URL 告诉浏览器,浏览器即可直接将文件 PUT 到对象存储上去。

# 多存储切换

一般的网盘往往只能配置一个 bucket,或者不同用户组使用不同的 bucket。但是我们希望能让用户自行切换自己的 bucket,就像使用 windows 系统中的不同磁盘一样。如此一来,zpan 就可以作为一个统一的资源管理系统来使用。以后再也不需要对接不同的云存储平台、不同的 bucket,所有的资源全部归纳到 ZPan 里进行管理。我们提供多语言的 SDK,开发者可以快速集成到自己的项目中,5 分钟内完成与 ZPan 的对接,将您的资源文件上传到 ZPan。

# 进展与规划

# 目前进展

ZPan 是我的第二个开源项目,从技术角度来说这个项目还是很简单的。只是因为完全是用业余时间来做,所以项目进展较慢。从 v1.2 版本首次在社区亮相之后,目前我们完成了 v1.3 和 v1.4 两个版本的迭代,实现了很多基础的功能,像文件及文件夹搜索、文件夹的删除、音视频的预览播放、多语言的切换等等。两个多月的时间,项目的 star 逐渐超过 300+,虽然相比一些成熟的网盘显得很少,但毕竟我们刚刚起步,我相信未来 ZPan 会受到更多人的认可。

# 未来规划

ZPan 还是一个处于很早期的项目,它需要更多的帮助。我们未来主要会像两个方向发力,一是私人网盘方向。也就是对标某盘,在使用上让普通用户觉得好用。第二就是企业资源管理系统方向,我们希望能够帮助企业解决内部资源文件管理混乱的问题,降低对象存储的接入成本,节省人力投入时间。

# 彩蛋

你们知道为什么叫 ZPan 么?因为我的她姓张 💗

# 参考项目

ZPan 并不是第一个开源的网盘系统,我们在设计 ZPan 时借鉴了很多前辈的经验,这里一并说明并感谢。

  • NextCloud
  • Cloudreve
  • EyeblueTank
  • Dubox