财帮子性能优化简报

财帮子从三月底正式上线到现在,已经快半年了,网站的流量差不多每月翻一翻。 最近这个星期,每天晚上8点到11点的高峰期,每个小时页面浏览一般在5万到7万,最高可以接近10万。除去由web server处理的静态文件等请求,每个小时由rails处理的请求从10万到30万,峰值可以达到200req/s。 与此同时,根据基金理财网站的特点,浏览高峰期,计算量高峰期和缓存失效高峰期刚好重合,我们接受的是比一般ruby on rails应用更严峻的挑战。 有人说财帮子已经是国内规模最大的ruby on rails应用之一了,这点我们无法考证,但随着量的增长,我们的确对ruby on rails的性能有了越来越多的认识。 别指望一劳永逸 从建站初期,我们就采取了各种性能优化的措施,SQLSession, Fragmeng Cache, Memcached…所有你能从教科书里看到的。但是,很多问题是慢慢暴露出来的,你需要根据实际情况来调整缓存策略,修改程序结构,优化算法,甚至优化rails本身。随着量的不断增长,碰到的问题会越来越特殊,书本、社区包括搜索引擎都很难再给你提供现成的解决方案,完全变成对你经验和能力的挑战。财帮子两个星期以前,遇到严重的性能问题,最终我们采用了相当非主流的部署方案和打了自己补丁的web server,成功度过了难关。 你不在美国 没有Google Adsense来养活你,人工费用和带宽、机位费也不成比例,你不可能有点性能问题就靠加服务器来解决。绝不是否定scale out的策略,但在此之前,一定要尽可能挖掘现有程序的潜力,发现已有和潜在的性能问题并解决。否则,盲目的scale out可能只是掩盖了真正的问题,并让你花冤枉钱。 rails不是你的SQL专家 activerecord成功封装了数据库接口,并提供了很多灵活便捷的功能。但是,完全依赖activerecord和ruby,你可能碰到严重的性能问题。find中的include和select选项能带来一些好处,但也非常有限。有时候你不得不写复杂难看的SQL,来代替优美的rails语句。rails纯粹主义在这时候不能为你赚到CPU。即便使用了缓存机制,而且缓存命中率很高,在访问量基数变大时,缓存释放和重建也有可能增大到相当的数量。数据库性能优化仍然是rails应用不可回避的问题。 log是你最好的朋友 log是所有性能调试的起点,从development log到production log,从rails log到web server log,不同的log有不同的侧重点,学会分析log,每个log都可能为你提供解决问题的蛛丝马迹。另外,要熟练使用benchmark结合log做profiling,当real time远大于db time + rendering time的时候,这点尤其总要。

Mac中文输入法FIT开源

对中文输入法,一直没有什么特殊的要求.刚上网那阵,用Windows 3.1系统自带的拼音输入,在聊天室里也能行云流水,甚至从来in-ing不分的我,一度也强记了部分常用字的前后鼻音. 用mac后,被人诟病的中文输入法在我看来也凑合了,不过难免觉得这个确实是”不懂中文”的人做出来的.后来试过QIM,用着用着突然就收起费来,感觉好像没有那么迫切的需要,也就作罢. 然后就看到人推荐Fun Input Toy,试用之后,感觉虽然没有QIM那么强大的词库和智能,但相当稳定,不会突然就需要切换两次回到中文,与Firefox和TextMate配合的也相当好,又是免费,就一直用它了. 这两天看到FIT开放源码的消息.一个优秀的软件,在越来越被人接受的时候,没有选择收费而选择了开源,也算是一件相当有魄力的事情了.

Firebug中你不该错过的几个功能

Firebug是Firefox的一个扩展,提供了诸多网页开发的辅助功能,如果你是一个网页开发人员,天天要和HTML/CSS/Javascript打交道,Firebug能大大提高你的工作效率。 Firebug的大部分功能都很直观,我最常使用的是Inspect CSS/DOM和Javascript debug,有时候会看看Net和YSlow。还有一些功能,或大或小,不是上来就发现,但也是非常好用,不容错过: 获取XPATH 无论做userscript、bookmarklet还是网页爬虫,有时候用五六行DOM实现的网页元素提取,用XPath一句就搞定了。以前定位一个元素的XPath主要靠眼,有Firebug就省眼了,先用Inspect定位网页元素,然后点右键,选Copy XPath,搞定。 这个XPath是从DOM树里来的,已经修正了网页上的一些错误,所以有时和实际的XPath有一些偏差,但一般都很容易调整。比如一些网页中table里没有tbody,直接就是表格内容,DOM树会自动补上tbody,得到的xpath中也会有tbody,在实际使用的时候,和网页实际内容对应,就要把tbody去掉。 javascript命令行 如果哪个脚本语言不提供带命令行的控制台(console),我就不玩了,:-p。善用命令行控制台(console),可以省下很多debug的时间。我以前介绍过jsenv。Firebug也提供非常好用的javascript命令行控制台,可以直接和当前网页交互,输入命令的时候还能自动补齐。另外,一定不要忘记先看看这个命令列表。 控制台API 我最爱用的javascript函数就是alert,偶尔把它放在循环里,我可以花一下午的时间点OK玩。现在是和alert说byebye的时间了。Firebug提供了一套相当完备的javascript控制台API,可以将log直接输出到控制台而不再用跳出小窗口,提供多种log级别(debug,info,warn,error)和分组功能,可以显示对象属性,可以记录stack trace,甚至提供timer和profiler,调试performance都不用发愁了。记得查看控制台API的说明。 标尺 无论在网页布局还是做动态HTML,常常需要知道一个网页元素的相对位置。你可以装一个Measueit扩展自己量,也可以用Firebug里的标尺。用Inspector选中你要度量的元素,在右侧选中Layout标签,然后鼠标划过盒模型中央,标尺就会出现。 在所有浏览器中使用Firebug 对不起,不是所有的功能,是不是有点失望。不过,至少你可以保证控制台API正常输出,并且提供命令行的支持,已经相当不错了。下载firebuglite文件,放在脚本目录下,然后在页面中加入: <script language="javascript" type="text/javascript" src="/path/to/firebug/firebug.js"></script> 用F12就可以召唤出Firebug了。

两部半

周末花了三个晚上看了两部半电影。 《二十八周后》-《二十八天后》经典无可超越是没什么好说的了,不要报太多期待,作为续集《二十八周后》还是不错的。配乐沿用了上部的主题,仍然相当地道,那种崭新浩劫后世界的感觉也依旧在,情节和节奏稍微欠缺,不过还是能让人体会到导演想要表达的寓意,上帝和撒旦往往是二位一体的。欧洲导演的片子,没有寓意还是不太可能。 《内陆帝国》-只看了一半就放弃了。这次真是比《穆赫兰道》还要难,我决定找到英文版以后再看一遍。当然,再看一遍估计也是不够的。我还是很期待一个逻辑严密的解释的。不同于其它被称为艺术导演的作品,你可以随着性子忽悠。如果只从光影、镜头、氛围和不知所谓的人性观点来评论大卫林奇,而不给出逻辑严密的解释,那一定是皮毛都没有摸到。 《Zodiac》-两个半小时的片子,前半部分大量的铺垫,相对有些沉闷,不过后面都赚回来了。网上有人评论,如果你研究过Zodiac案件,会很认可这部片子,如果以前并不了解,这部片子会激发你去深入了解。作为后一类人,我相当认可这种评价。有机会一定要找原书来看看。

传说中的dbaron要来中国了

在mozilla/firefox开发社区混过的人,应该没有不知道dbaron的。1998年,年仅18岁的他对CSS发生兴趣,开始参与mozilla社区的测试,写了一套后来很著名的css测试用例,并成为W3C CSS工作组的受邀专家。1999年到2002年,他作为当时mozilla的东家Netscape的实习生,慢慢从测试转为开发。2003年,dbaron已经是mozilla中CSS模块的顶梁柱,并且成为super reviewer之一(整个社区只有二十多个,是保证整个开发正常运转的核心)。 本周,这位传奇八零后美国工程师就要登录中国,周六在谋智网络做一个题目为” Web Page Layout/Display in Mozilla “的讲座,具体时间地点看这里吧。和这样的CSS专家交流的机会可是不多,反正我会去的。