今天看到一个叫做ESI的东东,以此为线索,一路链接下去,颇为有趣,摘抄些新闻/博客段落来,算作长眼了:
首先是《CSDN09大会见闻》,其中提到康神的讲演《网站的那些事儿》,介绍了大规模网站架构上的种种工具和技术“比如做数据切分的Mysql
Proxy,分布式缓存的Memory
Cached,Web服务器缓存的Squid,页面优化的Y!Slow,页面切分方面的js拼接和iframe拼接(呵呵,怪不得搜狐的页面都是js加载,对搜索引擎很不友好),前端服务器Lighttpd,
Squid 3
ESI等。也提到了架构设计中扩展性,可用性和一致性三者的关系,优化时应让让一致性延迟。提到目前网站系统一般都是三层结构DB层,逻辑层和前端层,而可扩展度方面DB
< 逻辑 <
前端,原因就是有状态的最难扩展,无状态的最容易扩展,所以主张优化时尽量减少DB中存储的状态,将逻辑前移,最后总结优化的大方向就是:逻辑前移,善用缓存(无处不在的缓存)和数据冗余(方便查询)。”
从中得到几个信息——1、搜狐的架构康神插手了;2、squid对ESI的支持限于3.0版本以上(这点很重要,因为其
今天偷菜极不顺利,QQ空间老坏,看着那个Qhttpd的502提示页面就郁闷,决定自己也安一个看看。
http://www.qdecoder.org/qhttpd/download.qsp
话说网上人都说QQ的视频服务器用的是qhttpd,Qzone用的是自己的qzhttpd呀。为啥农场的错误是qhttpd呢?
以上,过完年在说。呵呵
过年回来鸟~~去韩国下载了qhttpd来看,默认安装配置什么的,真的超级简单——功能也超级简单(连logformat都没有)。如果想要玩出花样来,好吧,从源代码开始,慢慢写C去吧~~~
今天偶然看到一个“新”的搜索引擎——WolframAlpha。好长的名字,不过有个东西,我想所有电子工业类专业出身的学生都应该还记得:MATLAB,嗯,这个俺当初考了98分的东东,就是该公司出品滴~~
一个简单的框,右边不是“搜索”而是“=”等号。简明扼要的表明自己其实是个计算类的引擎。最简单的测试,输入一个1+1,回车,果然1+1=2。只要你英文够好,把那些复杂的函数关系写成英文,然后一敲回车,OK,结果、二元绘图统统出现了……不愧是matlab的兄弟~~
作为搞笑试验,我敲了一个man+woman,并期待他给出一个child结果来。可惜不是,而且一本正经的给出了结果:human(animal),然后一串纲目属种云云,呵呵~~
有文章说,如果你往wolfram里写正面四次朝上六次朝下,他能知道你是在抛硬币。
谷歌的云计算、百度的框计算,都是server的计算,不是眼睛能看到的,wolfram才是。赞~
末了,我想到网上一个笑话:在百度中搜索“比我更牛B的人”,结果是“对不起,没有找到比我更牛B的人”~~~
或许有一天,这种搜索引擎真的能出现?
之前的系列文章,只涉及squid本身,今天突然想到,其实这个网站加速,除了squid缓存这种缩短传输距离的办法以外,还有另一个办法——压缩内容以缩短传输时间。
而糟糕的问题是,squid对压缩内容的缓存,限制多多。因为squid默认是以HTTP/1.0进行内容传输的,对HTTP/1.1协议兼容性不怎么滴~~一个不小心,browser就会接受到squid交给它的无法理解的内容,并忠实的把这个错乱信息显示给网民……然后你就等着客户投诉电话吧~~
这个具体的限制就是:squid只支持静态压缩,不支持动态压缩。反应到header上,就是
- rep_header里必须指明Content-length是多少多少,不能采用Transfer-Encoding
chunked这样的动态块格式;
- rep_header里必须指明Vary是Accept-Encoding,而不能是其他的User-Agent等等。
HTTP/1.1标准中,是建议所有的网页都加上vary头的。可见这个东东的重要性。
我不知道是不是有其他的缓存服务器能够支持vary值为user-agent,不过却在网上看到这么一句话:“如果依照除请求头以外的其他条件决定是否使用压缩(例如:HTTP版本),你必须设置Vary头的值为'*'来完全阻止代理服务器的缓存”——我正好在今天
上回编译加载tcmalloc后,效果各有不同,所以还得细分具体运行情况,以便之后继续优化。
之前的架构是1个lvs下挂6台leaf+1台parent。现在已经给7台squid都加载tcmalloc了。leaf运行上佳,CPU占用率甚至降到了2%,loadavg也不过0.2。但parent的CPU占用率虽然降低,loadavg却依然在1以上——这对于单核服务器来说,可不是什么好事
分析日志,或者用squidclient分析cache情况,leaf如下:
$ cat access.log |awk '{if(/NONE/){a[NONE]++}}END{print
a[NONE]/NR}'
0.981347
$ squidclient -p 80 mgr:info
Cache information for squid:
Request Hit Ratios: 5min: 97.8%, 60min: 98.3%
参考原文http://www.wallfire.org/misc/netfilter_conntrack_perf.txt
中文版http://www.linuxmine.com/5791.html
说是zz,好歹也是自己看完以后的zz,所以组织语言次序都是自己来:
首先解释两个概念性的名词
conntrack最大数量.叫做conntrack_max
存储这些conntrack的hash表的大小,叫做hashsize
hash表存在于固定的的不可swap的内存中.
conntrack_mark决定占用多少这些不可swap的内存
hashsize=conntrack_max/8=ramsize(in
bytes)/131072/(x/32)
x表示使用的指针类型是(32位还是64的)
读取conntrack_max值
cat /proc/sys/net/ipv4/ip_conntrack_max
读取hashsize值
cat /proc/sys/net/ipv4/netfilter/ip_co
(2010-02-04 23:34)
话接上文,同一组LVS下,昨天采用重编译方式部署了另一台squid服务器。同样跑上一天,再次对比一番。今天流量比上回稍微少些,未加载的服务器cacti监控截图如下:

CPU占用率

负载
同时,重编译过后的squid服务器监控截图如下:

(2010-02-01 19:53)
昨天下午在一台squid上加载了tcmalloc。运行到现在,整整一天时间。现取LVS下与其完全相同配置的另一台未加载tcmalloc的squid服务器进行比较。
环境说明:
CPUinfo:Intel(R) Xeon(R)
CPU
E5405 @ 2.00GHz
MEM:4G
SQUID:Version 2.6.STABLE21
当单台流量20M,TCP连接数6w时,未加载tcmalloc的服务器CPU占用率和负载情况如下图:

CPU占用率

GADMIN-SQUID
http://gadmintools.flippedweb.com/index.php?option=com_content&task=view&id=47&Itemid=37#Download
在linux环境下运行,经本人下载src后看,只能用于本机squid管理,不支持批量……
SQUIDTL http://www.zerozone.it/Software/Linux/SquidTL/ 针对IP、domain进行访问时长控制,C语言编写,需配合MySQL,好复杂的架构……
SQUIDMODEL http://sourceforge.net/projects/squidmodel/
java平台,俺还没搞定,未知其所以然
CACHEVIDEO http://cachevideos.com 专门针对yotube等网站的视频文件缓存开发的rewrite_program,python编写。可惜是要花钱滴~~
TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。其作者宣称tcmalloc相对于glibc2.3 malloc(aka
ptmalloc2)在内存的分配上效率和速度有6倍的性能提高,tcmalloc的常用场景是用于加速MySQL,不过据Wikipedia的hacker
Domas
Mituzas说,tcmalloc不仅仅对MySQL起作用,对squid也同样起作用(网上也有很多人在nginx上启用tcmalloc了),不过目前squid并没有official
way来使用tcmalloc。
TCMalloc的实现原理和测试报告请见一篇文章:《TCMalloc:线程缓存的Malloc》
那么让我们赶紧给squid加载上tcmalloc,提高cache服务器在高并发情况下的性能,降低系统负载吧。
因为服务器是64位OS,所以要先安装lib