网络资源的存储

现如今网络资源已经又很多成熟的解决方案,其中对象存储运用最为广泛,它是整合了一整个对象存储的后端api,控制台等。
对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。
文件和对象都有与它们所包含的数据相关的元数据,但是对象是以扩展元数据为特征的。每个对象都被分配一个唯一的标识符,允许一个服务器或者最终用户来检索对象,而不必知道数据的物理地址。这种方法对于在云计算环境中自动化和简化数据存储有帮助。

对象存储经常被比作在一家高级餐厅代客停车。当一个顾客需要代客停车时,他就把钥匙交给别人,换来一张收据。这个顾客不用知道他的车被停在哪,也不用知道在他用餐时服务员会把他的车移动多少次。在这个比喻中,一个存储对象的唯一标识符就代表顾客的收据。

问题

我在使用对象存储的时候遇到了访问方式的问题,博客需要直链的方式进行资源访问,对象存储的访问使用的就是http进行的,而对象存储的api又很严格的鉴权方式,除非使用公开的桶进行保存,否则不使用鉴权的访问是无法进行的。但是又不能使用公开的桶进行实际生产,特别是api接口暴露在公网中,会被容易篡改公开桶的数据等,造成数据安全的问题。且一般博客是没办法生成鉴权过的请求的,都是直链,就很麻烦了。

解决方法

RollShow就由因此而生,程序适用于minioAWS S3的对象存储(AWS S3还没有测试过,因为没有亚马逊云,但minio-sdk理论是支持的),程序相当于博客资源展示列表站,可以看成前端(但是实际上也算服务端),而s3 api可以看成后端。因为minio本身是开源,而且支持二次编程开发,有很好用的sdk,使用直接用minio的sdk来解决这个问题。

RollShow

实现

rollshow从宏观上看就是给minio的api做了一个跳板,用来显示指定桶的对象,而且还能被下载,不需要鉴权和验证,而且不能通过rollshow来修改桶的对象,使用rollshow可以实现s3api无法直接与前端业务相连接,不但可以解决minio局域网配置TLS证书的蛋疼问题,也可以防止s3api暴露在公网的风险。

取名

RollShow,中文名为“展卷”,意为展示对象存储中的对象

项目地址 https://github.com/xinjiajuan/RollShow-go

性能

  • 程序使用golang编写,http服务器代码使用标准库中的对象进行编写,支持连接多个S3对象服务器以及桶。
  • RollShow凭借golang的高性能和高并发协程,在ab压力测试下可以获得很可观的数据
  1. 局域网1Gbps带宽下,1000并发获取桶中99个对象,用时5.491秒完成,平均每次请求54.911毫秒完成。
  2. 局域网1Gbps带宽下,100并发下载32MB的无损音乐,用时29.22秒,平均每次请求2337.602毫秒完成。

详见 https://github.com/xinjiajuan/RollShow-go#%E6%80%A7%E8%83%BD%E5%B1%95%E7%A4%BA

最后本项目采用MIT License开源