下班了

先汇报一下时间,我这个WP主题默认不显示具体时间,现在是2010年6月22日凌晨4点整,西班牙2:0领先洪都拉斯,比赛进行到75分钟。

我刚刚下班,晚上我们部署了t.sdo.com的新版本,性能有了一定的改善。后半夜发现一台memcached行为诡异,暂且先禁用了那台,踉踉跄跄回家准备睡觉。

今天t.sdo.com正式发布了,现在不需要鸡和马就可以注册登录。产品本身不谈了,如果你不感兴趣说明你不是目标人群,缺乏90后的气质。前两天twitter上有一篇新浪工程师的离职感言,里面透露新浪要做的“游戏平台”,t.sdo.com就是典型的这种东西。至于里面说的新浪那种气氛,,恐怕在国内的互联网公司里,这种现象都比较普遍吧。

邀请链接,大家点这个就可以了
http://isdo.cn/10CM

这就睡觉去,今天不用上班了。

The post is brought to you by lekhonee v0.7

RPC, Serialization and Schema

The post is brought to you by lekhonee v0.7

糖果项目的后端用Java编写,我负责service gateway的开发(暂且叫sergent),服务以Java接口+Annotation的形式声明,与Spring集成使用,Java对象被序列化为JSON和XML(通过jackson和castor)与外部系统交互。专门的JSON Schema和XML Schema是可选的,系统交互通过简明的文档和人工确认。

RPC框架是跨进程、跨系统交互的重要工具,RPC框架中又包括远程调用、网络传输和序列化反序列化等等部分。流行的工具包括Facebook的thrift,Google的Protobuf和原先Hadoop项目下的avro。其中thrift包含远程调用、反序列化、网络等等全部的功能。Protobuf本身是一个序列化反序列化库,另有很多第三方RPC实现,avro目前除了序列化和反序列化的功能,也包含了ipc的HTTP Server和SocketServer等实现。在序列化的格式方面,Thrift支持JSON和二进制协议,Protobuf本身仅有二进制支持,但已经存在第三方的其他格式实现。 avro原生支持二进制和JSON格式。

从效率上来说,二进制方式的序列化要比文本方式的快。Google Code上(最近迁往了github)有一个tpc项目(thrift-protobuf-compare),根据这个项目的最新的比较结果(与原先不同):

protobuf成为了三者中耗时最少的框架,之后是thrift和avro,这次avro的耗时甚至超过了文本方式的jackson(主要在反序列化上)。

但是二进制协议通常都需要定义Schema,thrift / protobuf / avro三者各自定义了Schema的格式,没有类似XSD和Json Schema的统一标准,也就是说,当你需要传输一个对象,就要为它编写一个Schema文件。按照通常的习惯,都是先编写Schema,然后通过命令行工具或者自动构建工具来生成Java source。对于新系统还好说,对旧系统这个改造就比较麻烦了。另外,二进制协议不便于调试,所以各个thrift/protobuf/avro先后也都有JSON的实现,在文本的序列化格式上,JSON对XML的优势是全方位的。

所以综合起来,很难说有一种完美的解决方案。二进制协议的效率高,但是改造、编写Schema的代价并不小,还要面对核心Model被绑架到具体框架的风险。文本协议开发简便,不需要Schema,直接POJO就可以序列化和反序列化,但是在时间和空间上都不如二进制的方式。

补充
从tpc项目的结果上看,kryo在时间、空间上都击败了所有对手,而且,kryo的API非常简洁,不需要Schema文件就可以序列化POJO,听起来太完美了,看来以后sergent要借鉴一下的。

补充 2010-06-14
发现avro现在也有ReflectDatumReader和ReflectDatumWriter,可以通过反射内部自动映射生成Schema,可以尝试一下。

t.sdo.com上线

昨天搞到3点多,盛大糖果http://t.sdo.com/,昨天晚上终于开放IP给大家访问了。

留一些邀请码给大家

  • 2HlXyYKYz2
  • 2dKoCcQZYV
  • oHBYhO1JPw
  • -~YTMDYmN+
  • IXKYMq0kE@
  • Ub-C@xk8~r

我们后端服务从3月初开始正式开发,11个成员,加了三个多月的班。

开始实践Poromodo Technique

看了@juvenxv的博客介绍Poromodo Technique Illustrated一书,结合我现在低下的工作效率,我决定实践一下这个方法。

  • 一张TODO表记录今天的计划
  • 一张Activity Inventory表用于记录长期的任务,标记已完成的任务
  • 一张Record表统计每天完成的任务数量

一个Poromodo持续25分钟,在这25分钟内只专注当前任务。Poromodo间隙用来给大脑做缓冲,清空前一个任务的影响,以便下一个Poromodo开始时快速切换到相应任务。

应对Interruption,对internal的accept, record & continue,一个poromodo作为一个原子单元不可被打断,一旦被打断应该重新开始。
对external的,评估重要性,分别拒绝、延后、安排时间、安排回调。

封闭开发2

明天不用加班了,给大家汇报一下封闭开发的情况。这周最大的变化在于我们搬上了二楼专门又会议室改装的封闭开发室,终于可以在安静、宽敞的环境里做事了。以前巨大的办公室放眼望去他娘的全是人,现在在楼上平均一个人可以用两个桌子,台式机笔记本一边一个舒舒服服,实在是享受啊。而且这两天公司又批钱让我们买了很多零食(两大箱),不夸张地说我今天活活吃了一整天。

项目进度还算可以,最近产品策划比较忙,大家可以趁着这间隙写实现。我主要负责为实现业务的童鞋们写一些节约时间的框架,所以和业务本身关联不大,这也是最值得庆幸的事情。

我们组11个人,很有意思。我开玩笑说我们是433阵型,四个正式,3个外包,3个实习,剩下一个老大守门。虽说是工作了,可是这种感觉时长让我想起在工作室的时候,大家的关系和在学校里没什么两样。每天上班虽然很幸苦(这周一天都是14个小时),挣得也不多,不过倒是开心得很。

我们组的项目4月9号要内部上线,真正的产品内测是5月18号,大家请期待。

4月23号的北京QCon,今天看到Goodtiger说他要去了,我在这里严重嫉妒一下。哎,我一月份的时候就跟老大说了今年QCon牛人很多,上次老大还说公司在准备订,结果最近忙成这个样子,估计是泡汤了。去也轮不到咱,悲凉啊。