前言
摘 要:
针 对海量图片给网站带来的访问速度下降、性能压力增大和I/O瓶颈等问题,提出一种海量图片的分布式存储及负载均衡技术。通过把图片数据和网站内容分开部 署、在数据库中记录和维护图片服务器状态信息等方法实现图片和页面数据的分离。实验结果表明,该技术能提高网站的访问速度和运行效率,并可动态增加图片服 务器的数量满足日益增加的性能需求。
关键词:海量图片;分布式存储;负载均衡
【Abstract】Aiming at the problems of the mass images can cause to Web site such as lower access speed, more performance pressure, I/Operformance bottle-neck, etc., a technology of distributed store and load balance for mass images is proposed. By the means of deploying Website pages and images separately and recording status of image servers in database, solves the problem of separation for image data and page data.Experimental result shows that the solution can improve the access speeds and running efficiency for Web site, and can add additional imageservers to meet the increasing performance demands.
【Key words】mass images; distributed store; load balance
一、概述
随着计算机网络技术的发展和普及,出现了越来越多像“新浪”、“淘宝”大型门户站点及电子商务网站[1]。这类网站都保存有大量图片资源。用户在访问这 些站点网页时,网页中图片信息占到页面数据流量的大部分。由于受客户端浏览器限制,无法从一台服务器上同时下载页面中所有图片信息,因此即使服务器有很高 带宽,用户的访问速度还是会受到很大影响。由于图片保存在物理硬盘上,访问图片需要频繁进行I/O操作,因此当并发用户数越来越多时,I/O操作就会成为 整个系统的性能瓶颈[2]。同时,由于受操作系统的限制,一个目录中能存放的图片文件数量是有限的,因此随着图片资源的不断增加,如何合理有效地对图片进行管理和维护也是一个难题。
对于少数大型网站系统,由于自身具有雄厚的资金和人力资源,可采用NFS[3]、CDN[4]、Lighttpd、反向代理、负载均衡等技术提高用户访 问速度。但这些技术需要庞大的资金支持,对于处于创业初期中等规模的商务网站,由于缺少必要的资金支持,因此无法采用这些技术提升网站的访问速度。对此, 笔者提出了适用于中等规模商务网站的海量图片数据分布式动态存储及负载均衡的解决方案。该方案只需增加很少的硬件成本,即可提升网站的访问速度,并且可以 根据需要动态调整图片服务器的数量及图片的存储目录,确保系统具有可扩展性和伸缩性[5]。
二、系统架构设计
对于Web服务器而言,用户对图片信息的访问是很消耗服务器资源的。当一个网页被浏览时,Web服务器与浏览器建立连接,每个连接表示一个并发。当页面 包含多个图片时,Web服务器与浏览器会产生多个连接,同时发送文字和图片以提高浏览速度。因此,页面中图片越多Web服务器受到的压力也就越大。同时由 于受到浏览器本身的并发连接数限制(2个~6个并发),意味着页面上有多于并发连接数限制的图片时,也不能并行地把所有图片同时下载和显示。对于小型网 站,由于数据规模小,可以把网站所有页面和图片统一存放在一个主目录下,这样的网站对系统架构、性能要求都很简单。但大中型网站都保存有海量级的图片文 件,所采用的技术更是涉及广泛,从硬件到软件、编程语言、数据库、Web服务器、防火墙等各个领域都有较高要求。因此,有必要设立单独的图片服务器来专门 存放图片,把图片数据的流量从Web服务器上分离开,这样的架构可以有效缓解Web服务器的I/O性能瓶颈,提升用户的访问速度。
系统架构设计需要满足以下4点要求:(1)图片能进行分布式存储;(2)能实现负载均衡;(3)能根据用户访问量及网站图片数据量的增加能动态添加图片 服务器节点;(4)图片服务器节点的动态调整对网站用户而言是透明的,并且不会中断系统的正常运行。系统整体架构如图1所示,包括客户端、Web服务器、 数据库服务器、图片服务器集群4个部分。
图1 系统架构
客户端是指IE、Firefox等常用的客户端浏览器,用户可以通过客户端来浏览网站的图片信息,也可以通过客户端上传图片信息。
Web服务器部署网站的Web页面,用于响应客户端用户的请求。当用户浏览网页时,Web服务器响应请求并访问数据库服务器,获得网页中所有图片的 URL路径,然后生成页面并返回给客户端,客户端接收该页面并根据页面中的图片URL路径自动从不同的图片服务器下载并显示相应图片。当用户上传图片 时,Web服务器首先从数据库服务器中获取所有图片服务器的当前状态,并根据相关算法选择一个图片服务器及保存的目录,再调用该图片服务器的Web Service方法把图片保存到该服务器,最后在数据库服务器中纪录该图片的编号及URL路径等信息。
数据库服务器用于记录所有图片的编号以及图片的存放位置等信息,同时需要记录所有图片服务器的配置及当前状态信息。
图片服务器集群用于存放网站的所有图片信息,该集群的服务器数量可以根据需要动态增加。
三、系统实现及关键技术
增加了图片服务器后,对于客户端而言,整个网站系统执行过程应该仍然是透明的,不会给用户带来任何影响。但后台系统需要解决以下4个问题:(1)如何实 现图片的分布式部署,图片上传时如何动态确定保存到哪台图片服务器;(2)如何做到图片服务器的负载均衡,既要保证所有图片服务器都有均等的机会来保存图 片,又要考虑到不同服务器的硬件配置和性能差异来区别对待;(3)如何把一台图片服务器上图片均衡保存到多个子目录中以便突破操作系统在同一个目录中保存 文件数的限制,对图片进行更好的管理和维护;(4)如何能根据性能需要和图片数量的增加实现图片服务器的动态扩充。
3.1 状态信息表
Web服务器需要及时掌握所有图片服务器的状态和信息才能动态决定把图片保存到哪一台图片服务器,因此,需要把所有的图片服务器的状态信息全部纪录到数 据库服务器中,记录图片服务器信息和状态的表格式如表1所示。状态信息表中的ServerId字段为主键自增列,唯一代表一条图片服务器纪录。 ServerName字段记录服务器的名称,方便管理员识别该记录代表哪台服务器。ServerUrl字段标识了图片服务器上图片主目录的URL根路径。 PicRootPath字段标识了保存图片的物理主目录。MaxPicAmount字段表示图片服务器能保存的最大图片数,该数可以根据图片服务器的硬件 配置和性能以及用户实际需要而进行动态调整。CurPicAmount字段表示当前已保存的图片数,当 CurPicAmount≥MaxPicAmount时系统将不再把图片上传到该服务器。SubFoldAmount字段描述了在PicRootPath 中指定的图片主目录下的子目录数。这样可以把图片均匀分布到不同子目录下,避免在同一个目录下保存过多图片,从而方便对图片进行维护和管理。 FlgUsable字段表示图片服务器是否可用。
3.2 图片浏览
客户端用户通过浏览器向Web服务器发出浏览某页面的请求,Web服务器从数据库服务器中获取该页面的所有图片URL信息,并根据URL信息去搜索表1 所列的状态信息表,判断该URL所指向的图片服务器的状态字段FlgUsable,若FlgUsable == false表示该图片服务器当前因某种原因处于不可用状态,则把该图片的URL替换成Web服务器上保存的一个默认图片的URL,否则把该URL直接返回 给客户端。客户端再根据图片的URL路径自动从不同的图片服务器上下载并显示相应的图片。由于图片URL路径直接指向具体的图片服务器,因此需要在每个图 片服务器的保存图片的主目录上建立一个Web站点。由于客户端浏览器所需要的图片是从多个图片服务器上直接下载,因此浏览器可以并发地从多台服务器上同时 下载图片,这样就缩短了图片下载时间,同时也减轻了Web服务器的I/O请求及性能压力,因此,提高了网站的访问速度。浏览图片算法如图2所示。
3.3 图片上传
由于B/S架构本身技术限制,图片无法通过Web服务器直接上传到不同的图片服务器,因此需要在所有图片服务器上部署一个Web Service[6]以便Web服务器可通过调用不同图片服务器上的Web Service执行保存或删除图片的操作。
图片上传的过程比较复杂,首先Web服务器接收客户端的访问请求并访问数据库,通过执行“select * from tb_ServerStatus where FlgUsalbe = 1 and MaxPicAmount >CurPicAmount”语句(tb_ServerStatus为表1所列的图片服务器状态信息表),从状态表筛选出可用的图片服务器集合记作 C,并获取集合的总记录数N。然后用随机函数产生一个随机数R1并用R1与N进行取余运算记作I=R1%N。则C[I]即为要保存图片的图片服务器。获取 C [I]记录中的SubFoldAmount的值记作K,K即为C[I]图片服务器中的图片子目录的个数。为了简化算法,规定所有的子目录名从“0”开始编 号,直到“K-1”。例如:SubFoldAmount值为1 000,则图片服务器上图片子目录名分别为“0”、“1”、“2”、…、“999”。再用随机函数生成随机数R2,使得S=R2%K,则S即为要保存的图 片的子文件夹名称。为了确保上传的图片名称不重复,以当前时间+随机数的形式组成图片名称。综上所述,通过利用随机函数取值的随机性和取余运算,使每台图 片服务器及同一台服务器上的所有图片子目录都有均等的机会保存图片。因此,所有图片都是被随机保存到不同图片服务器的不同子目录中,实现了图片的分布式部 署和负载均衡。同时网站管理员也可通过设定服务器状态信息表中的“MaxPicAmount”和“SubFoldAmount”2个字段的值来限定所能保 存图片的最大数和子目录数,从而能够根据服务器的硬件配置和性能差异等因素来决定该服务器能保存图片的最大数和子目录数,因此,进一步提升了整个图片服务 器集群的负载均衡能力。当需要增加图片服务器时,也只需在状态信息表中增加一条新的图片服务器纪录,添加新图片服务器的过程对整个网站系统的运行没有任何 影响,从而实现了图片服务器的动态增加。用户上传图片的算法如图3所示。
3.4 图片删除
客户端向Web服务器发出删除某个图片的请求,Web服务器接收请求并搜索图片数据库获取待删除图片的URL信息。把该URL信息通过字符串运算分隔为 图片服务器的URL根路径R、图片所存放的子目录D以及图片名称N。再查找图片数据库状态信息表,获取与R匹配的记录记作C,C即为要删除图片的图片服务 器。然后调用C图片服务器上的WebService[7]方法,并以图片名称N和图片所存放的子目录D为参数通知该方法删除该图片,最后把该图片纪录从数 据库服务器中删除。用户删除图片信息的算法如图4所示。
3.5 图片修改
修改图片的算法是删除图片和上传图片2个功能的叠加。客户端发出修改图片的请求并把新的图片上传到Web服务器,Web服务器访问数据库获取旧图片的 URL地址,调用删除图片的功能把旧图片删除,最后调用上传图片的功能完成新图片的上传。最后修改图片数据库,纪录新图片的URL路径。其算法流程如图5 所示。
四、系统性能分析
在局域网环境中,对采用图片服务器和不采用图片服务器2种情况进行了性能测试。硬件配置如下:Web服务器、数据库服务器各一台,配置为CPU: Intel Xeon四核2.2 GHz,内存4 GB,网络带宽100 Mb/s。客户端机器5台为CPU:Pentium 3.0 GHz,内存2 GB,网络带宽100 Mb/s。图片服务器3台,为普通的PC机: CPU: Intel双核P2.0 GHz,内存1 GB,网络带宽100Mb/s。测试数据中共有300万张图片,均匀分布在3台图片服务器上,每台图片服务器建立1 000个子目录。在5台客户端上同时运行压力测试软件,分别模拟200个~1 000个并发用户的请求,测试结果如图6所示。
从图6可以看出,采用3台普通PC机作为图片服务器后,整个系统的响应时间大大减少,性能得到明显提升,而且并发访问量越大,性能的提升越明显,而对于整个系统而言增加的硬件成本却很有限。
ps:
有几个比较重要的原则就是
1、单个目录下的文件个数不要超过2000个,多了寻址较慢,你在linux下ls就能看到数量太多的时候的效果了
2、目录层级结构不要太深,这样服务器处理寻址较慢
相关推荐
### 分布式存储技术及应用 随着互联网技术的飞速发展和数据量的爆炸性增长,如何高效地存储和管理海量数据成为了一个重要的课题。分布式存储技术作为一种有效的解决方案,在近年来得到了广泛的应用和发展。本文将...
本文将围绕“海量图片的分布式存储及负载均衡研究”这一主题,结合源码和工具,深入浅出地探讨相关知识点。 分布式存储是解决大数据问题的关键技术之一。它通过将数据分散存储在多个节点上,实现了高可用性、容错性...
本文主要探讨了如何针对中等规模商务网站实现海量图片的分布式存储和负载均衡,以提升网站的访问速度和整体性能。 首先,面对图片资源的急剧增长,传统的单一服务器存储方式会导致I/O操作成为系统瓶颈,影响用户...
MogileFS提供了一种高效且经济的分布式存储解决方案,适用于处理海量图片等静态文件。其架构设计考虑了高可用性和可扩展性,通过特定的API实现了与应用程序的集成。虽然需要一定的配置和程序修改,但对于需要处理...
- **Facebook**:Facebook在处理海量用户数据方面积累了丰富的经验,例如通过Haystack和Cassandra等技术来支撑其图片存储和服务。 - **Google**:Google在其内部使用了多种分布式存储系统,包括Bigtable、Google ...
分布式存储之所以受到青睐,主要是因为传统的SAN存储价格昂贵,难以满足大数据时代对存储能力的渴求。分布式存储系统将数据分散存储在多台服务器上,提高了存储的可扩展性、可靠性,并且降低了成本。FastDFS的设计...
Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作 在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来
本文介绍了一种大量视频、图片、文件分布式存储技术方案,旨在解决大规模数据存储和管理问题。该方案基于HDFS(Hadoop Distributed File System)分布式文件系统,使用ZooKeeper分布式服务注册中心和...
这种分布式存储方案对于处理输电线路巡检中的海量非结构化数据非常有效,能够提高数据的存储效率,便于数据的管理和分析。 总的来说,面对无人机巡检产生的海量非结构化数据,分布式存储技术,尤其是Ceph,提供了...
综上所述,分布式图片存储涉及的关键技术包括分布式存储、负载均衡、冗余备份以及系统的可扩展性和可伸缩性。在实际项目中,需要结合具体业务需求和技术条件,合理设计并实施这些要素,以构建一个高效、可靠的图片...
分布式存储技术是近年来伴随着互联网数据爆炸性增长而发展起来的一项重要技术。互联网上的信息量已经达到了天文数字,如何有效地存储这些海量数据成为了大型网站架构师必须面对的问题。分布式存储技术的出现,正是...
分布式存储技术是当前数据存储领域的关键技术之一,尤其是在应对海量数据和大数据处理方面,它展现出独特的优势。随着“互联网+”业务的蓬勃发展,电信运营商面临着数据量激增、数据类型多样的新挑战,传统的存储...
- **Facebook 的 HayStack 和 Cassandra**:Facebook 使用 HayStack 来处理海量的用户图片数据,而 Cassandra 则被用来处理结构化数据,两者都体现了分布式存储系统的强大能力。 - **Google 的 Bigtable 和 GFS**:...
分布式存储不仅能够应对海量非结构化数据带来的挑战,还能够为云数据中心、视频监控和其他需要高性能存储的应用场景提供有效的解决方案。以中国雪亮工程为例,该项目涉及大量视频监控数据的存储与管理,传统的视频...
实验结果表明,新方法实现了海量元数据的分布式存储与检索,并有效地避免了现有分布式文件系统在处理海量小文件时存在的主节点性能瓶颈。 通过本文的阐述,可以看出在处理海量小文件的场景下,分布式文件系统的元...
总的来说,淘宝海量图片存储与CDN系统是通过分布式存储、高效CDN、智能缓存策略、实时监控和调度、成本优化以及严格的安全防护等手段,实现了图片数据的高效存储和快速访问,为用户提供流畅的购物体验。这是一套复杂...
分布式存储技术是一种解决海量数据存储问题的技术,通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备。分布式存储技术可以分为结构化数据、非结构化数据和半结构化数据三种...