架构高性能海量图片服务器的技术要素

在笔者的另一篇文章《nginx性能改进一例》有讲到,在图片规模比大的情况,nginx处理能力受制于文件系统的io,意味着,在大规模图片的场景,如果运维还依旧采用传统文件系统的方式,无论是备份成本,还是前端成本,将是无法去衡量,不要去指望调优一点文件系统的一些参数,能带来多大的性能收益,也不要去目录hash+rewrite的方式,改进不大,因为新版的文件系统默认开启了dir_index,解决了同一个目录下文件过多而过慢的问题。不过还有一种方案就是采购SSD盘、fusion-io卡之类高性能的硬件去解决随机io,当然你得容忍备份的痛苦。
先看一下架构图逻辑图,这也是现在各大公司采用的方式。

这个是一个大致逻辑图,具体布署是根据模块的性能消耗类型去混合部署。
第一点,分布存储的必要性:存储原始图片,用分布式存储有几个好处,分布式能自动提供冗余,不需要我们去备份,担心数据安全,在文件数量特别大的情况下,备份是一件很痛苦的事情,rsync扫一次可能是就是好几个小时。还有一点就是分布式存储动态扩容方便。不过唯一遗憾的是目前适合于存小文件系统比较少,我了解的只有fastdfs,以及淘宝的tfs,还有mongodb这几个,tfs经历过淘宝那种规模的考验,文档和工具都太少,如果能驾驭tfs,我觉得值得尝试一下。。

第二点,上传和下载分开处理:通常图片服务器上传的压力与下载的压力相差很大,大多数的公司都是下载的压力是上传压力的n倍。业务逻辑的处理也区别明显,上传服务器对图片重命名,记录入库信息,下载服务器对图片添加水印、修改尺寸之类的动态处理。从数据的角度,我们能容忍部分图片下载失败,但绝不能有图片上传失败,因为上传失败,意味着数据的丢失。上传与下载分开,能保证不会因下载的压力影响图片的上传,而且还有一点,下载入口和上传入口的负载均衡策略也不同,下面有说明。

第三点,使用cache做缓层:分布式存储解决了存储安全问题,但性能问题还需要用cache去解决,直接从分布式存储取文件给用户提供服务,每秒的request高不到哪里去,像淘宝之类的网站,都做了二层cache。对于cache的开源软件选型要考虑二点,1,缓存的量级大,尽可能让热点图片缓存在cache中,像varnish之类的,纯内存的cache,虽然性能很好,但能cache的量级很限于内存,用来做图片的缓存不太适合;2,避免文件系统式的缓存,在我的另一篇文章中有测过,在文件量非常的情况下,文件系统的型能很差,像squid,nginx的proxy_store,proxy_cache之类的方式缓存,当缓存的量级上来后,性能将不能满足要求。开源的traffic
server直接用裸盘缓存,是一个不错的选择,当然使用leveldb之类的做缓存,我估计也能达到很好的效果。这里说明一下cache缓存最好不要去依赖第三方CDN,现在很多第三的CDN业务,不仅提供内容分发外,还额外提供第一个二级缓存之类的服务,但这里面就一个最大的风险就是如果第三调整带来的回源压力暴增,此时你的架构能否支撑,需要认真评估一下,如果成本允许,服务控制在自己手中最靠谱。

第四点,使用一致性哈希(consistent hashing)做下载负载均衡:虽公司的业务的增加带来流量的增加,一个阶段后,一个cache通常不能解决问题,这时扩容cache就是常做的一件事,传统的哈希不足就是每扩容一次,哈希策略将重新分配,大部分cache将失效,带来的问题是后端压力暴增。对uri进行一性能哈希负载均衡,能避免增加或者减少cache引起哈希策略变化,目前大多开源的负载均衡软件都有这个功能,像haproxy都有,至于一致性哈希的最优化,可以参考一下下图(摘自网上的一张图,表示的是怎样的物理节点和虚拟节点数量关系,哈希最均匀)。

第五点,利用CDN分发和多域名访问入口:想要获得好的用户体验,利用CDN的快速分发是有必要的,从成本上考虑可以购买使用第三方的CDN平台。多域名访问方式,大多的浏览器都对单个域名进行了线程并发限制,采用多域名能够加快图片展示的速度。

关于图片服务器的部署基本算完了,其它的细节性调优这里就不说明了。

时间: 2024-09-14 00:58:00

架构高性能海量图片服务器的技术要素的相关文章

长城电脑数据中心服务器电源技术获奖

本文讲的是长城电脑数据中心服务器电源技术获奖,[IT168 资讯]"2014年度中国电子学会科学技术奖"于日前正式揭晓,中国长城计算机深圳股份有限公司(简称长城电脑)提交的"数据中心服务器电源技术研发与产业化项目"以其领先的创新技术成功荣获"科技进步类二等奖".该项目研制难度大,创新性强,属国内首创,不仅是长城电脑在电源及服务器领域长期以来深厚技术积累的结晶,也填补了国内空白,打破了我国在高端服务电源领域长期依赖进口的尴尬局面,代表着我国在高端服

Comet:基于 HTTP 长连接的“服务器推”技术

很多应用譬如监控.即时通信.即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新.发送请求.本文首先介绍.比较了常用的"服务器推"方案,着重介绍了 Comet - 使用 HTTP 长连接.无须浏览器安装插件的两种"服务器推"方案:基于 AJAX 的长轮询方式;基于 iframe 及 htmlfile 的流方式.最后分析了开发 Comet 应用需要注意的一些问题,以及如何借助开源的 Comet 框架-pushlet 构建自己的"服务器推&

数据中心服务器虚拟化技术介绍

提到数据中心里的虚拟化技术,当属服务器的虚拟化最为久远.服务器虚拟化技术是将传统的物理主机通过虚拟化软件,将物理主机的CPU.内存和硬盘存储空间整合成统一的逻辑资源池,再从逻辑资源池中创建几个几十甚至几百个虚拟服务器为应用提供服务,从而提高资源利用率,简化服务器管理.随着云计算技术的应用,服务器虚拟化得到了极大普及,虚拟化已经成为数据中心必备技术之一.实际上,虚拟化技术包含广泛,仅是服务器的虚拟化就已经发展出了很多分支.当然,不管这些技术如何发展,目的都是一样,就是尽可能地提升数据中心应用部署.

Netty实现高性能RPC服务器

  在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后提及到,其实基于该方案设计的RPC服务器的处理性能,还有优化的余地.于是利用周末的时间,在原来NettyRPC框架的基础上,加以优化重构,本次主要优化改造点如下: 1.NettyRPC中对RPC消息进行编码.解码采用的是Netty自带的ObjectEncoder.ObjectDecoder(对象

SSDB:高性能数据库服务器

SSDB是一个开源的高性能数据库服务器, 使用Google LevelDB作为存储引擎, 支持T级别的数据, 同时支持类似Redis中的zset和hash等数据结构, 在同时需求高性能和大数据的条件下, 作为Redis的替代方案. 因为SSDB的最初目的是替代Redis, 所以SSDB会经常和Redis进行比较. 我们知道, Redis是经常的"主-从"架构, 虽然可以得到负载均衡以及数据跨地域备份的功能, 但无法实现高可用性. 考虑这种情况, Redis的主和从分别在两个IDC机房,

克雷公司打造首款ARM架构高性能计算机 或取代至强系列

一支由英国四家高校.高性能计算厂商克雷公司以及Met Office共同组建的研究小组已经获得300万英镑资金,用于构建一台包含超过1万个ARM计算核心的超级计算机.   Met Office XC40很可能面临被ARM替代的命运 此项目的最终结果,将决定基于ARM架构的超级计算机是否有能力在成本层面击败至强家族,同时继续保持可观的性能表现. 此项计划被称为Isambard,旨在纪念十九世纪英国杰出的工程师Isambard Kingdom Brunel.此项目由布里斯托大学高性能计算教授Simon

宝德可控双路和高性能四路服务器通过现场评审和鉴定

9月16日,由深圳市科技中介同业工会主持,中国科学院院士兼中国科学技术大学软件学院院长陈国良和来自清华.北大.南开等全国六所高校的专家组成的鉴定委员会对宝德科技的安全可控双路服务器(PR2920L)和高性能四路服务器(PR4840R)进行了现场评审和鉴定,认为其产品和性能达到了国内领先水平,一致通过了这两个项目的科技成果鉴定,宝德科技集团副总裁马竹茂先生和宝德研究院院长张栩先生带领宝德科技的项目主要研制人员参与了鉴定会. 鉴定委员会认为宝德安全可控双路服务器PR2920L是一款低功耗且面向国家重

中国支持ARMv8架构的超大规模服务器开发

2016年7月12日,华芯通半导体技术有限公司(以下简称"华芯通半导体")已获ARM v8-A架构授权.中国成为全球第二大数据中心市场,该授权将帮助华芯通半导体在快速扩张的中国服务器市场加快先进服务器芯片组技术.这项多年的授权将帮助中国企业在本土市场提供基于ARM的服务器技术,从而推动最高效服务器解决方案的大规模部署. 华芯通半导体是中国贵州省人民政府与美国高通公司合资创办的企业.该公司位于贵州省,是中国第一个建立大数据发展产业集群的省份.该地区已成为数据中心集群,拥有250多万台服务

围绕云计算 服务器虚拟化技术出新面貌

本文讲的是围绕云计算 服务器虚拟化技术出新面貌,[IT168 资讯]虚拟化技术的三项基本使命-即作为客户端技术,作为服务器技术和作为网络技术,如今正在围绕云计算理念相结合在一起. 起源于X86服务器的虚拟化技术已经快速扩展到存储和网络领域.如今虚拟化技术的应用范围已经涵盖桌面系统,在处理器,内存和交换机上也都可以看到虚拟化的身影.虚拟化技术正在向硬件和软件应用工具渗透,甚至延伸到了智能手机领域. 高科技咨询公司CIMI的首席执行官汤姆.尼勒将虚拟化的三项基本使命描述为客户端技术,服务器技术和网络