企业级 PHP 高并发解决方案 0x07 独立图片服务器的部署

架构974 字

独立图片服务器的必要性

我们知道,无论对于Apache还是Nginx,图片始终是最消耗系统资源的,如果将图片服务和应用服务放在同一个服务器的话,应用服务器很容易会因为图片的 高I/O负载而崩溃,因此对于有些大型网站项目,我们有必要将图片服务器和应用服务器分离。

部署独立的图片服务器(甚至是服务器集群)是大型网站图片存储解决方案中最基础的,因为有了独立的图片服务器后,我们才能对图片服务器做更有针对性的性能优化,为图片服务器设置针对性的缓存方案,减少带宽成本,提高访问速度。

从硬件角度说,图片服务器可以配置高端的硬盘,7200转的换成15000转的,而CPU只需要使用一般的CPU就可以了。

从软件角度说,可以为图片服务器配置特殊的文件系统来满足对图片的I/O请求,如淘宝 的TFS,就很好地解决了大规模小图片文件带来的I/O噩梦,同时,我们也可以采用Nginx、squid来代理图片请求,通过增加图片服务器,提高图片吞吐能力。

分担 Web 服务器的 I/O 负载-将耗资源的图片服务分离出来,提高服务器的性能、稳定性和扩展性。

# 采用独立域名

注意,这里是指独立域名,不是子域哦,比如yahoo.com图片服务器用了yimg.com的域名,而不是用二级域名img.yahoo.com。

同一域名下浏览器的并发链接数有限制,突破浏览器链接数的限制,通常情况下浏览器的并发连接数是2到6个。

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

另外还有由于 Cookie 的原因,大部分 Web Cache都只缓存不带 Cookie 的请求,导致每次的图片请求都不能命中 Cache。而仍旧要去原始服务器获取图片,导致图片缓存意义不大。所以,还是给单独搞一个图片独立域名吧,当然,不只是图片,CSS和JavaScript文件也可以参照这个思路来搞。

# 如何进行图片上传和图片同步?

## NFS 共享方式

NFS是Network  File System(网络文件系统)。主要功能是通过网络让不同的服务器之间可以共享文件或者目录。

NFS客户端一般是应用服务器(比如web,负载均衡等),可以通过挂载的方式将NFS服务器端共享的目录挂载到NFS客户端本地的目录下。    

NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能的,但是能够用过网络进行图片,视频,附件等分享功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。    

NFS和RPC的关系:可以理解为NFS是一个网络文件系统(比喻为租房的房主),而RPC是负责信息的传输(中介),客户端(相当于租房的租客)

了解 NFS 可以看我的另外一篇博文《LInux 典型应用:》

## 利用 FTP 同步

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

maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见