图片服务架构演进图片服务架构演进
现在几乎任何一个网站、Web App以及移动APP等应用都需要有图片展示的功能,对于图片功能从下至上都是很重要的。必
须要具有前瞻性的规划好图片服务器,图片的上传和下载速度至关重要,当然这并不是说一上来就搞很NB的架构,至少具备
一定扩展性和稳定性。虽然各种架构设计都有,在这里我只是谈谈我的一些个人想法。
对于图片服务器来说IO无疑是消耗资源最为严重的,对于web应用来说需要将图片服务器做一定的分离,否则很可能因为图片
服务器的IO负载导致应用崩溃。因此尤其对于大型网站和应用来说,非常有必要将图片服务器和应用服务器分离,构建独立
的图片服务器集群,构建独立的图片服务器其主要优势:
1)分担Web服务器的I/O负载-将耗费资源的图片服务分离出来,提高服务器的性能和稳定性。
2)能够专门对图片服务器进行优化-为图片服务设置有针对性的缓存方案,减少带宽网络成本,提高访问速度。
3)提高网站的可扩展性-通过增加图片服务器,提高图片服务吞吐能力。
从传统互联网的web1.0,历经web2.0时代以及发展到现在的web3.0,随着图片存储规模的增加,图片服务器的架构也在逐渐
发生变化,以下主要论述三个阶段的图片服务器架构演进。
初始阶段
在介绍初始阶段的早期的小型图片服务器架构之前,首先让我们了解一下NFS技术,NFS是Network File System的缩写,即
网络文件系统。NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。NFS
server也可以看作是一个FILE SERVER,用于在UNIX类系统之间共享文件,可以轻松的挂载(mount)到一个目录上,操作起来
就像本地文件一样的方便。
如果不想在每台图片服务器同步所有图片,那么NFS是最简单的文件共享方式。NFS是个分布式的客户机/服务器文件系
统,NFS的实质在于用户间计算机的共享,用户可以联结到共享计算机并象访问本地硬盘一样访问共享计算机上的文件。具体
实现思路是:
1)所有前端web服务器都通过nfs挂载3台图片服务器export出来的目录,以接收web服务器写入的图片。然后[图片1]服务器挂
载另外两台图片服务器的export目录到本地给apache对外提供访问。
2) 用户上传图片
用户通过Internet访问页面提交上传请求post到web服务器,web服务器处理完图片后由web服务器拷贝到对应的mount本地目
录。
3)用户访问图片
用户访问图片时,通过[图片1]这台图片服务器来读取相应mount目录里边的图片。
以上架构存在的问题:
1)性能:现有结构过度依赖nfs,当图片服务器的nfs服务器有问题时,可能影响到前端web服务器。NFS的问题主要是锁的问
题. 很容易造成死锁, 只有硬件重启才能解决。尤其当图片达到一定的量级后,nfs会有严重的性能问题。
2)高可用:对外提供下载的图片服务器只有一台,容易出现单点故障。
3) 扩展性:图片服务器之间的依赖过多,而且横向扩展余地不够。
4) 存储:web服务器上传热点不可控,造成现有图片服务器空间占用不均衡。