QCon2011大会4月8日PPT学习总结

最近正在召开QCon北京2011大会,趁此机会学习了一部分QCon大会的PPT,大会的PPT可以在QCon大会官网下载:http://www.qconbeijing.com/schedule.html

主题:淘宝商品库优化实践

讲师:淘宝核心系统数据库组 余锋(褚霸)

在技术方案的着眼点上,讲师主要强调了:通过高性能硬件支持平台,充分利用Cache(这一点在之后的演讲中多次强调),充分考虑容灾性。同时讲师表示要大胆借助开源产品提高系统性能

在I/O能力的分配上,提高读能力的方式是零散读,提高IOPS,对于提高写能力采用了集中写,提高吞吐量

在Cache分配上,商品库除了采用MySQL的内部存储、虚拟内存以外,还利用了Facebook的Flashcache技术(在文件系统和设备驱动之间新增一次缓存层,实现对热门数据的缓存,一般用SSD作为介质的缓存,通过将传统硬盘上的热门数据缓存到SSD上,然后利用SSD优秀的读性能,来加速系统)。这个方法较之内存缓存,没有内存快,但是可用空间可以比内存大很多。此外还利用了RAID卡内部Cache。

对于系统调优的指导思想,重视理论结合实际,不靠主观猜测而是按实际效果做决定。“内存为王”,用加大内存提升系统性能(其实也是间接加大了缓存)。随机数据和顺序数据分离,随机数据采用Direct IO(优点是CPU占用率小,适用于缓存命中率较低的文件),顺序数据通过缓存读。在保证安全的前提下,一定要充分利用系统各级的Cache

在业务上优化掉复杂查询(类似天涯论坛的做法)。对于InnoDB,分配尽可能大的Buffer Pool,日志数据分开存储,减少锁对多核CPU的影响(减小锁的开销),适时清除InnoDB产生的日志Cache。

主题:MongoDB应用实践

讲师:视觉中国 潘凡

随着系统规模的增大,面临的新挑战主要有:数据量增大,服务器硬件有限,属性更新频繁以及由于内存不足导致的Memcached缓存命中率降低等问题。

为此视觉中国期望通过采用持久化的分布式Key-Value存储来解决问题。经过系统迁移,最终视觉中国大胆地完全抛弃了MySQL,采用纯NoSQL的解决方案,这主要是基于网站的以下特点:可以没有事务,对数据一致性的要求并不高,很少使用多表查询(类似的,在天涯论坛的演讲中讲师讲到论坛早期通过数据冗余的方式成功消除了多表查询的开销)。在这一点上,我认为还是必须基于对自身系统充分的理解和分析上,根据自身情况进行架构调整,例如对于安全性高的操作,事务就不能丢,对数据一致性的要求也比较高。

选择MongoDB的原因在于:已经有大站成功的经验,互联网上分享MongoDB的信息逐渐丰富,10gen团队在邮件列表提供了快速及时的技术支持,同时NoSQL也是大势所趋。视觉中国采用的是手动编译的MongoDB,在达到自定义需求的同时保持系统的高度稳定。

迁移后的CPU使用率降低了很多,同时系统对内存需求较大,内存必须要放得下索引,实践经验是4G以上为佳。

同时新数据库面临很多新的问题,例如频繁的DB操作导致碎片增加,删除数据后磁盘空间得不到释放,解决方案是定期重建索引,压缩数据块。这一点和MySQL的OPTIMIZE TABLE很像。实践中也发现MongoDB存在以下致命缺陷:单机可靠性低、部署时没有考虑机房断电的特殊情况(为此网站曾损失10个小时的数据)。解决方案:减少刷新磁盘时间,提高数据持久化的频率,为此引入了额外的I/O开销,但是这种影响在可接受范围内,并且保证了数据的安全,同时采用了批量写入的方式。

讲师还强调了对于开源产品,绝不使用开发版本而是用稳定版本。由于网站带宽不足,他们利用了国外相对便宜的服务器,但为此带来了很高的延时,对此就要通过压缩数据等方式减少网络数据的传输量。

主题:构建高性能的微博系统

讲师:新浪网 杨卫华

讲师首先强调了对于开源产品的使用原则:用好一款开源产品的前提条件是深入了解它的定位。的确是这样,在不了解产品的情况下就盲目上阵容易造成后期开发和维护的困难,甚至是产品根本不适合实际场景。这一点我认为不仅要广泛参考官方文档以及网上的评测,还必须自己对产品做足够多的测试才行。

新浪微博采用了Redis作为NoSQL的解决方案,适合的主要场景有:需要高速读写访问,无高准确性需求,能容忍短期不可用,有List/Set数据结构需求(附加功能)。对于数据结构,讲师认为“小即是美”,尽可能采用简洁的数据结构,而在网络传输过程中也要努力减少数据量,例如新浪微博采用了不传输字段名称而是以编号代替之的方式,以及使用Google的Protocol Buffers作为数据交换格式,相比JSON非常小并且序列化/反序列化很高效,目前支持Java/C++/Python三种语言。

新浪并没有像视觉中国那样完全放弃MySQL,而是利用了MySQL的可靠性加上NoSQL的特性作为补充。在系统中大量使用了异步传输和内存缓存来提升效率和吞吐率。对于接口的设计,以下方面是最重要的:安全、易用、性能。

主题:为速度而生——百姓网如何优化网速

讲师:百姓网 潘晓良

在HTTP响应中去除了ETag标签,减少了整整一半的流量,同时并不影响客户端的缓存。在前段优化中,主要参考了《高性能网站建设指南》和《高性能网站建设进阶指南》两本书,之后讲的很多优化手段都在这两本书中可以找到,顺便一提,这两本书堪称是网站工程师的必读书(不仅是前端工程师),读过以后的收获非常大,直叹前端工程师真是不容易啊。

讲师强调了要充分利用CDN来加速网络,静态CDN对静态内容优化非常有效,而动态CDN对动态内容的优化有限,特别是,选个好机房才是根本,这一点是其它人没有涉及到的,的确选一个好机房能够降低公司人员工作的难度,也节省了人力开支。

同时百姓网非常强调实时监测,联想到百姓网10人的技术团队,深切感受到“灵活”的特点,针对动态情况作及时反应,让系统在微调中时刻处于最佳状态,这或许才是调优最精髓之处

发表评论

电子邮件地址不会被公开。