Distributed Image Storage Server: zimg关于zimgzimg是我去年开源的一个图片存储程序,主要的优点是可以根据请求实时处理图片,并且进行压缩和存储,一是方便前端用户,二来降低流量。zimg设计之初就是面向中小型应用,是存储量小于TB级别的单机存储方案。它的1.0版本主要竞争对手是基于Nginx+PHP的图片服务器,因为采用了特殊的策略,zimg会比PHP快出很多。 更新:增加介绍zimg使用手册 分布式存储无论硬盘多么廉价,单机存储容量总是会有上限的,现在可能连一个中小网站所需要的图片都存不下了。分布式存储将数据分布存储于多台服务器上,一台不够了再加一台,理论上讲存储容量是无上限的。而且提高了存储服务的可靠性,如果机器够多,存储都做了冗余,那么即使某些机器出现故障无法服务,也可以方便地切换到备用服务器上,保证整体服务可用。 战斗吧,新版本!接下来介绍一下zimg 2.0的存储方案,看它有何新特性,以及是如何实现分布式存储的。 beansdb在去年1.0刚发布之后,就有同学给我推荐支持豆瓣的beansdb,因为beansdb本身就是豆瓣用来存图片的,在线上服务中经过了检验,我也去调研了一番,但是发现他们的分布式策略是用一个又慢又简陋的python脚本来实现的,经过这层proxy之后处理能力只有可怜的几十QPS,这样的性能跟zimg上千的图片处理能力相比实在太鸡肋,于是一度将beansdb放在了考虑范围之外。
zimg增加beansdb后端是很容易的,因为它采用的是memcached协议,而zimg第一版就支持memcached做cache。如果你希望采用beansdb做后端来存储图片,建议启用两台beansdb服务器做存储,再起一个beanseye做replication,这样数据会同时写入所有存储机上,实现了主从备份,即使一台挂掉beanseye也会自动从其他存储机上获取数据。 SSDBSSDB也是一款能持久存储数据的NoSQL数据库,支持的是Redis协议,它的优点是既有丰富数据类型的支持,也能高效的存储(底层采用LevelDB甚至是rocksdb做存储引擎),对于zimg来说,其实只需要用到set和get两个命令,更多的是对它的存储和在线备份功能的期待。
在SSDB支持备份功能后我也曾引入到zimg上进行了简单的测试,发现读取性能跟硬盘存储相近,也是十分值得一用。 如何选择Beansdb和SSDB不仅分别代表了memcached协议和Redis协议,也代表了两种完全不同的底层存储方案,都能极大地利用内存和磁盘,都有主从备份功能,到底谁优谁劣实在难以分辨。于是我对他们进行了测试,希望通过数据来表现各自的能力,进行最终的抉择。
【第一次简陋的测试】测试在一台服务器上进行,由于图片服务是一种读请求远远大于写请求的特殊存储服务,我的测试就只进行高并发读取,测试结果如下图所示: 【第二次测试】由于第一次测试样本太小,毕竟选择后端这样重要的事情需要慎重,于是我又进行了一次更加详细的测试,这次测试光是ab执行次数就达到了330次之多,整理统计这些数据都花费了相当长的时间。测试详细情况见测试报告,此处只贴出关键数据图: 根据上述测试结果显示,本地存储性能最好,SSDB略优于beansdb,但差别微乎其微,考虑到他们各有自己的优点,于是我最终决定: 数据分片确定了存储后端之后,其实已经拥有了replication的能力,zimg急需具备数据水平分片的功能。Memcached和Redis协议,数据分片,这些需求放在一起之后有没有觉得很眼熟,没错,如果你的服务中有用到过这两款NoSQL数据库,你肯定也曾想办法解决过它们的分片问题,那么最简单的方案就出来了:twemproxy。
由于引入了twemproxy,毕竟是多了一层代理,虽然有人说它最多只会比裸连慢20%,但本着实事求是的原则,我们还是要亲自测试一下才能知道,于是我又做了相关的测试,twemproxy后面各带两个beansdb和SSDB实例,测试结果如图所示: 图中结果是三次测试的平均值,可以看到,无论是beansdb还是SSDB,加了twemproxy性能下降极小,直接可以忽略不计。因此我非常建议各位用户在zimg和后端存储之间引入twemproxy代理。 架构zimg v2的部署力求简单,最佳的方案是zimg和后端存储分开在不同的机器上,因为zimg涉及压图,属于计算密集型,存储层无论是beansdb还是SSDB,都属于I/O密集型,而且由于zimg可以启用memcached做缓存,正好也可以充分利用机器上的内存,而存储机上的内存会被beansdb和SSDB用到,互不影响同时也不会浪费。那么一图胜千言,请看: 其他改动至此zimg新版本最重要的功能就介绍完毕了,这段时间零零散散还改了许多其他东西,也一并列在此处:
别的什么首先是后续计划。在存储稳定之后,更多的精力将向图片处理方向上转移,除了支持更多的图片处理功能,现在能想到的有以下几点:
然后有人向我咨询zimg的license问题,问我是否可以商业化,答案是可以的,希望大家随便用随便改,如果你的公司或者APP采用了zimg,希望在此处留言告知,或者发邮件通知我一声,邮箱是 |
|
来自: icecity1306 > 《产品设计》