UCenter的头像调用负载问题改进

在UCenter头像系统中,使用机制是这样的通过 “GET /uc_server/avatar.php?uid=2890313&size=middle HTTP/1.1″这样的方式调用然后avatar.php转换为”/data/avatar/002/89/03 /13_avatar_middle.jpg”这样的地址并发送301重定向请求,这个有很大问题.
第一,服务器的头像连接会增加一倍,就算浏览器有缓存,那也是不小的流量.
第二,用户浏览器并发限制默认为2有些修改成了5,也就是说IE只能同时打开2|5个请求服务器上的问题,头像在论坛首页,帖子中以及短信中的频繁应用,这样就会延迟页面其他元素打开的时间
第三,服务器每个Apache连接会占用一定的内存空间,这样服务器因为连接数增加消耗的内存也有所增加

朋友找到我的时候我做出了以上的分析,本来打算给他换nginx+FastCGI,但是人懒了,没给他换,直接装了mod_XSendfile
下载mod_xsendfile;

引用:

apxs2 -cia mod_xsendfile.c

引用:

LoadModule xsendfile_module modules/mod_xsendfile.so

然后我们修改apache22的httpd-vhosts.conf 在这个虚拟主机中加入

复制内容到剪贴板

代码:

<files avatar.php>
XSendFile on
XSendFileAllowAbove on
</files>

最后修改avatar.php文件
第一 找到

复制内容到剪贴板

代码:

header("HTTP/1.1 301 Moved Permanently");

修改为

复制内容到剪贴板

代码:

header("Content-Type:image/png");

第二 找到

复制内容到剪贴板

代码:

header('Location: '.UC_API.'/'.$avatar_url);

修改为

复制内容到剪贴板

代码:

header("X-Sendfile: ".$avatar_url);

搞定..你会发现,10万PV的论坛这样修改是很有必要的



发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 + 1 =