文档章节

电子商务文件存储及读取服务的设计和开发思路(JMagick用于生成高清的缩略图)

一枚Sir
 一枚Sir
发布于 2014/06/19 20:09
字数 1220
阅读 125
收藏 2

商品图片,平均200-500K,说大不大,说小不小,但量大且细碎,通常通过页面上传,全部保存在文件里,管理和索引都很慢,几乎无法备份,读取也很慢。

传统的基于磁盘存储的缺陷: 
1、 图片存储和应用程序在一个服务器上,图片的读取占用大量的磁盘IO,在访问量高的时候,图片读取和应用程序相互影响。特别互联网环境下的文件多以几K,几十K的小文件为主,磁盘寻址和读取,缓存命中率都比较低。 
2、 当规模大到一定程度,应用服务器将扩展到多服务器集群环境中,传统的磁盘存储在集群环境下面临集中存储的挑战。
3、 基于磁盘的存储,在面临未来扩容的情况下,也显的能力不足,通过增加磁盘的容量很快将达到极限,最好的方法还是多服务器集群的存储。所以在存储和读取上的难度将陡然增加。

所以鉴于此,放弃简单的磁盘存储,而且各大互联网公司都有自己的文件系统,google的GFS,淘宝的TFS,其他中小型的网站,会采用类似于mogileFS这样开源的文件系统。所以利用开源的文件系统来搭建我们自己的文件系统、文件服务器以及文件的存取服务。

在众多开源的文件系统中,我们选用MongoDB的GridFS作为文件存储服务。

MongoDB特性 MongoDB是一个可扩展、高性能的下一代数据库,由C++语言编写,旨在为web应用提供可扩展的高性能数据存储解决方案。它的特点是高性能、易部署、易使用,存储数据非常方便,主要特性有: 
1. 模式自由,支持动态查询、完全索引,可轻易查询文档中内嵌的对象及数组。 
2. 面向集合存储,易存储对象类型的数据, 包括文档内嵌对象及数组 。 
3. 高效的数据存储,支持二进制数据及大型对象(如照片和视频) 。 
4. 支持复制和故障恢复;提供了主-从、主-主模式的数据复制及服务器之间的数据复制。 
5. 自动分片以支持云级别的伸缩性,支持水平的数据库集群,可动态添加额外的服务器 。 

在OECP社区(http://www.oecp.cn)中,我们也初步使用了mongodb,实践证明mongodb从效率和稳定性上都是有保障的。 
GridFS和传统的MogileFS不同, gridfs可以和其它的meta数据部署在同一个 db中,默认的会为gridfs的collection分别创建fs.files和fs.chunks. 当存储一个文件时,可以附加存入任意的附加信息,因为这些信息实际上也是一个普通的collection. GridFS的一个优点是可以存储上百万的文件而无需担心扩容性. 通过同步复制,可以解决分布式文件的备份问题. 目前,mongo支持主-从和Replica Pairs以及受限的Master-Master Replication. 比较实用的还是前2种. 

选择了存储的方案后,我们需要对电子商务网站的图片的存储和读取进行整体的架构设计,设计思路: 
? 决不允许重复图片存在,利用MD5进行判断 
? 文件只有原始的需要保留,其他各尺寸和效果都可以由原图生成 
? 图片URL总是固定的,不管它出现在哪里 ? 缩略图生成规则也简单的体现在URL里 
? 第一次请求,由图片处理程序生成静态文件,以后请求即直接定位到静态文件

下图为图片存取流程图:

所用到的技术组件:
1、    MongDB,第一阶段采用单服务器,后期演变到M-S架构
2、    Nginx: 解析URL并定位到静态文件,如果未生成则转向程序去生成图片
3、    JMagick:用于生成高清的缩略图
4、    spring-data:用于对MongoDB的操作


下一步的工作主要是:
1、    对MongoDB的封装
2、    对文件系统的存储实现和应用程序的读取
3、    将文件系统作为OECP平台的系统组件进行包装

延伸:基于MongoDB的日志服务和用户行为分析的架构设计及实现策略的考察和尝试

案例: 视觉中国的NoSQL之路:从MySQL到MongoDB : http://blog.nosqlfan.com/html/1155.html 视觉中国MongoDB开发应用实践 : http://www.infoq.com/cn/presentations/pf-mongodb-develop

本文转载自:http://my.oschina.net/taisha/blog/122852

一枚Sir
粉丝 119
博文 209
码字总数 350904
作品 0
朝阳
架构师
私信 提问
加载中

评论(1)

Haides
Haides
水多
JMagick ImageMagic的使用

ImageMagick一个优秀的图像处理软件,JMagick是对ImageMagickJAVA面向对象化包装。 现在谈谈如何在WINDOWS环境下、LINUX环境下这两款软件的安装与使用。并制作了一个缩略图的产生程序。 1、安...

红薯
2009/01/25
3.2K
0
生成高品质缩略图,jmagick使用指南

现在web应用经常会用到缩略图。然后一旦生成的缩略图小于100px * 100px,一些常用的java包,生成的图片确实有点惨不忍睹。 研 究了半天才研究出来,希望能让刚用到的朋友有点帮助。 现在介绍使...

红薯
2009/01/25
3.4K
0
ImageMagick高清压缩图片-GraphicsMagick+im4java

之前有写过imageMagick压缩图片的文章,但是那篇文章中用到的是jmagick。 JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagick API的Java访问接口,因此也将比纯J...

Gmupload
2013/09/09
4.3K
0
在CentOS4上安装JMagick

用Java做网站经常要处理用户上传的图片,例如生成缩略图等等。虽然Java可以使用Java2D进行一些图片操作,但是功能和效率实在太差了。 目前比较好的是用JMagick来进行图像处理,不过JMagick是...

红薯
2008/12/15
929
0
centos 6.2 安装 JMagick 64位 (转载)

把老版本的ImageMagick和JMagick卸载干净 查看版本号: [root@3qianke ~]# rpm -qa | grep ImageMagick ImageMagick-6.2.8.0-4.el5_1.1 ImageMagick-6.2.8.0-4.el5_1.1 [root@3qianke ~]# r......

枫爱若雪
2013/07/01
941
6

没有更多内容

加载失败,请刷新页面

加载更多

vue vue-router beforeRouteEnter

本文转载于:专业的前端网站➬vue vue-router beforeRouteEnter beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `thi...

前端老手
49分钟前
4
0
Spring Boot 2 实战:结合 Docker 容器化

1. 前言 Docker 是啥?好处是啥? 什么现在如果作为一名开发你还不知道甚至没有用过我都感觉你落伍了。Docker 是一种虚拟化的容器技术,目的为了打造持续集成、版本控制、可移植性、隔离性和...

码农小胖哥
53分钟前
4
0
Linux 常用查询句柄的命令(Too many open files)

摘要 查询命令 进程占用的句柄总数 lsof -n | wc -l 查看哪一个进程占用的句柄最多 lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 第一列 是 占用句柄数; 第二列 是 进程号 PID;...

liangxiao
53分钟前
5
0
JavaScript权威指南笔记5

第五章、语句 0、概述 JS程序是一系列可执行语句的集合。 通过控制语句来改变语句的默认执行顺序。 控制语句:条件、循环和跳转(如return、break和throw) 2、复合语句 当多条语句被当做一条语...

_Somuns
59分钟前
5
0
vmware安装ubuntu18.04总是 panic -not syncing:corrupted stack end detected inside schedule

Vmware 安装ubuntu 总是卡着不动, 提示panic -not synciong 网上提示很多办法,都试了效果不佳, 找到了完美解决办法 你的兼容模式重新选一下为6.0,兼容性对硬件有要求的 即可实现 成功安装...

dragon_tech
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部