托同事的福,参加了一下QCon北京的会议,9号的会议总共分为两个阶段,上午共有三讲,且都在大宴会厅,下午的讲座是分专题的,大家可以选择感兴趣的专题去听.
上午的三讲是:
1. 2011年的企业级Java和超越:从JavaEE6到Cloud Computing 讲师:Juergen Hoeller
2. 百度离线集群整合之道 讲师:吴波
3. 基于云计算架构构建Netflix 讲师:Adrian Cockcroft
下午共有四个专题,并且每个专题都有4场演讲,且是同时进行,大家可以选择性的去听
1. 设计优良的架构
2. 更有效地做测试
3. Web性能与扩展
4. 移动开发
上午三个都听了,其实只听了两个,第一个和第三个,貌似把最有价值的反响最大的一个:baidu离线集群整合之道给漏掉了。。。因为在听第一个的时候,突然来了个电话说线上紧急问题,那个吓的我哪还听的下去啊。。。
下午听了四场讲座,总体来说还不错,不过貌似和我的主方向不太相关啊。。。不过,人家的思想还是很好的,也许我们前端开发能用上也说不定呢对吧~
下面来讲讲我在今天的收获吧,其实是硬性的做了笔记和相关的记忆而已。。。并没有很好的吸收
一、上午
1. 2011年的企业级Java和超越:从JavaEE6到Cloud Computing 讲师:Juergen Hoeller
总体感觉,这个老外讲的都是些名词。。。其实没讲啥,可能在他下午的一场演讲:基于Spring3.1的现代组件设计中讲了很多实质性的东西,不过我没去听。
主要就是在给Spring打广告,实质性的东西没讲,没啥好多讲的。。。进入下一个
2. 百度离线集群整合之道 讲师:吴波
看现场反应来看,貌似讲的不错,问问题的人也很多,不愧是咱baidu的高工啊。。。可惜刚听了几分钟,RD、FE、项目负责人纷纷打来电话说线上紧急问题,咋回事。。。然后就悲剧的解决问题去了,也只能电话里解决了,没电脑带在身上,还好还有同事帮忙解决了,否则,怕是整个上午就听不了了,可能连免费的午餐都没了,这个讲座就这样过去了。。。
3. 基于云计算架构构建Netflix 讲师:Adrian Cockcroft
这个老外啊。。。真是的,上来讲了将近一小时,基本上在给Netflix和Amazon做广告,其中尤其是Amazon,唉。。。贴上一段经过我翻译的原话:我们去用Cloud,因为我们没有时间去构建Cloud,Amazon的Cloud是最大的。。。貌似是这个,唉,估计他所要讲的精华也在下午的一场讲座吧,下午散会了去了他的会场一下,感觉反响还行嘛,很多人围着他不知道是看热闹和还是问问题
二、下午
下午听的四场讲座,共跨越3个主题,唯一一个啥都没去的就是那个移动开发。。。分别来讲一讲吧
1. 面向开发的MySQL性能优化 讲师:杨海潮 @jackbillow
感觉讲的东西挺细的,很多关于优化MySQL的细节,下面听我娓娓重复来
a. schema的设计
schema是项目设计阶段最早的一步,也是对DB的性能优化最优的阶段
b. 数据库字段类型的选择
有很多人在设计的时候忽视了这个,举个例子就是Datestamp和Timestamp字段类型,Datestamp字段8个字节,能表示很多种时间类型,Timestamp只有4个字节,虽然没有Datestamp那样的全面,但是对于我们的项目来说足够了,这是一个原则问题:以最小的代价,来实现尽量多的功能
c. 拆分小数据段和大数据段到不同的table中
在响应了小数据段的数据后,再相应大数据段的请求,相应的会提升“性能”
d. 索引的设计
索引并不是设计的越多越好,要适度,索引在提升读操作的性能的时候,会相应的降低写操作的性能
e. 存储引擎的选择
InnoDB => 锁的粒度较小,行锁,加锁性能损耗较大,但不会像表锁那样阻塞很多的数据库操作的请求
f. 降低对数据库的访问次数
数据库的任何操作的消耗都是很大的,能减少访问次数就减少访问次数,可以在SQL语句中做到这些,也可以在程序中
g. 减少CPU的计算量
h. 并行
2. 淘宝前台优化实践 讲师:蒋江伟
整个演讲都是围绕着如何提高QPS而进行的,这就是这个的这次演讲的重点内容吧。
QPS主要由三个因素影响,分别是
a. Thread
b. React time
c. Bottleneck resource
其中关于线程数量的内容,他讲的比较多,也对线程数量的选择做了一些分析,并列出了一些公式(公式不记得了),计算计算机核心数量和线程数的关系,怎么能达到最优化。像淘宝那样高并发的网络环境中,线程数量为多少能达到最优就显得很重要了。
他主要从三个方面讲了如何提升QPS,分别是
a. 优化模板
b. 优化大数据的处理
c. 优化JVM的参数
那我们一个一个来讲吧。
a. 优化模板
1) char to byte
他举了个例子,在servlet中,字节用"response.getWriter.print("chars");"比先把字符串转换成字节数字,然后再输出,QPS能提升很多,即所谓的char2byte
2) 解释执行编程编译执行
解释执行是解释器直接解释源代码然后执行,而编译执行是像Java那样把源代码编译为中间代码,然后再经过一边解释执行,但速度会比直接将源代码解释执行来的快,以此来提升QPS,所以还是JSP性能要比velocity好
3) 减小模板的大小
巴拉巴拉巴拉巴拉巴拉巴拉。。。
b. 优化大数据的处理
1) byte to char
2) 序列化方式的选择
使用Java的serialization还是别的,对性能会有一定的影响
c) 优化JVM参数
在讲这个的时候,他举了很多例子,主要是通过调整JVM的Young区的大小,但是并不是所有的场景下调整Young区得大小都能达到提升QPS的效果。。。
而且他还特别强调了,要编写对Gabage Collector友好的代码,手动将一个变量的引用设为null,在一定程度上会加速GC的速率
注:其实不是那么懂。。。虽然懂一些,关于为什么要byte to char和char to byte有点点不是那么明白
3. 艺龙旅行网架构案例分享 讲师:贾志峰
主要分享了一下艺龙旅行网的架构和设计,讲了一下这种电子商务类型的网站架构时该注意的很多问题,还讲了一些架构师在做设计的时候应该重视的问题,既要很好的实现功能性需求,还要考虑到很多非功能性需求,如:可扩展性等等。。。后面还讲了一下艺龙旅行网架构上的解耦的方案,主要由两个:配置解耦,流程解耦
4. 探索式测试体验之旅 讲师:Erik Petersen
试探性的去听了一下,还行吧,在开始的时候主要和我们强调了一下做测试要用脑,use your eye with your brain,bug往往存在于细节里面,不过他好像比其他人会调动会场气氛一些,听了一半,发现已经到6点了,抓起书包,去楼下吃饭去了,去晚了还得等很久。。。
今天主要就听了这些,这些专题,除了移动开发,都比较偏向于设计和架构,收获还是有一些的吧,不是那么大而已。。。听到的并且记得的东西都已经写在上面了,欢迎大家拍砖,毕竟不是自己的方向,不是那么的了解。
期待10号的~