2013华东scala爱好者聚会(杭州)

上周六下午在西溪园区组织了一次华东地区scala爱好者交流,上海也来了6,7个人,总共有6个分享,议题如下。

《scala类型系统》
《类型驱动的函数式编程》
《actor与akka》
《spray初探》
《spark:基于Scala的大数据处理》
《sbt made simple》

这次参与的大约30人,杭州几家使用scala开发的都来了,就是时间上有点挤,没留足交流的时间。
所有PPT都已上传到:https://github.com/CSUG/csug/tree/master/slide/2013_10_19_scala_meetup

阿里技术嘉年华2013

这次阿里技术嘉年华上分享了《Scala中的函数式特征》与之前分享过的一篇ppt部分内容重合,不过也介绍了一下scala类型系统中的函数式特征。正是因为scala的类型系统支持高阶的概念,使得它也具备了部分解决问题的能力。type lambda 这个概念是从《Scala in depth》这本书里看到的。ppt可以从这里下载。

再说说这次嘉年华上的一些体会和收获。我是在周六上午10点的后端技术-编程语言专场的一个workshop上做的分享。开始担心关注scala的人很小众,并且又是上午最开始,来的人会很少,不过情况还好。CrazyJVM等scala粉丝都过来了,结束之后有两个从西安thoughtworks来的哥们儿跟我了解了一下阿里目前对scala使用的情况,以及不够普及的原因。

周六一天逛了几个主会场以及workshop,完整听了的有2个,一个是云OS的一个分享jvm指令及优化的,还有tinyfool讲述他创业经历的。有部分感受很认同,就是有时候你费劲力气做某事却总也无法做的很顺心,或达到预期的满意度;这可能就是天性,每个人都有自己擅长的领域也有不擅长的领域,尽可能符合自己的本性,会容易快乐一点。

还略微听了会儿一些开源项目的分享,tsar与nginx的配合,或许值得容器这边借鉴。还有天猫的一个对协程使用的分享,可惜没听到正题,有事先回家了。周日也有几场是我想听的,不过也有事没能去听。

二月份杭州GreenTea JUG的收获

5.25号的greentea活动有事没去参加,这是2月份那次greentea杭州的活动记录,当时有两个会场,只听了一个会场的。

昨天下午去华星时代广场参加了greentea java用户组,听了周忱的《java程序员也要懂cpu》
莫枢的《Intrinsic Methods in Hotspot VM》,以及王铮的《有关jvm profile的工作》还是很有收获的。
因为相对偏底层,平时不太涉及,尤其王铮的分享,传递了一个观念,硬件的设计与软件是很有差异的;在软件中的性能问题在硬件中或许根本不存在,硬件天生是并行的,软件则是串行的。

Intrinsic方法简单的说就是jvm对某些声明为了intrinsic的方法进行特殊的处理,不按照java里提供的代码逻辑或者jni里的实现,而是按照特定平台优化后的指令来处理,比如System.arraycopy 虽然声明为native(让人误以为可能比java实现更慢),但实际它是一个intrinsic的方法,它实际比你自己在java中来实现数组拷贝要更高效的。甚至在vm里用同样的实现逻辑,被标记为intrinsic的也依然可能比未标记intrinsic的要高效。

jdk中有哪些Intrinsic方法,可以在vmSymbols文件里找到,但温绍说他测试某些intrinsic的方法反而慢了
这个需要在特定的平台,特定的cpu,需要几个条件都符合,而目前并没有每个版本的jdk中哪些intrinsic的详尽描述的文档。

莫枢除了对Intrinsic方法的介绍,还回答了一下避免让两个数据在同一个cache line在java8里的实现:采用
@Contented 注释来避免false sharing的问题,不必在程序中写丑陋的padding 变量来实现了。

另外对Hotspot去除permgen的进度,需要到java8才会去除了。还纠正了我对hotspot jdk7中String.intern一个误区;String.intern 并不是直接存放在老生代,是在heap中,依然会经过新生代到老生代的过程,在young gc后才移到老生代。这也是对permgen移除的一部分工作,在jdk7里先release了这部分。

莫枢还演示了一个工具CLHSDB,除了普通的定位内存地址,还可以采用js来实现扩展它的命令。

与19楼的交流

起因是微博上福强转了csdn的总编刘江发的一条信息说19楼已经全面采用scala了,因为就在杭州,大家很有兴趣去了解一下他们用的怎么样,于是阿干联系到了之前在阿里巴巴中文站现在19楼的汤汤,在汤汤的安排下,有了今天的这次交流。

感谢汤汤和19楼的热情接待,技术总监王治和另外几位开发负责人,跟我们分享了一下他们对scala的使用情况。先是分享了一个ppt介绍了一些scala的特点,他们碰到的一些问题等。然后大家交流了一下具体的东西,大致了解了一下19楼的网站技术架构:

前端的负载均衡是F5,静态服务器使用 Nginx,后边 Tomcat,虽然使用scala,但并未选用lift或play框架(只有个别项目尝试过lift,风格差异太大没有在全站采用),仍使用的springMVC,数据库使用mysql,sharding的方式是每次做运算来确定的,持久层框架采用的ibatis,缓存使用的memcached,目前的整个集群大约二三十台。

构建工具仍采用maven没有使用sbt,单元测试用的scala-test框架。最早期19楼是是php,后迁移到java,在09年时就开始尝试scala,他们算是在技术上很敢于尝鲜的,那时scala的版本还是2.7,后来升级到2.8因为不兼容,折腾了一番,当前使用的scala2.9.3,jvm版本是1.6

在soa方面,19楼也对部分业务做了切分,比如user模块,但在调用上,大多在前端js就调用了不同的服务,后端服务之间的相互调用不是很多,rpc基于http/json,我们还问了一些其它关注的问题,重要的一个问题是当初怎么决定采用scala的,这是由他们的技术总监决策的。在人才招聘和培养方面,招进来的时候只要求懂java就可以,后续个学习和培养的过程,这中间也有一些程序员不习惯scala而走掉的,但是留下的都是对新技术有学习热情的;并且他们目前的开发团队规模和流动情况都比较小,能够保持一个比较稳定且好学的团队,这也是他们可以选择新技术的一个优势。

后续,文波 介绍了一下阿里巴巴的一个sns产品来往使用scala的情况。与19楼相似的一点是,也是用scala实现业务层(service)逻辑的,框架上也没有改动现已稳定成熟的 webx3+spring+ibatis,只是把service和dao的实现用scala来做,然后通过spring与现有框架无缝集成。构建工具也使用maven,单元测试有junit和scala-test。

最后聚石 分享了一下HouseMD这个诊断工具的使用和开发。这个工具是他用scala实现的,类似btrace的功能,但在交互上只需要attach一次,然后在prompt下用一些命令来操作。推荐大家在诊断问题时使用这个工具,有问题在github上反馈他会比较及时。

以后的活动和交流,仍会先在CSUG上通过发起issue来确定,CSUG并不只是阿里内部的一个组织,也不局限在杭州,欢迎更多scala爱好者们加入。