记海量图片的分布式存储及负载均衡理论学习

本篇博客仅以个人学习记录使用

摘要

针对海量图片给网站带来的访问速度下降、性能压力增大和I/O瓶颈等问题,提出一种海量图片的分布式存储及负载均衡技术。通过把图片数据和网站内容分开部署、在数据库中记录和维护图片服务器状态信息等方法实现图片和页面数据的分离。实验结果表明,该技术能提高网站的访问速度和运行效率,并可动态的增加图片服务器的数量满足日益增加的性能需求

前言

由于受到客户端浏览器限制,无法从一台服务器上同时下载页面中所有图片信息,因此即使服务器有很高带宽,用户的访问速度还是会受到很大的影响由于图片保存在物理硬盘上,访问图片需要频繁进行I/O操作,因此当并发用户数越来越多时,I/O操作就会成为整个系统的性能瓶颈。同时,由于受到操作系统的限制,一个目录中能存放的图片文件数量是有限的,因此随着图片资源的不断增加,如何合理有效的对图片进行管理和维护也是一个难题。对于少数大型网站系统,由于自身具有雄厚的资金和人力资源,可采用NFS、CDN、Lighttpd、反向代理、负载均衡等技术提高访问速度。但这些技术需要庞大的资金支持,对于处于创业初期中等规模的商务网站,由于缺少必要的资金支持,因此无法采用这些技术来提升网站的访问速度。对此才有了适用于中等规模商务网站的海量图片数据分布式动态存储及负载均衡的解决方案。该方案只需要增加很少的硬件成本,即可提高网站的访问速度,并且可以根据需要动态调整图片服务器的数量及图片的存储目录,确保系统具有可扩展性和伸缩性。

系统架构设计

对于web服务器而言,用户对图片信息的访问是很消耗服务器资源的。当一个网页被浏览时,web服务器与浏览器建立连接,每个连接显示一个并发。当页面中包含多个图片时,web服务器与浏览器很产生多个连接,同时发送文字和图片以提高浏览速度。因此,页面中图片越多web服务器受到的压力就越大。同时由于受到浏览器本身的并发连接数量限制(2~6个并发,不同的浏览器不同),意味着页面上有多余并发连接数限制的图片时,也不能并行的把所有图片同时下载和显示。对于小型网站,由于数据规模小,可以把网站所有页面和图片统一存放在一个主目录下,这样的网站对系统架构、性能要求都很简单。但大中型网站都保存有海量级的图片文件,所采用的技术更是涉及广泛,从硬件到软件、编程语言、数据库、web服务器、防火墙等各个领域都有较高的要求。因此,有必要设立单独的图片服务器来专门存放图片,把图片数据的流量从web服务器上分离开,这样的架构可以有效的缓解web服务器的I/O性能瓶颈,提升用户的访问速度。
++++ 系统架构需要满足四个要求:
(1).图片能够进行分布式存储(2)能实现负载均衡(3)能根据用户访问量及网站图片数据量的增加能动态添加图片服务器节点(4)图片服务器节点的动态调整对网站用户而言是透明的,并且不会中断系统的正常运行,系统整体架构包括客户端、web服务器、数据库服务器、图片服务器集群四个部分。

介绍

1.Web服务器部署网站的web页面,用于响应客户端用户的请求。当用户浏览网页时 ,Web服务器响应请求并访问数据库服务器,获得网页中所有图片的URL路径,然后 生成页面并返回给客户端,客户端接收该页面并根据页面中的图片URI路径自动从不 同的图片服务器下载并显示相应图片。当用户上传图片时,Web服务器首先从数据库服务器中获取所有图片服务器的当前状态,并根据相关算法选择一个图片服务器及保存的目录,再调用该图片服务器的Web Service方法把图片保存到该服务器, 最后在数据库服务器中纪录该图片的编号及URL路径等信息。

2.数据库服务器用于记录所有图片的编号以及图片的存放位置等信息,同时需要记录所有图片服务器的配置及当前状态信息

3.图片服务器集群用于存放网站的所有图片信息,该集群的服务器数量可以根据需要动态增加

系统实现及关键技术

增加了图片服务器后,对于客户端而言,整个网站系统执行过程应该仍然是透明的, 不会给用户带来任何影响。但后台系统需要解决以下4个问题:

(1) 如何实现图片的分布式部署 ,图片上传时如何动态确定保存到哪台图片服务器

(2) 如何做到图片服务器的负载均衡,既要保证所有图片服务器都有均等的机会保存图片,又要考虑到不同服务器的硬件配置和性能差异来区别对待

(3)如何把一台图片服务器上图片均衡保存到多个子目录中以便突破,操作系统在同一个目录中保存文件数的限制,对图片进行更好 的管理和维护

(4)如何能根据性能需要和图片数量的增加实现图片服务器的动态扩充

状态信息表

Web服务器需要及时掌握所有图片服务器的状态和信息才能动态决定把图片保存到哪一台图片服务器,因此,需要把所有的图片服务器的状态信息全部纪录到数据库服务器中,记录图片服务器信息和状态的表格式如表 1所示。状态信息表中的ServerId字段为主键自增列, 唯一代表一条图片
服务器纪录。ServerName字段记录服务器的名称 ,方便管理员识别该记录代表哪 台服务器 。ServerUrl字段标识了图片服务器上图片主目录的URL根路径 。PicRoot Path字段标识了保存图片的物理主目录。MaxPicAmount字段表示图片服务器能保存 的最大图片数 , 该数可以根据图片服务器的硬件配置和性能以及用户实际需要而进行动态调整。CurPicAmount字段表示当前已保存的图片数,当CurPicAmount~MaxPi e Amount时系统将不再把图片上传到该服务器 。SubFold Amount字段描述了在PicR∞t f)ath中指定的图片主目录下的子目录数 。这样可以把图片均匀分布到不同子 目录下, 避免在同一 目录下保存过多图片,从而方便对图片进行维护和管理。Fl gUsable字段表示图片服务器是否可用

图片浏览

客户端用户通过浏览器向Web服务器发出浏览某页面的请求 ,web服务器从数据库服 务器中获取该页面的所有图片URL信息 ,并根据URL信息去搜索表 1所列的状态信息
表 ,判断该URL所指向的图片服务器的状态字段FlgUsable,若 FlgUsable一一 f a I s e表示该图片服务器当前因某种原因 处于不可用状态 , 则把该图片的 URI 替换成Web服务器上 保存的一个默认图片的 URL, 否则把该URL直接返回给客 户端。客户端再根据图片的 URL路径 自动从不同的图片服务器上下载并显示相应 的图片 。由于图片URL路径直接指向具体的图片服务器 ,因此需要 在每个图片服务器的保存图片的主目录上建立一个 Web站点。由于客户端浏览器所需 要的图片是从多个图片服务器上直接下 载,因此浏览器可以并发地从多台服务器上 同时下载图片,这样就缩短了图片下载时间,同时也减轻了Web服务器的I/ O请求及性能压力,
因此 , 提高了网站的访问速度