原文http://blog.csdn.net/lvjin110/article/details/12958463
TA是一款是基于地理位置的社交应用,帮助你与你不认识的、但就在附近的人进行即时沟通。TA是一款陌生人约会交友应用,无论你在银行排队、乘坐公交、咖啡厅或公园散步等任何地方,随时随地就能与附近有趣的陌生人进行即时沟通、分享照片、约会和交友……
转眼间,离开该研发团队快半年了,在此期间不少网友问到后端架构,及技术细节。出于技术分享为目的,现将服务端架构及设计思路分享给大家。
如下图:
上图为服务端总现结构图,下面介绍下各部分的作用。
服务端主要分为3层:
持久层:主要做为数据的持久存储,包扩数据库和文件形式(图片,音视频等)的数据。
缓存层:为应用层提供数据缓存服务,数据路由中转。
应用层:该层为客户端提供直接应用服务及接口访问。
具体作用:
身份认证网关:作为客户端应用访问的入口,提供用户注册,身份验证等服务。当用户打开应用时,输入帐号密码并提交给认证服务器,当通过认证后,再为客户端分配会话服务器,并将登录认证信息写入到Redis中,再访问需要身份验证的接口时,其它服务则从REDIS中获取认证信息。
会话保活服务:该服务采用TCP/IP协议,主要用于客户端保持长连接,负责即时消息的发送与获取。
群组/房间服务:该服务主要用于“群组”功能,同一群组内的用户连接到相同的服务器。
功能业务服务:主要提供非即时服务的访问,比如分享照片,查看他人资料等。
多媒体文件服务:为客户端提供文件读写服务。如上传相片,分享音视频等。
消息路由:主要用于跨会话服的即时消息路由中转,比如A用户在1号会话服,B用户在2号会话服,双方的即时通信将由“消息路由”进行中转。
缓存层:主要用于存放热数据,如用户SESSION,认证信息,各应用服务器资源等,降低对持久层的访问压力。
数据访问中间件集群:作为核心组件,所有对数据库的访问都由它来统一提供,由于数据库服务器由多台组成,每台又有读写分离多机,造成数据库服务相对庞大,是为了降低应用层使用复杂度而生。
持久层:主要是数据库和文件存储,就不做过多介绍了。
安全性保证:
- 通信数据安全,所有基于HTTP通信的数据请求,均采用数字签名,通信中的敏感数据采用“对称加密”算法进行加密。有网友问到具体实现细节,现将原理进行简要说明。
数字签名证书有两部分组成“身份指纹”+ “密钥”,客户端在发送数据时,使用该签名证书对发送的数据进行签名,再将签名和数据同时发送到服务器,服务器用相同的方法再对数据进行签名,然后比较签名是否一致。
- 服务端安全,基于TCP/IP协议的会话服和房间服,用户连接上服务器端口后,需要进行身份验证,2分钟内没有过能验证的连接将会被主动断开。
在整个系统中大部份服务是无状态,可通过增加服务器的方式进行水平扩展。
某移动社交应用服务端架构浅析