`
thecloud
  • 浏览: 905796 次
文章分类
社区版块
存档分类
最新评论

图片存储架构学习:独立的图片服务器,给爱一个独立的空间

 
阅读更多

前言

去年我凭着对网站架构的浓厚兴趣陆陆续续给大家分享了不少大型网站架构的经典案例,但是大部分都只是介绍了大概,并没有深入地研究,有兴趣的朋友可以去我博客的网站架构分类下学习讨论。今年我打算继续学习网站架构方面的知识,并对此作更加深入地分析与实践,当然学习成果会及时和大家分享和交流,希望今年自己的能力可以更上一层楼吧。

这几天我一直在关注大型网站中图片存储方面的相关问题,通过了解和实践,体会颇深,我想我可以针对图片存储这个话题写一个系列文章,以便对这次学习的总结。

第一篇,让我们从独立图片服务器开始说起,真爱,不是须要让自己更加独立的么?come on!

正文

一、部署独立图片服务器的必要性

我们知道,无论对于Apache还是IIS,图片始终是最消耗系统资源的,如果将图片服务和应用服务放在同一个服务器的话,应用服务器很容易会因为图片的高I/O负载而崩溃,因此对于有些大型网站项目,我们有必要将图片服务器和应用服务器分离。部署独立的图片服务器(甚至是服务器集群)是大型网站图片存储解决方案中最基础的,因为有了独立的图片服务器后,我们才能对图片服务器做更有针对性的性能优化,比如从硬件角度说,图片服务器可以配置高端的硬盘,7200转的换成15000转的,而CPU却只要一般就可以了;从软件角度说,可以为图片服务器配置特殊的文件系统来满足对图片的I/O请求,如淘宝的TFS,就很好地解决了大规模小图片文件带来的I/O噩梦,同时,我们也可以采用nginx、squid来代理图片请求等等。

二、采用独立域名

注意,这里是指独立域名,不是子域哦,比如yahoo.com图片服务器用了yimg.com的域名,而不是用二级域名img.yahoo.com,这是为什么呢?个人觉得原因主要有以下几点:

1、同一域名下浏览器的并发连接数有限制,一般在2 - 6之间,下图列举了各个浏览器的并发连接数(来自网络,未经我亲自考证,供参考)

这样,我们如果给图片服务器配置独立的域名,那么在一个页面中加载图片时,就可以突破浏览器连接数的限制,理论上,增加一个独立域名,并发连接数加倍。

2、由于cookie的原因,对缓存不利

比如有一张图片http://upload.chinaz.com//,那么当我们向它发起请求的时候,会带上www.test.com域名下的cookie,由于大部分web cache都只缓存不带cookie的请求,这样就导致每次的图片请求都不能命中cache,而仍旧要去原始服务器获取图片,导致图片缓存意义不大。所以,还是给单独搞一个图片独立域名吧,当然,不只是图片,css和js文件也可以参照这个思路来搞。

3、方便CDN同步

这个我不太清楚是怎么回事,我个人猜测和第二点cookie有点关系,还望资深人士留言分享,谢谢。

三、图片服务器分离后,如何进行图片上传和图片同步

当然任何事物都具有两面性,图片服务器分离固然提升了图片访问的效率,大大缓解了服务器因图片造成的I/O瓶颈,但是分离以后图片的上传和同步就成了一个大问题了。下面就我个人的想法谈谈几种解决方案。

1、NFS共享方式

如果你不想在每台图片服务器同步所有图片,那NFS共享是最简单也最实用的方式。NFS是个分布式的客户机/服务器文件系统,NFS的实质在于用户间计算机的共享,用户可以联结到共享计算机并象访问本地硬盘一样访问共享计算机上的文件。

具体实现思路是:web服务器通过nfs挂载多台图片服务器export出来的目录,用户先将图片上传到web服务器,然后将上传的图片通过程序拷贝到这个mount目录中去,这样那几台图片服务器就也能访问到刚上传的图片了(注意,只是共享了,并没有真正拷贝到图片服务器)。再给那几台图片服务器绑定独立域名,于是浏览器端就可以用单独的域名来访问图片了。这种方式基本不会有因同步造成的延时,但需要依赖nfs,nfs挂掉会影响web服务器。为了更直观的表达,我还是上一幅图吧,画得比较粗糙,大家将就着看看。

至于如何配置nfs,大家google一下

2、利用FTP同步

和上面nfs不一样的是,用户上传完图片后是利用ftp同步到各个图片服务器的,php、java、asp.net基本上都能操作ftp。这样的话每个图片服务器就都保存一份图片的副本,也起到了备份的作用。但是缺点是将图片ftp到服务器比较耗时,如果异步去同步的话又会有延时,不过一般的小图片文件也还好了。

当然除了上面两种方法,还有诸如安装同步软件、webservice等方法,但我个人觉得上面2种比较靠谱一点,所以其他的就暂时不介绍了,如果各位朋友有更好地建议,请留言分享。

http服务器的选择
采用轻量级的Lighttpd、Nginx,不采用apache,apache最消耗内存.
Cache及反向代理

Squid

Lighttpd+mod_mem_cache

数据压缩

HTTP HEADER的Accept-Encoding

客户端缓存

HTTP HEADER的Expires、Cache-Control、Etag、Last-Modified参数设置

应用层优化
图片按需生成、图片预先生成、根据应用场景降低图片分辨率
图片处理工具的选择
可能大多数网站都是选择 ImageMagick 做为基础库,如果图片处理量巨大,性能问题又怎能不考虑?
防盗链

图片相当占用资源,一定要做好防盗链

好了,对于独立图片服务器的介绍就到这里了,欢迎大家补充,咱们下回见。

分享到:
评论

相关推荐

    淘宝网图片存储系统架构

    ### 淘宝网图片存储系统架构解析 #### 一、背景及挑战 淘宝网作为中国乃至全球最大的电子商务平台之一,面临着极其庞大的图片存储与访问压力。据流量统计,淘宝网的整体流量中,图片访问流量占比高达90%以上,而...

    大话存储:存储系统底层架构原理极限剖析(终极版)(完整PDF版)

    《大话存储:存储系统底层架构原理极限剖析(终极版)》是一本深入探讨存储技术的专业书籍,由一位对技术充满热情的作者精心撰写。这本书以其严谨的态度和丰富的想象力,揭示了存储系统的底层奥秘,旨在帮助读者全面...

    2009系统架构师大会PPT:杨明非:存储架构

    4. **存储空间快速增长**:由于新的富媒体文件(如高清图片、视频等)以及法规遵从的要求,企业面临着存储空间快速扩大的挑战。 5. **跨厂商管理困难**:不同厂商的存储产品通常采用封闭的设计,这给企业的存储资源...

    图片服务器的hash架构剖析PPT学习教案.pptx

    图片服务器的Hash架构是一种优化大型图片服务系统的解决方案,旨在应对高访问量和大容量存储的需求。在这种架构中,Hash函数用于将图片URL映射到特定的服务器,从而实现负载均衡和有效的缓存策略。 首先,我们需要...

    高性能高并发服务器架构

    ### 高性能高并发服务器架构的关键知识点 #### 1. 高性能高并发服务器架构概述 - **背景**: 在互联网迅速发展的背景下,越来越多的网站面临着大量用户访问带来的挑战。为了应对这种挑战,需要构建高性能、高并发的...

    高性能高并发服务器架构.pdf

    ### 高性能高并发服务器架构的关键知识点 #### 1. 高性能高并发服务器架构概述 - **定义**: 高性能高并发服务器架构是指能够同时处理大量用户请求,并且能够保持稳定性能的服务器架构。 - **重要性**: 在当前互联网...

    网管员必读系列——服务器与数据存储_Part_2

    虚拟化技术允许在同一物理服务器上运行多个独立的操作系统实例,极大地提高了硬件资源的利用率。常见的虚拟化技术包括: 1. **服务器虚拟化**:如VMware vSphere、Microsoft Hyper-V,可以将一台物理服务器分割成多...

    图片服务器的url hash架构.docx

    ### 图片服务器URL Hash架构详解 #### 一、引言 随着互联网的发展,图片服务器面临着巨大的访问量和存储容量挑战。传统的负载均衡方法虽然能在一定程度上分散访问压力,但对于存储容量的问题却无能为力。这导致了...

    LCSAST01服务器技术入门.pptx

    3. **刀片服务器**:高密度设计,每个“刀片”都是一个独立的服务器模块,便于集中管理和扩展,适用于大规模集群和互联网服务。 在选择服务器时,还需要考虑服务器的性能评价体系,这通常包括处理器性能、内存容量...

    京东青龙系统架构篇.pptx

    京东青龙系统架构采用了微服务架构模式,将系统拆分成多个独立的微服务,每个微服务负责独立的业务逻辑。微服务之间通过 RESTful API 进行通信,提供松耦合、高内聚的系统架构。 架构特点 京东青龙系统架构具有...

    网站架构(页面静态化_图片服务器分离_负载均衡)方案全解析

    图片文件通常占用较大的存储空间且加载时间较长,因此将图片内容与网页内容分离存储于独立的服务器上,能够有效减轻主服务器的压力。这种方式不仅可以提高网页的加载速度,还能确保主服务器在处理图片问题时不受影响...

    搭建无服务器架构的移动应用.pdf

    在无服务器架构中,图片上传及处理是一个常见的应用场景。利用Amazon S3和AWS Lambda,我们可以轻松实现图片的自动上传、压缩等功能。 **步骤1:上传图片至Amazon S3** - 移动应用将图片上传至预先设定的Amazon S3...

    服务器基础知识培训课件.ppt

    11. 虚拟化服务器:通过虚拟化技术在一个物理服务器上运行多个独立的虚拟机。 【服务器按外观分类】 1. 塔式服务器:体积大,扩展性强,适合小规模应用。 2. 机架式服务器:按照标准化尺寸设计,适用于空间有限的...

    大型网站高并发解决方案分析之图片服务器分离架构

    图片存储架构方面,独立图片服务器的必要性在于其优化了图片存储和访问的性能,同时具备扩展性强和成本效益高等优势。服务器可以配置高性能的硬盘,采用如淘宝的TFS文件系统等针对性的软件技术来满足图片I/O请求。 ...

    《分布式对象存储——原理 架构及Go语言实现 》_胡世杰.zip

    分布式对象存储是一种大规模、高可用、可扩展的数据存储系统,主要设计用于存储和检索大量非结构化数据,如图片、视频、文档等。在互联网时代,这种技术是支撑云服务和大数据应用的基础。《分布式对象存储——原理 ...

    c#与SQLServer_Demo winform 三层 架构 登陆 信息增删改 图片存储

    本项目"基于C#与SQL Server_Demo winform 三层架构 登陆 信息增删改 图片存储"是一个典型的企业级应用程序示例,它涵盖了数据库交互、用户界面以及业务逻辑的分离,有助于提高代码的可维护性和复用性。 首先,我们...

    软件架构风格整理及总结

    6. **客户端-服务器架构**:在C/S架构中,客户端发送请求给服务器,服务器处理请求并返回结果。这是互联网应用中最常见的架构,尤其适用于需要高性能计算或大量数据存储的场景。 7. **分布式架构**:当单个服务器...

    网管员必读系列——服务器与数据存储_Part_3

    本篇内容将覆盖服务器架构、数据存储技术、数据备份与恢复策略、服务器性能监控及优化等多个方面。 ### 服务器架构 服务器架构是构建服务器系统的基础。它决定了服务器如何处理数据、资源如何分配以及系统如何扩展...

Global site tag (gtag.js) - Google Analytics