标签归档:架构

3.29号的技术沙龙

上周六在北京主持了一场阿里技术沙龙,主题是“中间件与后端技术”,邀请了Redhat的张建锋和搜狐的秦启东分别分享了《Wildfly的新特性以及规划》,《搜狐新闻客户端的push技术》以及中间件团队的封仲淹分享了《JStorm》

相对于Wildfly,我更关注它所用的Undertow的情况,从这里看到一些对比,在纯文本和JSON情况下undertow的性能在netty之上(三轮里有两轮),尽管对这个测试持有一些怀疑,但了解到undertow是jboss团队里核心程序员DavidStuart Douglas在主导的,也是XNIO框架的作者。分享结束后,跟jboss和weblogic的几个开发聊了聊,我们与他们关注的领域有一些差别,主要在解决自己的痛处,偏向运维层面。

搜狐客户端的后台长连接是基于Go语言实现的,最初他们基于MQTT协议实现的Java(Netty)版发现GC引起的抖动没能很好的解决,后来切换到了Go,改写了MQTT,基于goroutine机制实现单机百万的长连接。这与之前淘宝实现web旺旺时的经历有些类似,web旺旺的长连接也是经历了jetty,netty,erlang的过程,也是因为jvm full gc的抖动导致改用了erlang(基于erlang的长连接确实很稳定,但也带来了cpu利用率较高以及不好找人维护的问题)。对GC的调优是门艺术,设置的好的话,基于jvm实现的长连接也是可以达到百万级的。

封仲淹/纪君祥的JStorm分享也有很多干货,他们相当于用java重写了storm,增加了一些特性并做了优化。细节可以看他的ppt,当前内部很多日志处理都是用jstorm在做的。

之前也和邓草原沟通过,希望能交流一下他在豌豆荚怎么用scala构建后端服务的,不过时间上不凑巧,希望下次有机会再切磋。老邓是国内erlang/scala圈子里超级大牛,最早也是用他开发的netbeans插件写scala的。

这些资料可以在: http://club.alibabatech.org/resources.htm 获取,稍后组织方应该会把ppt放上去。也可以关注阿里技术嘉年华的微博

// 补充
建锋写了一些《Undertow服务器基础分析》的博客,很值得参考: 1.概述 2.XNIO 3.Undertow

与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爱好者们加入。