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

相比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/天。

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

对象存储

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

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

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

# 基于S3协议

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

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

# 直链传输

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

img

# 多存储切换

一般的网盘往往只能配置一个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