本期beta技术沙龙的主题是“手机之家新系统介绍及架构分享 ”。手机之家是老高(高春辉)一手创办的网站,在我的印象里,上一次记得高春晖还是他的“高春辉的个人主页”,之后,好像就一直在折腾手机之家。现在的手机之家,每天PV超过700万,作为一个手机专业网站,相当了得(从我看到的数据,远远超过友人网)。

因为堵车的缘故,我赶到活动现场,演讲已经过去了大半,只抓住个尾巴。不过,手机之家有7年的发展经验,浓缩到这小小的讲座,即便只窥到一鳞半爪,也是很有启发的。

印象比较深刻的一点是Cache的结构。通常,Cache都被“扁平化”为单层的key-value对,这样的好处是,Cache的用户都可以方便地使用,没有太多的限制;而坏处在于,数据的结构被完全拆散了,同一个对象可能会按照不同的key来存储,而且各个对象之间的关联完全不存在了。
对这个问题,手机之家的解决办法是,在Cache和应用程序之间增加一个管理层,将程序员与Cache隔离开来,程序员可以不关心Cache的机制,只需要按照namespace(也就是划分层级的规范)来开发就可以。这个管理层,可以实现对Cache中对象的批量操作,也可以在某个对象发生变化之后,更新相关联的对象(直接更新父节点)。
这种办法的效果不错,而且演讲结束之后,还有朋友专门提出关于namespace的问题,看来,大家都觉得这思路很巧妙。

另一点印象就是老高他们重点介绍的DAL,也就是Data Access Layer,它把存储和缓存整个装到一起,与业务逻辑层完全隔离——业务逻辑单元完全只需要按照DAL设定的“增、删、改、查”四个接口操作数据就可以了。虽然普通的DBMS(譬如最常见的MySQL)也提供了这四种操作的接口,但相比DAL,一方面缺乏高效的缓存管理,另一方面,在大负载量、大容量下应用,还需要做许多工作;而有了DAL,前端程序不但不需要关心表的设计和结构,甚至连表的切分都不需要关心,相当省心。目前的DAL可以应付手机之家的现状,但PPT中也介绍了DAL 2.0的若干构想,包括提供类似Lucene(也就是全文检索)的查询功能,以及拆分核心功能、兼容插件的架构。
看得出来,DAL好像要从一个为手机之家打造的模块,变成“通吃(兼容)各家网站”的工具,在过去,有手机之家的经验做积累,对于未来的走向,也有明确的规划。我觉得,这是一条有风险、也有前途的路:一方面,对于通用组件的开发,我时常感到头痛,也许是经验不够的缘故,事先定义好的接口,往往(必然)被新冒出的需求所困扰,或者修改接口,或者眼睁睁把新需求踢出自己的“一亩三分地”,承认自己干不了;另一方面,之前固然有LiveJournal造出memcached的例子,但这样的几率实在是不高,况且,国内开源软件的氛围也与国外大不相同。
不过,无论如何,我都很佩服老高的这种“野心”:敢想才能敢干,而且,如果DAL真的能成功,成为“现成”的解决方案,就能省下大量的资源,投入到更有意义更有价值的地方,这绝对是一件功德无量的事情。

有兴趣的朋友,可以参考活动的PPT🙂

手机之家的架构分享
beta沙龙-手机之家架构的发展和变化
与”手机之家新系统介绍及架构分享”有关

P.S.手机之家还在招聘 PHP/Java 人手,有意者给老高发邮件: gaochunhui (AT) gmail.com