人人网移动开发架构统一问题服务器架构设计(3)
高可靠性和可扩展的服务
现在移动互联网拼的都是服务,客户端良好的用户体验背后,都有强大的服务器技术支撑,人人网也不外如是。
业务层次模型
人人网采用JavaEE技术作为主要的业务解决方案,基本按照通用的JavaEE模型进行架构设计,如下图:

图4 人人网业务层次模型
WEB层基于REST风格和MVC设计模式,为用户提供基于WEB的访问接口
人人网采用的是自己开发的WEB框架 Rose,该框架基于Spring Framework,类似RoR框架,增强了对Controller编码部分的默认约定和REST风格URL的支持,该项目前已开源,下载地址为http://code.google.com/p/paoding-rose/
业务层封装业务逻辑,为WEB层提供业务接口,操作数据访问层提供的数据。
人人网开发了自己的SOA框架XOA以支持业务层抽象,该框架结合Rose框架,以REST风格对业务进行分类、消息格式封装和路由,如以下URL:
xoa://blog.xoa.renren.com/photo/{user-id}/{photo-id}
该URL代表某用户的某个照片,操作 GET/PUT/POST/DELETE分别对应对应照片资源的读、修改、新增、删除。即通过资源+操作的方式对外提供Service。
XOA支持远程调用,并可以通过简单添加服务器的方式进行横向扩展。该框架目前准备开源,敬请关注。
数据访问层提供对数据库访问的封装
人人网使用Java语言开发了自己的Object-Relation Mapping框架JADE(Java Database Engine),并支持数据库的水平横向切分。该框架和Rose框架一体开源,下载地址相同。
数据持久层数据的持久存储,主要采用MySQL数据库,并且开发了自己的海量存储系统Nuclear。
Rose、Jade、XOA作为集成度很高的一整套解决方案,在人人网大量采用,大大降低了开发成本,并在框架级解决了服务于企业解决方案的JavaEE技术在互联网领域的适用性。
可扩展的高性能系统
人人网每天都要承受亿级PV海量用户的并发压力,和其它大型互联网站点类似,服务器架构方面做了很多工作。
高性能数据存储系统
在数据存储方面,人人网做了以下工作:
和其它互联网大型站点相同,MySQL数据库做水平拆分以支持横向扩展
人人网作为国内第一大SNS网站,欲存海量UGC数据,必有海量存储系统。Nuclear存储系统在高性能、高可靠、可扩展的海量数据存储需求下横空出世。
Nuclear本身的数据存储基于Key-Value形式,底层可以使用MySQL/Memory, Cassandra, TC, Redis等存储引擎,提供弱结构化的查询功能。
高扩展性
一个Nuclear集群支持1到n(n<264)个节点(Node)的规模
高可靠性
单个节点的crash永远对系统的运行造成影响,不存在单点风险。系统永远可写入。
高性能
在4个节点、一般服务器配置情况下有测试数据表明单节点访问可达15862 req/s, 平均单次请求耗时仅5ms。
本文不欲详细介绍Nuclear, 有兴趣的读者请参考我们的技术站点。