场景如下:
app web后台 推送服务器
业务处理在web后台,app启动后会与推送服务器建立tcp连接。
app请求后台,后台处理后(有必要推送),后台向推送服务器发送请求,然后推送服务器 将消息推到对应app(包括非请求 app)。
问题如下:
因为推送与核心业务息息相关,TCP连接数量等等问题,所以要建立多个推送服务器。
客户端怎么来确定连接哪个推送服务器?
多个推送服务器之间怎么通讯?(判断连接具体存在于哪个服务器,做相应处理)
公司之前用openfire做的推送,但是因为在线问题等原因。弃用了
现在的推送我用netty4做的。各部分功能都已基本满足需求。但是做集群真不知道该如何下手。
请教各路好汉,跪求帮扶!
------解决思路----------------------
客户端怎么来确定连接哪个推送服务器?
这个可以有多种策略,核心问题是客户端如何获取到服务器的ip列表和ip连接的选择策略,简单的说两个:
1. 域名解析,直接搞个域名连到负载均衡服务器,将后面的推送服务器直接隐藏,这个策略是很简单的,但是在负载大和冷热不均的时候会有问题,不细说
2. 自己做个管理中心,管理所有的推送服务器,客户端从管理中心获取该连接的ip,然后与推送服务器直连,管理中心相当于一个7层的负载均衡,可以有自定义的策略
其实还有很多处理方式,各有利弊。
多个推送服务器之间怎么通讯?(判断连接具体存在于哪个服务器,做相应处理)
一般集群之间的管理都会上zk,不过推送服务器其实彼此是无状态的,如果业务划分合理,推送服务器只做推送的话,判断连接可以用缓存来做,比如搞一个redis把在线用户的信息都存进去
------解决思路----------------------
用一台登录服务器做权限认证,认证成功后给客户端分配一个服务器,告诉客户端ip/port。客户端再与真正的推送服务器相连。断开连接时再与登录服务器通讯,注销权限。
这样登录服务器很清楚每台服务器有多少个连接。
登录服务器可以与其他服务器使用sockt/http等方式通讯。