但是今天观察了下csdn站点的架构,发现做的比较简单,看来开发者比较喜欢从程序着手,着重优化代码和数据库,对系统整体架构思考的时间不多。
我着重看了几个二级域名:www、news、bbs/community和blog,其中www、news这些静态文件都有通过squid缓存,用的app_squid架构,然后是dns轮询做分流。
在这里顺便讨论下为什么很多大型网站都喜欢用dns轮询来作首页,而不采用lvs或其它负载均衡策略。这是因为负载均衡都是把所有的访问先集中到一个ip上,因为只有一个ip,所以无意间这个ip的稳定性就关系重大了。ip稳定性会受很多因素影响:n个交换机、线路、机器等等,颇为复杂。而首页很有可能会用到异地的负载均衡,这么来不用dns,方案就很难设计了。现在的常用浏览器和下载软件,都有对dns的故障处理机制,所以dns也是可以屏蔽掉一些故障的,虽然功能不强,但也较为实用;相比之下,即使是lvs也会有很多杂七杂八的问题,反而不如dns性能强和稳定。
csdn静态页前端缓存(2009-05-11):
Address: 211.100.26.121
Address: 211.100.26.122
Address: 211.100.26.123
Address: 211.100.26.124
这四台机器squid版本:2.6.STABLE14,能够揪出很多问题来:
1) 从文件打开数可见编译参数都是不同的,或是系统配置参数不同?机器分了两批上线吧。
2) 居然没有编译开启epoll,性能看来好不了,重新编译下吧。
3) 缓存没有细致调优,所以这几台机的命中率很低,大量穿透,我估计是重启squid的时候没有清理缓存文件夹造成。
4) 很多内容都没有expires头,这也不能算什么问题,稳定就好,IIs要细致定义expires也很麻烦。
5) 这些静态页面都不支持gzip压缩,浪费了不少带宽,此问题应归罪于IIs和squid的配合问题,可加nginx中层代理处理它。
由此可见csdn的系统管理员对系统都不太上心,从另一个角度讲,系统嘛stable就好,管它优不优化,我觉得这个心态也非常赞。
有兴趣可以参考:
squid的mgr强大功能介绍
squid的mgr可以提供某台正在运行中的squid的实时监控数据,这些数据不仅可以帮助我们分析squid的运行状态和缓存的效果,而且还有很多很多的秘密和玄机藏在里面噢。很多时候觉得squid已经非常优化,查看mgr之后或许会大吃一惊。
mgr的常用命令行:
/usr/local/squid/bin/squidclient -h 127.0.0.1 -p 80 mgr:info
其中-h指定ip地址,-p指定端口,mgr:info是mgr的最常用的指令,指令还有很多,执行:
/usr/local/squid/bin/squidclient -h 127.0.0.1 -p 80 mgr:
这行语句比前一句少了最后的一个info,这样就会打印出可用的指令了,指令太多,我还没有能摸索完……见附件1
记住几个指令:mgr:info mgr:5min mgr:60min,没事做的时候就敲敲。
mgr:info可以说是最常用的了,它提供了一个概述,请求量、命中率、缓存数量等等都包含在内,我就不一条条说了,不懂英文可找翻译。
另外,这些指令有一些是消耗系统资源比较大的,所以请勿在重要场合尝试,免得造成困扰。如果非要尝试,附件2中倒有一堆测试机。
如果无法正常查看mgr,证明是squid配置中关闭了mgr的访问权限,那么需要在squid配置里加上几句话打开权限:
acl adminBoxes src 127.0.0.1
acl manager proto cache_object
http_access allow manager adminBoxes
http_access deny all
我可以发誓,配置这几句话并不会把你的机器变成一台新的测试机,里面有几行可能跟原来配置重叠,这是强调,并且语句前后顺序也不能变。
其中只有一个常要改的东西,就是ip地址,这里配置的是本机,可以增加:
acl adminBoxes src 127.0.0.1 192.168.1.100
可以支持一个网段:
acl adminBoxes src 127.0.0.1 192.168.1.100 192.168.51.0/24
配好之后要记得reload一下squid
squid -k reconfigure
附件1(mgr指令大全)
memMemory Utilizationpublic
cbdata Callback Data Registry Contents public
events Event Queue public
squidaio_countsAsync IO Function Counterspublic
config Current Squid Configuration hidden
ipcacheIP Cache Stats and Contents public
fqdncacheFQDN Cache Stats and Contents public
idns Internal DNS Statistics public
external_acl External ACL statspublic
http_headers HTTP Header Statisticspublic
menu This Cachemanager Menupublic
shutdown Shut Down the Squid Process hidden
offline_toggle Toggle offline_mode setting hidden
info General Runtime Information public
filedescriptorsProcess Filedescriptor Allocation public
objectsAll Cache Objects public
vm_objects In-Memory and In-Transit Objectspublic
openfd_objects Objects with Swapout files open public
pending_objectsObjects being retreived from the networkpublic
client_objects Objects being sent to clients public
io Server-side network read() size histogramspublic
counters Traffic and Resource Counters public
peer_selectPeer Selection Algorithms public
digest_stats Cache Digest and ICP blob public
5min 5 Minute Average of Counterspublic
60min60 Minute Average of Counters public
utilizationCache Utilization public
histograms Full Histogram Counts public
active_requestsClient-side Active Requests public
storedir Store Directory Stats public
store_check_cachable_stats storeCheckCachable() Statspublic
store_io Store IO Interface Statspublic
pconnPersistent Connection Utilization Histogramspublic
refreshRefresh Algorithm Statisticspublic
forwardRequest Forwarding Statistics public
client_listCache Client List public
asndbAS Number Databasepublic
附件2(测试机)
squidclient -h www.youku.com -p 80 mgr:info
squidclient -h www.cctv.com -p 80 mgr:info
squidclient -h www.xinhuanet.com -p 80 mgr:info
squidclient -h www.people.com.cn -p 80 mgr:info
squidclient -h www.kuaiche.com -p 80 mgr:info
squidclient -h www.it168.com -p 80 mgr:info
squidclient -h www.qidian.com -p 80 mgr:info
squidclient -h www.vodone.com -p 80 mgr:info
squidclient -h www.hc360.com -p 80 mgr:info
squidclient -h www.12530.com -p 80 mgr:info
squidclient -h www.verycd.com -p 80 mgr:info
squidclient -h www.9you.com -p 80 mgr:info
squidclient -h www.duowan.com -p 80 mgr:info
squidclient -h www.poco.cn -p 80 mgr:info
squidclient -h www.blogchina.com -p 80 mgr:info
由附件2看来,中国使用squid作前端的网站还是非常多,附件2中有一部分都是CDN来的,机器多维护起来也晕乎晕乎。
squidclient -p80 -hwww.youkuaiyun.com mgr:info看下。
blog和community这两个多数是动态页面,csdn没有作静态化处理,所以就没有缓存,直接去了后台,最近其增加了nginx,使用nginx来作负载均衡。
在nginx后面有多少台IIs,不能探得出来,回想起从前csdn那非常不稳定的状态,加了个nginx确实好了很多,由于使用了nginx,所以这两个系统支持压缩就变得顺理成章。
bbs没有使用缓存也都说得过去,但像blog这样的系统,都没有使用缓存,觉得非常遗憾,事实上这两个系统都可以用squid完全缓存,csdn从此就可以非常稳定了,但前面也提到了,开发者通常喜欢从自己写的代码里着手优化,这是思维上的局限性,我自己也花了好多年才跳出这个框框,明白了系统优化要从整体入手这么条简单的道理。csdn使用nginx来负载均衡,也是有所领悟,希望他们能更放得开,更为进步。我希望我喜欢的网站都非常稳定快速,这样我在网上闲逛的时候会更顺心些,像csdn、天涯和网易评论这些东东我都是非常之恨的,不过他们都在进步,算是好事。
因为csdn的前端架构太简单,所以图我也懒得画了,事实上估计csdn也不是简单的东西,好多逻辑都被藏在代码和数据库那头,这不可得知。因为csdn代码层使用的是windows主机和asp.net,既然使用了windows,那么棘手的事肯定不会少,还是要找更好的前端,把这些app服务器盖得严严实实为妙,稍有疏漏的话恢复服务的时间就长了。