jImage图像服务器的设计要点
(http://wiki.jteam.cn/bin/view/Main/image-server)
1. 集中访问,分布存储
对着下图,有以下几个特性:
1) 用户总是上传图像到离自己最近的一个节点,保证上传最快完成
2) 上传完成后,有一个全局的图像信息记录,用来指明图像所处的节点和存储信息
3) 如果在某个节点上请求了其他节点的图像,会自动将其他节点的图像抓取过来并保存
2. 原始图像与衍生图像
原始图像是指图像上传的最初图像,衍生图像是指上传后对用户图像进行任何转换的图像,比如缩放,旋转,特效。在Web应用中,衍生图像的访问比例要远远大于原始图像。
针对这个需求设计以下几个特性:
1) 原始图像和衍生图像分开存储
2) 衍生图像可以删除,衍生图像可以由原始图像进行转换得到。
3. 静态与动态需求
在Web应用中,需要大量的用到衍生图像,比如用户上传了一个头像,可以在其他地方需要用 40x40,100x100 这些衍生图像,而具体有哪些衍生图像类型是很难预料的,尤其在web应用快速变化的时候。
针对这个需求设计以下几个特性
1) 衍生图像都是由一个处理器通过原始图像转换得到。
2) 但访问的衍生图像不存在的时候,则由处理器动态生成 比如,用户上传了一个头像, a1234.jpg
通过 a1234_1_10x10 就可以得到一个10x10 的用户缩略头像,其中 1 就是代表的缩放的处理器,10x10就是参数,以此类推。
4. 特殊需求
在web应用中,还存在以下几个特殊需求
1) 限制图像的访问,需要密码才能访问图像
2) 对图像进行访问计数
试一下: TODO