德问:大规模图片系统设计与架构方案

基本需求:设计一个图片服务器,能够高效的提供各种平台语言接口,包括上传、编辑、删除、切图、排序等功能,目前数据量大概是1亿张。

各个平台复杂需求:图片上传后需要立刻能显示,能进行删除、排序等操作。图片和实体资源有关联性:一个实体对应N张图片,或者对应1张图片,还有图片和实体的对应关系表存储。

图片转换:因为有些实体资源对应N张图片,一张图片对应N张大小的缩略图,若是上传时执行转换操作肯定会很慢,其中多的时候涉及到20来张图片的处理,所以一般得用异步处理。

图片存储:图片关系存储和图片文件存储规划都涉及到各个地方调用的简便性。

我说下我们现在的这个系统,node.js+redis+activemq ,现在遇到的很多问题包括需求复杂,需要大量的修改,还有当用户上传图片的时候,比如文章里面的图片上传,文章还没有完成时,既要进行图片的上传,如何做关联。前台列表页调用图片N张图片,需要循环读取,效率会很差。

基于以上的几点,请求各位,这样的系统如何设计,使用什么软件,什么结构,悉心听取大家的意见。

 

 

你的需求如果这么复杂,肯定要把图片地址的组织和分发独立出来作为一个单独的服务器,
存储图片的肯定是nginx 集群,或者是用CDN做前端缓存。要简单的做法就是对每张
图片hash,然后把hash值作为key 来在调用该图片的时候存在,然后根据图片hash 计算
出对应的服务器域名和地址,例如一张图片hash是68b329da9893e34099c7d8ad5cb9c940,
则计算出他的地址是http://68.img.com/b/3/29/da9893e34099c7d8ad5cb9c940.jpg
这样解决负载问题,同时多域名分发能突破ie单域名2线程限制提高图片加载速度。

@tipboy已经用redis和activemq,估计类似的设计已经考虑过了,现在如果还要有提高
就参照facebook的设计吧,就是提高组织和分发的效率,网上有较详尽的分析:

英文原文:
http://www.facebook.com/note.php?note_id=76191543919
中文译文:
http://www.kuqin.com/system-analysis/20120126/317600.html

猜你喜欢

转载自lfq618.iteye.com/blog/1953179