人人网移动开发架构统一问题服务器架构设计(4)

http://www.itjxue.com  2015-08-07 20:58  来源:未知  点击次数: 

可扩展的高性能业务服务系统

人人网的业务层是支持分布式、可横向扩展的。

人人网主要使用JavaEE架构进行业务开发,其中Spring提供的IoC和AOP功能分别起到了业务对象装配和横向关注点分离的良好抽象。XOA框架基于Spring和netty,使用google的spdy协议作为网络传输协议,除享受到Spring红利之外,也提供了基于Java NIO的网络高性能服务器环境。单个XOA服务是无状态的,具有幂等性,XOA客户端使用Java NIO、通过Keep alive保持对各个后台服务器的TCP长连接,可实时监测后台服务器的健康状况,并把用户请求负载分散到各个后台服务器上,在单个节点失效的情况下不影响服务,如图5所示:

图5 XOA负载均衡

很多关键性的业务对性能要求特别高,也需要借助很多Linux操作系统的特性,这时Java的优化已经不能满足需求,需要使用 C++语言进行开发。人人网采用ICE框架,进行这部分业务的开发,它解决了Java、C++等多种语言开发的框架和通讯问题。人人网目前使用ICE进行开发的业务层称之为中间层,主要解决类似搜索、用户好友关系计算等性能要求苛刻的底层关键性业务问题。其运维模式和XOA类似。

和其它大型网站一样,业务层使用Memcached作为业务层的分布式数据缓存,且根据业务将缓存集群划分为多个池,集中进行管理,如图6所示:

图6 Memcached Pool

在WEB层,使用目前性能最高的Servlet容器产品Resin作为HTTP Server,使用自行开发的Java WEB MVC框架Rose对用户请求请求分发。负载均衡方面使用了F5或者nginx。为了减少Session复制同步的开销,每台WEB Server都禁用Servlet Session, 即每台服务器都是无状态的,单个Web Server失效后,不会发生用户状态丢失的问题。用户状态的跟踪由中间层统一处理。

对移动终端的支持

服务器对移动终端的支持主要是通过HTTP协议提供json数据接口实现的,服务器基本采用了人人网共同的架构:

HTTP WEB层做了更多的MVC抽象,除了提供基于html的Page View之外,还生成只提供json或者其他数据格式的Feed View。

服务器通过gzip压缩减少流量,节省用户资费。

客户端构建REST风格的HTTP请求,WEB服务器下发数据完成远程调用。

3G的API层直接面向移动终端,提供基于HTTP和其他Socket协议的服务器访问接口,并在业务层抽象出3G部门自己的公共平台,如图4所示:

图7 3G API架构

除此之外,针对移动终端的特点和中国特色的移动互联网环境,做了一些特殊的工作:

低端机型运算能力和内存资源都有限,API平台做了相应优化

复杂的运算服务器完成,减少移动终端负载。如图片的缩放、裁剪运算、图片质量就是服务器进行的。

客户端和服务器进行的数据输入输出尽量减小,这样可以节省内存存储。在表示相同数据的情况下,尽量采用数据量小且易于解析的格式。API平台使用了JSON,没有使用XML

为了减少用户资费,传输流量进行了控制

nginx开启gzip压缩,减少网络传输流量。

中国移动的cmwap网关会自动对服务器输出的gzip流进行解压缩,从而使nginx的zip压缩失去了意义。这种情况下,api服务器对输出进行gzip压缩后,作为普通二进制流进行响应输出。

除了纯文本的json之外,api服务器也支持基于google protocol buffers格式的输出,从而提供更紧凑的格式输出。

提高客户端访问速度

Api平台支持基于逻辑时序的批处理操作,将多个api的网络接口调用合并为一个,减少多次tcp握手造成的巨大时间损耗,提高客户端每个UI界面的响应和显示速度。

作者简介

闫志东,人人网3G事业部高级技术经理,资深工程师,人人网技术委员会委员,目前负责人人网3G部门服务器架构方面的工作,他在基于C++、Java的服务器技术和架构方面拥有多年经验。个人非常喜欢阅读计算机技术、科幻、历史类书籍。

闻华强,人人网3G事业部高级技术经理,资深工程师,是人人网3G部门客户端技术负责人,他有长达七年的移动终端开发和管理经验。阳光男孩,热爱体育运动,对《明朝那些事儿》爱不释手,是忠实的明矾。

马小东,人人网3G事业部产品经理,在移动互联网业界浸淫七年,对很多产品大趋势的把握和细节设计有非常独到的看法。爱手机、爱生活、爱人人。

感谢侯伯薇对本文的审校。

(责任编辑:IT教学网)

更多