当前位置:
文档之家› 移动互联网实时消息推送系统的设计和实现
移动互联网实时消息推送系统的设计和实现
实时消息推送系统
无线网络速率对比
协议 2G GPRS(2.5G) EDGE Evolution (2.75G) CDMA2000 1XRTT(2.5G) 3G UMTS 3G EV-DO rev. A(3.5G) HSDPA/HSUPA(3. 5G) HSPA+(3.9G) 下行速率 57.6 kbit/s 1,184 kbit/s 153 kbit/s 384 kbit/s 3.1 Mbit/s 13.98 Mbit/s 21.6 Mbit/s 54Mbit/s 54Mbit/s 上行速率 28.8 kbit/s 236.8 kbit/s 153 kbit/s 384 kbit/s 1.8 Mbit/s 5.760 Mbit/s
系统调优
• Linux 系统内核 socket connection 调优
• • • • • • • • • • • • • • • • • • • • 查看总限制参数 ulimit -a 查看 Linux 系统级的最大打开文件数限制: cat /proc/sys/fs/file-max *通常这个系统级硬限制是 Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制。这个也 间接告诉我们这台机器可以同时承受 socket 的最大链接数。 第一步,修改用户进程可打开文件数限制,修改/etc/security/limits.conf文件,在文件中添加如下行: * soft nofile 655350 * hard nofile 655360 第二步,修改网络内核对 TCP 连接的有关限制 ,修改/etc/sysctl.conf文件, 在文件中添加如下行: net.ipv4.ip_conntrack_max = 655350 *Linux 网络内核的 IP_TABLE 防火墙对最大跟踪的 TCP连接数有限制,此限制值要尽量小,以节省对内核内存的占用。 第三步,执行 sysctl 命令 sysctl -p 修改客户机的端口范围 修改/etc/sysctl.conf文件,在文件中添加如下行: net.ipv4.ip_local_port_range = 1024 65000 sysctl -p 参考 /guowake/article/details/6615728 《http长连接200万尝试及调优 》/blog/cs/?p=1062
调试工具
• Wireshark • tcpdump
命令:tcpdump -s0 -w /sdcard/a.pcap
• adb logcat • 电流表
心跳电量消耗图
WIFI
3G
2G
性能测试
分析:在整个性能测试过程中,可用内存一直维持在 9G 左右;仅维持 MQTT 连接时 CPU 利用率维持在 40% 左右。本测试场景使用 9 台压力测试机,运行 5500(在测试过程中, 1000个虚拟用户失去连接)个虚拟用户,每个虚拟用户建立50个MQTT连接。运行 21 hours, 17 minutes and 58 seconds。 结论:达到了 1 台 WS服务器最高承载 27.5W 个连接并能够正常保持登录的目标。
WiFi
802.11a
参考: /wiki/List_of_device_bandwidths#Mobile_telephone_interfaces
关键指标
• 电量 小于5%* • 流量 • 性能
小于3MB/月* 30秒内发送10w条次消息 最高24小时不断线 / 消
日志和性能数据
• Mangodb+ flex
与第三方应用的关系
如何使用API
• 服务器端开发
• • 第一步,通过http get请求访问COA提供的 authLogin接口, 获取AcesssToken 第二步,创建Post请求访问COA提供的 pushMesage接口
• 客户端开发
• •
• •
云应用客户端开发 本地应用客户端开发
第一步,创建Manifest文件 第二步,接收消息
• 稳定性
• 安全
息100%到达
基于Oauth Token的云帐号体 系/ CloudUUID / AES加密
* 24小时均联网
系统设计
• 开发语言
• 数据库
• 通讯协议
服务器架构
Admin后台 API 服务器
BS广播服务器 DB 数据库
WS
NCM 导航服务器
开发中遇到的难题
9493端口的由来. 客户端心跳程序跟随系统一起休眠了. 从websocket到mqtt,协议的研究 hashring的算法不一样 心跳策略和算法的摸索,gprs/edge,hspa/u mts,wifi不同网络制式下的keepalive time。 • 重复发送和收不到,如何防止多个长连接。 • • • • •