msgServer集群(ms)
设计作用:该服务主要提供客户端的接入服务。每个ms维护当前接入用户的用户状态和心跳,每个ms地位是对等的。
设计考虑:
ms之间不会直接交互,减少交互的复杂度。在用户数量增大的情况,只需要简单增加ms节点就可以解决。
routeServer集群(rs)
设计作用:该服务主要保存了为ms之间的信令传递(实际也就是用户之间)提供中转服务。可以配置共用n个rs主节点,每一个rs节点负责一部分用户与ms之间的映射关系,组成一个rs集群。
例如配置有4个rs节点分别为rs0,rs1,rs2,rs3,用户A登录成功后,通过 <用户Aid mod n>的方式计算出负责管理该用户位置的rs节点编号,向该rs节点发起注册路由信息,该rs节点维护 用户id与用户id登录的ms位置 之间的对应关系。
当需要向用户A发送消息时候,只需要通过<用户Aid mod n>算出rs节点的编号并向该rs节点投递消息,rs节点就会通过对应关系转发到用户a对应的ms节点,ms最终发送给用户A,完成消息的传递。
另外,可以配置编号为<(用户Aid mod n) + n> 的rs节点为从节点。如主节点rs1发生了故障,由从节点rs4提供服务。
设计考虑:
像termTalk项目中设计的routeServer就是单点单服务的,当用户数量增大时,肯定会出现转发性能瓶颈。所以本系统必须解决这一个问题。
设计routeServer集群,增加了系统的复杂度,但是数据分由不同的rs节点进行转发,转发性能可以得到保障。
MsgServer与MsgServer之间不会直接交互,通过routeServer完成MsgServer之间的交互。
交互流程:
例如:用户AU给用户BU发送一个“文字正在输入的信息”。用户A连接了MsgServer,用户B连接了MsgServer BS。