代码撸了十多年,对开源世界一直是默默汲取,从不奉献,一直深感自责。
人到中年,需要做点什么,对这个世界有所交代,不求兼济天下,但为宽慰吾心。
近期项目需要一个简单的文件上传下载服务,找了一圈似乎都不如意,于是用golang自己撸了一个,索性就放到github上了,取名simple image server,简称sis(https://github.com/DDHax/sis)
既然名字都叫简单图片服务了,一切以简为宗旨。主体代码不到500行,不需下载安装任何第三方依赖,采用http协议实现了常用的图片上传、下载、伸缩接口。
关于MD5文件名:
一般常见的方案都是MD5码作为文件名存放于服务器,而SIS使用的是MD5码打散后作为文件目录,文件名和用户上传时的原始名称保持一致。这么做的目的是为了解决MD5碰撞的问题,虽然概率上说,发生碰撞的几率很小,但是很小不表示不会发生,况且现在伪造两个MD5相同但内容不同的文件并非难事。一个理论上都有明显瑕疵的设计,对于一个严谨的程序猿来说是不可容忍的吧。当然,这么做带来的坏处是下载时除了提供MD5码外,还需提供原始文件名,这视乎违背了追求简单的原则,于是SIS仍然提供了只需MD5码下载的接口,使用该接口需假设不会发生MD5碰撞。
我想关于SIS只需解释不用MD5作为文件名的原因,其他看代码足矣。
sis安装使用都非常简单,MIT开源协议可随意copy随意改。目前已发布1.0版,按照计划是2.0加入cache,3.0实现分布式,3.0会是完结版
当然,这只是一个自嗨的项目,如果1.0受众面太小,就不会有2.0和3.0了 :)
关于sis的性能
所谓没有比较就没有伤害,各种开源项目发布的时候总要比较一下自己的性能超过同类多少多少,但是SIS不会有官方横向比较。如果比的话,只会有1.0,2.0,3.0的性能比较,目前1.0已经实现了性能测试客户端,单机测试结果如下:
BenchmarkUp-4 2000 911967 ns/op
BenchmarkDown-4 2000 650215 ns/op
BenchmarkStretchDown-4 1000 1772537 ns/op
那么,为什么没有跟其他同类项目的比较呢?真的是怕伤害别人或自己吗?NO,其实原因就一个字:懒!
另一个原因是,每种项目的实现方案不一致,导致很难在同等条件进行测试,而各种项目都有自己的优化方案,要一一去研究部署测试,想起来就头大。但是,我说的是但是,计算机科学是计算科学,不是实践科学,性能在设计之初应该会有个理论位置,而sis的位置应该是在php和zimg之间,更靠近zimg的位置。如果那位看官有兴趣做横向测试,也欢迎把结果告诉我。
728

被折叠的 条评论
为什么被折叠?



