2011北京QCon全球企业开发大会演讲点评-day2
昨天晚上在二楼和和盛大的Hax小聊了一会HTML5发展,然后除了门儿去东四吃卤煮火烧,车费花了小一百,卤煮一碗才19,回来的时候的哥夸我真棒找对了地方,东四的那家卤煮是老北京公认的老店,的哥还夸我说晚上肚子饿出来吃卤煮,这才叫做生活⋯⋯
废话不多说,今天的大会照样是非常精彩,早上第一场是来自Spring的Java云计算的主题,从Juergen的演讲中提到了一些Spring的特性,例如Cache,Servlet支持,将来不再会有web.xml这种配置文件等等,没有给我留下特别深的印象,可能也是因为Java社区在javaee方面的发展已经趋于稳定,在javaee没有大的版本变更和新技术出现的情况下很难有技术上的突破和变化,Jar Hell虽然很让人头疼,但是大家都已经这么疼过来了,这时候再改不改也无所谓了。
第二场是由百度的吴波所演讲的离线计算集群整合主题,吴波提到了目前几个较大的离线运算库,例如知名的SETI@Home,想当年我也为了SETI上的排名做过一些不太安分的事情⋯⋯吴波提到了在业务量发生巨大增长的时候,如何用其分布式任务消息中心去管理数以万记的服务器运算,如何在数据事实性有要求的情况下实施对系统负载做监控,甚至做到任务权重再分配以减轻特定服务器的压力。吴波说得非常好,但分布式离线计算这个话题对于在座的很多公司都只具有参考意义,对于以整个互联网为样本的数据业务分析和处理也只有搜索引擎会去干这种事情了。吴波也提到了在不断提高的数据面前计算能力也需要跟进,是不是可以考虑一下对于事实性不那么高的任务在百度内部采用SETI@home的方式去处理呢?以百度6000个员工,每个员工1台普通i5电脑提供50GFLPS,每天运算3个小时来算,每天也可以提供近4万的GFLOPS了,快赶上三分之一台Blue Gene了。
第三场是Netflix的Adrian提供的基于云计算架构的主题,演讲中Adrian提到了Netflix已经实现了100%的云端化,他们的云提供商是Amazon,主要原因是Amazon提供了许多基于云计算的组件,例如数据库,CDN,队列系统,邮件等等,从而可以让做视频的Netflix减少许多服务器升级,配置,更新,维护的工作,大家都知道视频公司对服务器数量的要求可是很高的。通过云端化,Netflix才可以将公司的重心放在业务和关键逻辑上,在服务器运位和技术支持上则可以和所有使用Amazon的公司互相共享,从另一个侧面降低了公司对于技术变更以及升级所带来的风险。Netflix在需求扩张时,可以简单的通过点几下鼠标达到迅速部署上百台服务器的目的,Amazon帮他们搞定一切。
Amazon的云计算也不是便宜的东西,Netflix虽然是美国正版视频的老大哥,也没到钱多的没地方用的地步,也会在流量节约上做很多的处理,例如将视频分片成10秒的片段,防止用户预加载视频过多但又没看完导致流量浪费,在会后与Adrian的交流中也提到了Netflix使用不同的三个CDN(Akamai,limelight,Level3)的原因是不同的CDN服务商在美国不同的区域所能提供的速度和价格是不同的,例如Netflix所在的加州,使用Level3的性价比就会比较高,看来美国老大哥和中国人有相同的跨ISP传输效率问题,这个问题还非常严重,换CCTV的说法就是美国人民生活在水生火热之中。
会后的与Adrian的交流中也了解到在数据分析界非常有名的Netflix公司的推荐算法改进大奖的一些消息和情况,数据分析领域也是随着在线交易渐渐火起来的一个技术方向,下次QCon举办方是否可以考虑添加数据分析专题?
中午的饭就那样,我昨天中午是在西餐厅吃的,今天去了中餐厅,发现东西都差不多。唯一可以表扬的是今天的果汁换成了橙汁,假冒菠萝汁被换下了,不知道是日常调换还是真的听取了我昨天的意见⋯⋯
下午我参加的第一场是由新浪带来的《面向开发的MySQL性能优化》。新浪数据库架构经历了三个变化,通过MySQL+Memcached到MySQL UDF再回到MySQL Memcached Redis的结构,可以说是非常纠结。在第二阶段新浪想通过UDF和triger去完成清除数据cache的功能,但是最终发现UDF和triger的综合性能会是一个很大的问题,其实新浪在第二阶段离Facebook的改SQL规则的方案只有一步之遥,不过这也体现了新浪数据库团队和淘宝数据库团队不同的地方,我的感觉是新浪数据库团队更倾向于scale-out,例如通过数据集群达到高并发流量的支撑,通过横向分割数据达到大规模数据存储等等,而淘宝的团队更偏向scale-up,淘宝解决问题的思路是最大化的挖掘单机性能。两家都不差钱的公司做事的方式截然不同,很明显的体现出各自技术团队的特点。
杨海朝提到的什么ip用int存,怎么用index,timestamp怎么用,prepared statement,handler socket,insert on duplicate key/replace,如何从业务上减少mysql查询等等我就不提了,点到为止,大家自己查阅《MySQL High Performance》和MySQL Performance Blog,内容都有而且更加详细,毕竟也不是什么新问题了,设计和开发的时候照着去做就行。
在这里我倒是想重点谈谈新浪团队在数据库分表时候出现的重复迁移问题,新浪每次迁移都会遇到数据reload的问题,也就是每次增加集群内数据库实例的数量时,都会遇到数据需要根据新的规则在不同的数据库中做迁移,实例一多这个活儿是能累死人的。通过hash range lookup 中间层等等几个方案实施下来最终效果也不是很好:hash没有规则,range的话数据量就固定了,lookup消耗大,就算用中间层的话其实还是得有个分片逻辑的,相应时间又会增加,总之就是麻烦事儿。我倒是曾经在为某项目做系统扩容方案的时候研究过数据转移率的问题,知道了有多少数据会被转移,多少数据会保留在原有的实例中,就可以系统的评估转移带来的cache丢失现象持续的时间和所需要的资源,毕竟在麻烦不能避免的话,那只能提早做准备。
用当时项目中所用的是取余平均分布,所以例如从4个实例升级到5个实例的过程中,升级前和升级后数据的分布是这样的:
红色标出的这些数据是在迁移过程中不需要被更改位置的,而红色之外的数据都由于数据分片的方式发生了变化,需要被转移。在这个例子中只有20%的数据还在原有的数据库。而这个计算升级到指定实例数量的数据保留率则可以很简单的通过一个excel表格计算出来,例如3个实例升级到n个实例的过程中数据的保留率如下:
第二场则是由蒋江伟带来的前台优化实践专题。淘宝前台可以理解为一般网站架构中的app层,提供主要的数据读取,页面渲染等面向用户的操作。淘宝的前台是基于java的,蒋江伟向我们展示了如何最优化调整应用所开启的线程数以达到提高QPS的效果,线程数计算方式为:线程总时间/瓶颈资源占用时间×瓶颈资源并行数,而QPS则为1000/瓶颈资源时间×瓶颈资源并行数。淘宝前端使用的模版引擎是velocity,蒋江伟也分享了他通过修改velocity的页面渲染方式,使velocity输出的页面代码从char转换为byte从而提高了100%的页面输出效率,又通过将解释执行改成了编译后执行提高了10%的效率,经过这些优化,最终对QPS的提高大概是50%左右。而在jvm执行环境方面,蒋江伟通过演示给出了合理提高jvm的young区从而提高大页面执行效率的建议。
蒋江伟带来的这个优化主题对使用java的互联网企业很具有参考性,实施起来也不复杂,能够真正帮助大家解决问题,我个人认为是今天的亮点主题。
第三场则是由艺龙的贾志峰所带来的艺龙网架构分析。艺龙网对技术的主要关注方向是解决复杂业务所带来的紧耦合性、异步化和运维上的监控。紧耦合性这个问题不仅仅出现在旅游网站中,对于所有的快速发展中的IT公司,都存在着业务逻辑不断地变复杂,原有结构无法做到很好的适应性,需要不断地修改代码以符合新的需求,而这个过程是由于其不可中断性,是非常痛苦的,引用吴波的话就是“在飞驰的汽车上换轮子”,而艺龙给出的解决方案则是SOA和中心化。艺龙通过将所有服务的配置文件做成能够动态获取和分发最新版本的方式做到了服务器的集群化管理,而在业务流转中则使用了自己开发的业务总线,业务和业务之间不直接交互,而是采取通过ESB进行分发和流转的方式进行动态的交互,减少了由于业务逻辑复杂性而产生的问题。而在介绍如何与航信系统进行交互的过程中,贾志峰也介绍了艺龙如何通过动态调整航信反馈信息的缓存有效期达到减少与航信产生数据通信的成本。艺龙对订单成功率的监控系统也较为有亮点。
总而言之,我认为电子商务领域中的旅行/票务行业面临着众多的挑战,他们在需要继承传统业务模式的基础上实现电子化和信息化,与此同时还要在保证线上业务不中断的同时做到灵活调整,艺龙的架构对电子商务网站来说具有参考性。
我参加的最后一个主题是由谢廷宝带来的《网游服务器性能优化》,在性能监控方面他介绍了通过使用机器人对游戏过程进行模拟,通过这个过程中的数据记录,分析影响用户的各个游戏环节的方案感觉很有特色,难道第一个做外挂的公司真的就是游戏公司自己?在碰到玩家好友数量过多,或者玩家间的私信太多等等技术问题上,谢廷宝给出的解决方案与SNS界基本相同。这次演讲总体上比较催眠,毕竟游戏也是一个网络应用,很多问题和处理办法与网站开发都相似,没有太多的东西可讲。我其实感兴趣的是如何保障游戏内交易过程这个问题。
最后照例插一个小广告吧,虎扑中国(hoopchina.com)是中国排名第一的体育综合门户网站,目前正在招聘PHP开发工程师,MySQL DBA这两个职位,工作地点在上海,有意者请发简历至:hr_engineer@hoopchina.com,谢谢

