海量图片的分布式存储设计与实现.docx

上传人:lao****ou 文档编号:64010 上传时间:2023-01-09 格式:DOCX 页数:12 大小:486.36KB
下载 相关 举报
海量图片的分布式存储设计与实现.docx_第1页
第1页 / 共12页
海量图片的分布式存储设计与实现.docx_第2页
第2页 / 共12页
海量图片的分布式存储设计与实现.docx_第3页
第3页 / 共12页
海量图片的分布式存储设计与实现.docx_第4页
第4页 / 共12页
海量图片的分布式存储设计与实现.docx_第5页
第5页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《海量图片的分布式存储设计与实现.docx》由会员分享,可在线阅读,更多相关《海量图片的分布式存储设计与实现.docx(12页珍藏版)》请在第一文库网上搜索。

1、海量图片的分布式存储设计与实现一、研究背景:性能与资金,二者可兼得?1.1那么问题来了?随着互联网的发展,许多大中型的网站都保存了大量的图片资源,用户在访问这些图片资源异常丰富的网站(如淘宝、京东等电子商务网站)时,网页中的图片信息占据了页面数据流量的很大部分,那么问题也来了:(1)由于受客户端浏览器限制,无法从一台服务器上同时下载页面中所有图片信息;PS :当一个网页被浏览时,Web服务器与浏览器建立连接,每个连接表示一个并发。当页面包含多个图片时,Web服务器与浏览器会产生多个连接,同时发送文字和图片以提高浏览速度。因此,页面中图片越多Web服务器受到的压力也就越大。同时由于受到浏览器本身

2、的并发连接数限制(2个6个并发),意味着页面上有多于并发连接数限制的图片时,也不能并行地把所有图片同时下载和显示O(2)由于图片保存在物理服务器上,访问图片需要频繁进行I/O操作:因此当并发用户数越来越多时,I/O操作就会成为整个系统的性能瓶颈;(3)由于受操作系统的限制,一个目录中能存放的图片文件数量也是有限的:随着图片资源不断增加,如何有效管理和维护图片也是一个难题;1.2如何解决问题?(1)对于少数大型网站系统,由于自身具有雄厚的资金和人力资源,可采用NFS、CDN、Lighttpd、反向代理、负载均衡等技术提高用户访问速度;但是,这些技术需要庞大的资金来支持。(2)对于多数中小型网站系

3、统,有没有一种方案适用于中等规模商务网站的海量图片数据分布式动态存储及负载均衡的解决方案?该方案可否只需增加很少的硬件成本,即可提升网站的访问速度,并且可以根据需要动态调整图片服务器的数量及图片的存储目录,确保系统具有可扩展性和伸缩性。二、架构设计:构建图片服务器集群对于小型网站,由于数据规模小,可以把网站所有页面和图片统一存放在一个主目录下,这样的网站对系统架构、性能要求都很简单。但大中型网站都保存有海量级的图片文件,所采用的技术更是涉及广泛,从硬件到软件、编程语言、数据库、Web服务器、防火墙等各个领域都有较高要求。因此,有必要设立单独的图片服务器来专门存放图片,把图片数据的流量从Web服

4、务器上分离开,这样的架构可以有效缓解Web服务器的I/O性能瓶颈,提升用户的访问速度。2.1系统设计目标基于以上的考虑,我们希望的设计目标是:(1)图片能进行分布式存储;(2)图片服务器能实现负载均衡;(3)能根据用户访问量及网站图片数据量的增加能动态添加图片服务器节占./ ,(4)图片服务器节点的动态调整对网站用户而言是透明的,并且不会中断系统的正常运行;其中,(1)和(2)是针对系统的高可用和伸缩性,而(3)和(4)则是针对系统的高可用和可扩展而言的。系统整体架构如上图所示:包括客户端、Web服务器、数据库服务器、图片服务器集群4个部分。(1) Web服务器部署网站的Web页面,用于响应客

5、户端用户的请求。当用户浏览网页时,Web服务器响应请求并访问数据库服务器,获得网页中所有图片的URL路径,然后生成页面并返回给客户端;(2)客户端接收该页面并根据页面中的图片URL路径自动从不同的图片服务器下载并显示相应图片。(3)数据库服务器用于记录所有图片的编号以及图片的存放位置等信息,同时需要记录所有图片服务器的配置及当前状态信息。(4)图片服务器集群用于存放网站的所有图片信息,该集群的服务器数量可以根据需要动态增加或删减。三、系统实现:一种简单且价廉可用的方案3.1 数据库设计与实现:两张简单的表Web服务器需要及时掌握所有图片服务器的状态和信息才能动态决定把图片保存到哪一台图片服务器

6、。因此,需要把所有的图片服务器的状态信息全部纪录到数据库服务器中,记录图片服务器信息和状态的表格式如下图所示:可以清楚地看出,图片服务器信息表中记录了图片服务器的ID、名称、URL、最大存储数量、当前已存数量以及服务器的状态(True:可用,False:不可用),每个图片服务器下会有多个图片信息记录,因此它们是一对多的关系。久 ImageServerlnfo ;公% Imagelnfo 会Y? ServerldA ServerNameA ServerllrlA PicRootPathA MaxPicAmountA CurPicAmount FlgUsable口导航属性用 Imageinfo日f

7、ty? Id ImageNameA ImageServerld百丽嬴归 ImageServerlnfo图片记录信息表图片服务器状态信息表(1)图片服务器状态信息表建表语句:(2)图片记录信息表建表语句:3.2 文件上传与浏览系统实现:一个ASP.Net MVC应用程序这里我们使用一个ASP.NET MVC应用程序部署在Web服务器上,这个应用程序作为Web网站向客户提供上传和浏览的服务。因此,它最重要的功能就是:一、接收用户上传的文件,并转交给图片服务器的相关处理程序进行处理和保存;(结束)二、取得所有图片服务器中保存的有效图片路径,返回给客户端浏览器,再由客户端浏览簟里与路径向图片服务器集群

8、进行请求;(开始)客户端发出删除图片的请求访问数据库服务器,获取该图片URL地址把该URL地址分割为“图服务器Uri根路法” R和“图片所存放的子目录 D以及“图片名称” N根据R搜索数据库中服务器状态信息表,获取该图片服务器S的详细信息调用图片服务器S的Web服务,删除该服务器D目录下的名为N的图片删除数据库中该图片的纪录(结束)3.2.1 设计 Controller(1)图片上传的过程比较复杂,首先Web服务器接收客户端的访问请求并访问数据库,在Web端需要取得所有可用的图片服务器的集合,这里使用到了一个GetAIIUseableServers方法,它的实现如下:可以看出,我们需要判断Fl

9、gUsable标志为true以及CurPicAmount当前存储量小于MaxPicAmount最大存储量这两个条件。如果有宕机或不可用的情况,需要管理员将那一行的FlgUsable 设置为 false。public List GetAIIUseableServers()(List serverList = db.ImageServerlnfo.Where(s = s.FlgUsable = true& s.CurPicAmount s.MaxPicAmount).ToList();return serverList;(2)这里用到了一个GetServerlndex的方法,它的实现如下:从图片服

10、务器状态信息表筛选出可用的图片服务器集合记作C,并获取集合的总记录数No然后用随机函数产生一个随机数R1,用R1与N进行取余运算记作I=R1%N。则Cl即为要保存图片的图片服务器。这个方法基本保证了我们的图片服务器的负载是一个比较均衡的比例。(当然,我们可以设计一个更加高效的,类似于一致性哈希算法的哈希函数)region 01.获取服务器索引号III /01.获取服务器索弓I号III / 月艮务器数量/returns索引号/returnspublic static int GetServerlndex(int serverCount)(Random rand = new Random();in

11、t randomNumber = rand.Next();int serverindex = randomNumber % serverCount;return serverindex;)#endregion(3)最后,Web端程序借助了 WebClient将服务器ID、文件扩展名以及图片的字节流转交给了具体的图片服务器处理程序:Web端程序的工作就到此结束,但是这里木有采用异步,因此需要等待图片服务器的工作结束。WebClient client = new WebClient();client.UploadData(serverFullUrl, CommonHelper.StearmToBy

12、tes(file.Inputstream);PS :由于B/S架构本身技术限制,图片无法通过Web服务器直接上传到不同的图片服务器中。因此,这里需要借助类似于WebClient、HttpWebRequest等类向具体的图片服务器发送Http请求,或者是通过在图片服务器上部署Web Service,以便Web服务器通过调用该服务执行图片的保存操作。3.2.2 设计 View(1)上传页面:在 form 标签中不要忘了 : enctype=multipart/form-data(2)浏览页面:这里主要通过对不同的图片服务器发送请求获取图片,从而降低Web服务器的I/。性能瓶颈,加快整个系统的响应时

13、间。3.3 图片服务器文件接收系统实现:一个ASP.Net 一般处理程序(1)这是一个简单的一般处理程序,它首先接收要保存的图片扩展名以及服务器ID,根据规则生成具体的保存路径,然后通过I/。流将图片保存到该服务器的磁盘上;(2)最后将更改数据库信息记录,由于要同时对两张表进行修改,这里我们需要对这个方法进行一个简单的封装,使之成为一个事务。现在我们来看看这个Add方法的实现:public ImageStatusEnum Add(lmagelnfo imageEntity)(首先是图片信息表db.lmagelnfo.Add(imageEntity);其次是图片服务器信息表ImageServer

14、lnfo serverEntity = db.ImageServerlnfo.FirstOrDefault(s = s.Serverld = imageEntity.lmageServerld);if (serverEntity != null)(当前服务器存储数量+1serverEntity.CurPicAmount += 1;)/ 一起提交到SQL Server数据库中int result = db.SaveChanges();if (result 0)(return ImageStatusEnum.Successful;)elsereturn ImageStatusEnum.Failure;)3.4简单测试图片文件的上传与浏览(1)测试前的准备工作由于我的电脑不支持64位的虚拟机,因此原本打算在VMware中部署三台Windows Server 2008 R2作为Web服务器和图片服务器的打算被撤销(没法任性地做实践,我很不开心啊)。于是,我采用了在一台电脑上部署多个应用,用端口号区分不同的服务程序来模拟效果。EDISONCHOU (EDISONCHOUAdr网站Default Web SiteMylmageDFS 8000一。MylmageServerl 8010 MvImaqeSe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服