推荐《构建可扩展的Web站点》- 基于监控的系统调优


在前一期山寨交流会上:桂新说他会将良好的构架和一套完整的监控系统作为两个非常重要的基础来抓,良好的架构一步到位这点很难做到(对于发展速度并不确定的小公司来说,架构过大也是一个成本上的风险),但对于后者:一套完整监控系统我是非常认同的。对于目前普遍缺乏测试的Web应用开发过程来说,监控几乎就是测试很重要的一部分;而系统监控本身,也可以帮助及时发现很多问题并量化优化的效果。而系统的扩展和调优的大部分技巧都可以从《构建可扩展的Web站点》(作者是Flickr的开发者)一书中看到。为了减少不必要的调优(盲目的调优是危害很大的),建议从这2章开始看起: 第8章《瓶颈》发现和第10章《统计数据,检测和报警》;有了这些瓶颈检查结果和统计监测/报警系统后,再有针对性的看其他章节做系统调优。

以下是我在博客大巴开发中的一些实践小结:
1 数据库相关
1.1 系统应用层面出问题我一般都习惯性的先去看数据库群的连接数统计:大部分应用最后的瓶颈都在于单表数据量过大后,数据存取慢导致的并发连接数过多的问题,
1.2 解决这个问题目前的主要策略就是分片(share nothing),单个数据库连接数超过100,就想办法拆分并用多个daemon提供服务,数据的拆分也降低了单表的数据量;
做个实验:
单个用户名密码表1000万数据(单个deamon 单个数据库) 可以承受多大的QPS(负载单位:query per second)?
将这个表:存储到10个Deamon 10个数据库 10个表中,单表的记录数会降低3个数量级(千万级==> 万级) 这样的情况下,可以承受多大的QPS?
1.3 对于需要全局访问的数据(比如做每天的汇总统计),可以通过另外冗余存储一份专门用于全局对比的操作用(会增加一定应用为保持数据一致性所带来的开发量);
1.4 slowquery一般是遇到问题才去看的,其实binlog转换成文本格式后,也可以用mysqldumpslow统计的,slowquery就是执行时间超过一定阈值(缺省是1秒)的binlog,更全面查询统计,则需要打开数据库的query log,binlog其实就是没有只读操作的querylog;

2 日志相关
2.1 对于应用来说:容忍过多的非致命错误容易让错误日志变得非常难读,从而对发现很多致命错误造成麻烦;在各种系统开发间隙,统计各种错误日志也是我非常乐于去做的一件事儿,从warning faital级的PHP错误信息到404错误日志;报警后的急救车固然重要,日常的体检及时发现潜在风险较高的漏洞或缺陷并修正都会在系统真正发生报警的时候为成功抢修节约大量时间;
2.2 经常出问题的环节要有错误日志,并且格式设计的比较便于sort和grep也是很重要的一方面;

3 需求削减:
3.1 并非所有用户都需要被满足: 发现spammer盗链者,并设法降低资源流失的速度;
3.2 通过日志统计发现用户使用较少但对系统负载很高的功能;

此外:一个管理方面问题: 开发过程本身是日志是最少的,怎么解决?

而最近开发人员总很流行的2本书:《高性能网站建设指南》《构建可扩展的Web站点》都是博文视点从O'Reilly引进出版的,O'Reilly经常请业内专家(指的是有大规模成功实际应用案例的而不仅仅是科研成果)写书并随系统发展一版再版,博文视点近期也在积极和IT业内很多设计师在联系写书出版的事宜:会看到更多适合目前国内环境特点的开发类书籍出现;

提一个建议,感觉书名中Web site的翻译有些不一致,Web站点和网站是不是一个意思?

作者:车东 发表于:2008-10-02 12:10 最后更新于:2008-11-15 23:11
版权声明:可以转载,转载时请务必以超链接形式标明文章 的原始出处和作者信息及本版权声明

Comments

《构建可扩展的Web站点》看过,很不错,对于像我这样经验不多的开发者,可以将这本书作为一个经验上的弥补和参考。
《高性能网站建设指南》这本书在我计划要读的书之列。

发表一个评论

(如果你此前从未在此 Blog 上发表过评论,则你的评论必须在 Blog 主人验证后才能显示,请你耐心等候。)

相关文章

关于

此页面包含了发表于2008年10月02日 下午12时08分的 Blog 上的单篇日记。

此 Blog 的前一篇日记是 [心理测试] 在一个伸手不见五指的黑屋子里,你会做什么?

此 Blog 的后一篇日记是 AWStats的补充定义:区分百度图片搜索和一些新出现的360搜索引擎蜘蛛

更多信息可在 主索引 页和 归档 页看到。

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.
Powered by
Movable Type 3.36