宏观上来看, IM系统架构分为
- 接入层
- 路由层
- 逻辑层
- 存储层
1. 接入层
接入层最基础最重要的任务就是: 与客户端保持连接
通过少量的服务器, 就可以提供高质量高并发的TCP长连接能力
主要功能:
- 连接整流
- 将大量的TCP长连接, 转换成少量的服务端TCP连接
- 保护其他模块不被大量连接冲击
- 安全信道
- 协商秘钥, 建立安全信道
- 加解密
- 压缩解压缩
- 初步攻防
- 与业务无关的一些攻防策略
- 连接频率控制
- 发包速率控制(发得流量很大)
- 发包频率控制(发得很快)
- IP黑白名单
- 等等其他功能
2. 路由层
接入层 与 路由层之间只需要少量的TCP连接, 就可以由很高的通信效率
路由分两种:
- 客户端发送消息
路由层负责找到逻辑层哪个服务处理客户端的消息
- 服务端发送消息
路由层负责找到客户端的TCP连接在哪个接入层服务器上
路由层有点像HTTP服务的网关层
路由层的主要职责功能
- 解析协议
- 记录用户在接入层的哪个节点上, 建立接入层服务器与客户端之间的一对一关系
- 保存用户状态
- 根据客户端发送的请求, 转发消息到对应的逻辑接口进行处理
- 服务端主动推送给客户端的时候, 找到接入层的哪一个节点与客户端建立的TCP连接
3. 逻辑层
逻辑层的主要
- 处理核心业务
- 对上层提供原子性逻辑接口
我们可以大致可以把 路由层转发过来的请求, 分为5类, 分别由对应的逻辑服务进行处理
- 登录业务接口
- 用户业务接口
- 好友业务接口
- 消息业务接口
- 群业务接口
4. 存储层
提供给路由层与逻辑层使用
有些信息必须要保证数据的一致性, 那么就需要存储在持久化存储介质上
例如MySQL, MongoDB, Cassandra …..
存储层如果可以的话, 应该屏蔽掉数据库的差别, 给逻辑层提供友好的数据访问接口,
并提供一些原子性的操作