订阅软件研发RSS CSDN首页> 软件研发

编程语言与工具专题论坛:各类编程语言使用体会分享

发表于2013-09-02 14:42| 次阅读| 来源CSDN| 0 条评论| 作者蒲婧

摘要:2013中国软件开发者大会编程语言与工具专题论坛中,简悦联合创始人云风、19楼技术总监王治、奇虎测腾科技有限公司测试主管童小刚、Avos资深工程师庄晓丹、新浪微博架构师宋琦分享了自己关于各类编程语言的使用体会。

【CSDN报道】 2013中国软件开发者大会(以下简称SDCC)于8月30-31日在北京新云南皇冠假日酒店举办。作为CSDN和《程序员》杂志倾力打造、千人规模以上的顶级技术盛会,今年SDCC 2013以“软件定义未来”为主题,来自于国内外一线的技术精英,就大数据分析与BI、架构实践、研发管理、IT基础设施与运维、产品与设计、开放平台等专题和参会者进行了深入的分享和探讨。此外,32小时编程马拉松、CTO论道论坛等量身定制的特色环节也受到了参会者的强烈关注。

31日下午的编程语言与工具专题论坛上,简悦联合创始人云风、19楼技术总监王治、北京奇虎测腾科技有限公司白盒测试主管童小刚、Avos资深工程师庄晓丹、新浪微博主站架构师宋琦与大家分享和探讨关于编程语言在实际中的应用。

云风:花费两年 Skynet终面世

简悦联合创始人 云风

简悦联合创始人云风带来题为《Skynet:一个基于Actor模式的开源并发框架》的主题演讲。云风认为,Actor方式就是你需要把在服务器并行处理的任务分成很多更细小的单元,每个单元有个程序来考察。这些Actor之间为了共同做一件事情,它并不是用传统的多线程方式来工作的,所有的Actor之间都是相互传递消息的方式,每个actor都可以看成是一个独立的进程去处理一个消息队列。

“现在CPU的核数越来越多,但CPU的主频却没有上升。在传统并行编程中,两核或者四核的时候,大家都做多线程的编程,在多线程的编程中用的最多的就是如果几个核心同时要改一个数据,我们会给这个数据上锁,然后处理完后再解锁。这种方式我觉得有一定麻烦。后来在做Skynet的时候我自己受Erlang影响较多,Erlang是一个比较高可用性的并且分布式的处理,可以把Erlang节点部署在很多机器上,所以Skynet最初在设计时我们是在Erlang的基础上来做一些开发,当然现在是完全用C语言编写的一个框架了。”云风介绍说。

分布式处理可能需要很多的数据,要处理很多东西,它们很大程度上可以分开来完成。但是并行处理则需要使同一台物理机器上有很多的核心,协作完成原来要完成的事情,且需要很快的完成。云风表示,Skynet发展到今天,是更想强调它的并行处理能力,可以更好的运行同一台机器上的更多的核心来更高效完成任务。在做网络游戏的时候,它处理的业务量没有搜索引擎或者其他处理的数据量那么大,但是它需要所有用户连到服务器上,需要有更快的响应速度。比如玩游戏的时候,打一个怪,在0.5秒钟之内都不知道打到这个怪没有,这个玩家体验就是非常差的,所以要使计算能力提高,满足所有的响应速度。“最开始我们只想做一个函数库,并不是做框架。我们后来发现,还是做一个框架更方便一点。”云风说。

据云风介绍,Skynet这个项目是开源的,也非常简单。它的核心代码只有2900多行,当然现在还有一些额外的库是必备的,全部加起来也不超过1万行。此外它的licence也是开放的。

回看Skynet的诞生史,云风表示最初是从2010年开始考虑做Skynet,到2011年实现基于Erlang的第一版,2012年又用C语言重写,同年8月1日开源发布。

王治:19楼网站架构以及Scala的应用


19楼技术总监 王治

关于19楼,主题演讲一开场,19楼技术总监王治就先介绍说:“我们最早是用Discuz!做的社区,非常草根的网站。最后发展到现在,用Scala写的这么一个网站,可能很多人会问我,你们怎么会选用Scala来写整个网站,听起来有点怪的选择。”

王治介绍说,最早19楼是用Discuz!做的网站。存在两大问题:

一、经常宕机;

二、难做改进。因为是Discuz!做的,要做改进非常困难,很多改造做不了,因为Discuz!本身是一个很完善的程序,当时19楼的发展需要做一些自己的功能,就会非常的困难。

“之后在08年下半年,19楼在Discuz!的基础上做了一次升级,算是较大的一次改动,最终一半是Discuz!,一半是我们自己的代码,很特别的架构。”王治介绍说。而这样“奇怪”的架构也让19楼面临着一些新的问题,首先,因为最早的一版数据是按板块拆分的单板数据,而那时候最热的板块一张表你再怎么拆也有一亿多的数据,是根本支撑不了的;其次,架构一半是Discuz!,一半是自己的代码,确实很乱。最终19楼选择重新做架构。

王治详细介绍了19楼在重新做架构升级过程中的选择思路,他说:“开始考虑过PHP、 Python、Java。后来有一次有人分享关于Scala的研究,觉得用它来做后台消息分发不错,但是大家做到后来,觉得Scala做整个网站也还可以,它和Java的兼容性很强,这个风险就很小了。另外相比Java,它有很强的表现力,会有很多动态语言,其实是一种混搭语言。最终选择用Scala重新做架构。”

王治认为Scala非常灵活,一样的事情会有好几种写法。此外Scala相对其他语言表现力非常强,可以把很复杂的逻辑较简单地表达出来。如果用得好,会显得非常自然,而且非常简洁。

童小刚:应重视源代码安全问题

北京奇虎测腾科技有限公司白盒测试主管 童小刚

北京奇虎测腾科技有限公司白盒测试主管童小刚在分论坛中做了题为《源代码安全编码实践》的主题演讲,关于安全问题,童小刚指出,应用软件的安全源代码,现在是主要的安全攻击来源,但75%的黑客攻击是发生在应用层。传统的防火墙、杀毒软件他们解决的是外围安全的问题。软件本身由于编码造成的安全问题,这块只有依赖于开发者得到解决。当系统出现问题的时候,往往采取补丁的形式来修复。

关于编码规范,童小刚认为,很多系统缺乏一些安全的风险需求控制以及安全的设计,一些公司或者企业缺乏安全编码规范。此外,代码库也存在一些安全隐患。

而目前,国外政府机构有很多都比较支持做代码安全检测,企业也有一些企业的规范。比如美国国土安全部就有很多相关项目,包括一些厂商来做代码安全的测试计划,对开源的软件安全测试,并且将测试的结果都向社会公布。

“该怎么应对源代码安全问题?我们应该在信息化建设中逐步重视这一部分。一些银行等金融领域也在推行控制和安全的机制,推广SDL,并制定代码安全编码规范,实施自动化的代码检查。”童小刚总结道。

庄晓丹:Clojure轻松实现编程

Avos资深工程师 庄晓丹

Avos资深工程师庄晓丹带来了题为《基于Clojure构建的移动云平台——我的Clojure实践思考》的演讲。

庄晓丹介绍说,最初公司的项目立项在年初,到出第一个版本基本只花费3个月时间,而为什么没有使用Java,主要是因为Java代码非常复杂、语法非常烦琐。他认为,Java的开源类非常多,有的设计不是非常好,并不是精心设计的,很多类使用起来非常不方便。而相比而言,Clojure则更为实用。“但不可否认Java平台本身还是比较优秀的,高度成熟优化的JVM和比较活跃的开源社区。”庄晓丹补充道。

关于Clojure,庄晓丹认为,首先Clojure构建在JVM之上。这是很好的一方面,不需要重复造很多的库。另外一点就是函数式编程,Clojure必然是一个函数式语言,它的表达能力带来很重要一点就是数据流的抽象,通过高级函数,可以把数据分流,然后一个一个过滤,最终得到一个结果。

庄晓丹还分享了一些在使用Clojure过程中的一些经验和体会,首先就是轻松编程。她认为整个社区的氛围就是让你轻松的编程,而不是很严肃地编程,可以快速实验代码,动态调式;另外,Clojure库非常短小精悍。总共才不到7000行的代码。

宋琦:PHP在新浪微博的应用


新浪微博主站架构师 宋琦

新浪微博主站架构师宋琦带来《PHP在新浪微博的应用》主题演讲,宋琦一开场就先介绍了现在微博数据量的增长非常迅猛,而在大的流量和数据量的环境下,微博对于性能要求非常高。“当用户访问一个网站,超过3秒钟打开,会有57%的用户就放弃了。如果超过5秒,有74%的用户不会再登陆。亚马逊它的页面如果每慢1秒,他们每年要损失16亿的销售额。谷歌如果每慢0.4秒,他们每年要损失800万的查询量。可以看出响应速度是保持流畅运行的重要基础。我们PHP就是用在提升运行速度方面。”宋琦补充说。

传统框架在微博上并不适用,宋琦介绍说,新浪微博性能主要从两个方面去入手改善:第一,提升响应速度,这是用户体验最关键的,无非就是充分的利用现有服务器的资源;第二,尽量节省服务器的资源,可以为公司带来成本的节约。

宋琦指出,这服务器执行、服务器输出和浏览器渲染这三步是串行执行的,也就是说在服务器端处理请求的时候,浏览器端是空闲的,而在浏览器端渲染页面的时候,服务器是空闲的。当页面非常大的时候,这个等待的时间会非常可观。那么有没有办法让浏览器可以提前开始工作呢?答案就是BigPipe,BigPipe最初是Facebook在2010年提出并实施的,微博在2011年引入了它。BigPipe是一个只需要PHP和前端js便可以实施的一种页面加载技术。

“我们将微博首页划分成两部分:页面整体框架、以及一个个Pagelet,所谓Pagelet,就是我们在页面上看到的一个个内容块。经过这样的划分之后,我们就可以对页面加载的过程做出一些调整,怎么调整呢? ”宋琦说,“首先,服务器端接收到请求后,先flush出这个页面的整体框架,整体框架包含了页面的整体HTML,全局的js和css脚本等,内容的部分则用空的div来占位。程序执行到此,所耗费的时间是很少的,因为目前为止还没有执行什么复杂的逻辑。页面框架输出完毕后,浏览器端因为已经拿到了页面框架,它便开始工作,首先加载全局的js、css,进行一些渲染,然后等待服务器端的进一步输出。与此同时,服务器端也在继续工作,它会根据这个页面的配置,依次创建Pagelet对象,执行他们的逻辑并渲染输出一段js代码,这段js代码的作用就是向页面框架中的占位div中填充Pagelet的内容。浏览器会执行这段代码,将内容渲染在它应该出现的位置。用户会看到页面上的内容一个一个的被呈现出来。”

经过这样的调整,首先页面响应时间大大降低,从5秒降低到2.5秒(facebook的数据);其次,将页面拆分成Pagelet后,相当于把页面划分成了不同的相对独立的逻辑单元,便于分工开发;最后,可以在某Pagelet出问题的时候,屏蔽其显示,减少了因某服务不可用而对整个页面造成影响。

此外,宋琦还就新浪微博的开发PHP扩展、数据加载的优化、缓存优化等性能提升方面技术做出分享。

更多精彩内容,请关注 @CSDN研发频道,“ 2013中国软件开发者大会图文直播”专题 。


0
0
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章