Android和iPhone平台的一种集群推送服务架构

4 篇文章 0 订阅


最近跟朋友探讨一种支持大量在线用户的推送服务架构,有点心得。
涉及到的Actor包含:
User A,UserB
Conn Server
Real Server 1,Real Server 2,Real Server 3(可以是mosquitto)
Memcached(MongoDB,这里是指Key-Value DB)
Logic Server 1,Logic Server 2.

通过以上的Actor架构可以实现一套动态集群系统,当系统需要扩容的时候,简单的增加某组Actor服务器即可(点击看大图)。

上图中几个重要细节:

1 User A同Conn Server之间是短连接,只获取最小负载的MosQuitto Server的地址及端口,返回给User A或者User B,然后User A或者User B开始同所得到的MosQuitto Server i开始长连接。
2 Conn Server和 MosQuitto Server保持着长连接,这样可以实时得到任意一台MosQuitto Server的当前连接用户,也就可以将最小压力的MosQuitto Server服务器给当前请求用户。
3 假设情形User A连接了MosQuitto Server 1,User B连接了MosQuitto Server 2,这时候,User A要发送消息给User B,系统的工作流程如下图:

点击看大图

4 当发现连接的移动终端数量大的时候,增加一台或者多台Misquitto Server。
5 当发现数据操作压力增大,扩展Memcached或者MongoDB类的Key-Value DB。

6 当发现系统吞吐量处理不过来的时候,可以增加Logic Server。

补充说明:

1 Misquitto的主Socket线程采用的是select模型,该模型未能发挥出来网络IO的性能,如果重构,可以考虑使用IOCP或者epoll进行修正。提高单台服务器的实时连接数,当用户量多的时候,可以减少一半的Misquitto服务器数量。

2 当需要对未在线用户进行数据转发的时候,需要考虑将数据进行半存储半内存化,具体的逻辑还需要按照需求来设计定义。可以考虑Redis进行部署。

3 如果要考虑给第三方提供接口的时候,需要设计鉴权系统,可以通过OAuth 2.0进行鉴权处理。

参考文章:
1 http://blog.nosqlfan.com/html/1329.html
2 http://blog.nosqlfan.com/html/3086.html
3 http://www.mysqlab.net/blog/tag/nosql-2/
4 http://code.google.com/p/spcached/wiki/benchmarktool
5 http://www.cnblogs.com/chinacloud/archive/2010/11/08/1871592.html
6 http://blog.nosqlfan.com/html/3729.html
7 http://blog.nosqlfan.com/html/3346.html
8 http://blog.hesey.net/2011/04/introduction-to-nosql.html
9 http://blog.csdn.net/captain_gbt/article/details/6936590
10 http://www.iteye.com/topic/77560
11 http://database.51cto.com/art/201010/231410.htm

-END-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值