More Related Content Similar to 大容量云推送技术解析 (20) 大容量云推送技术解析2. Agenda
• Push是什么?
• 开发者为什么要用Push?
• 我们是怎么样实现大容量Push服务的
3. Agenda
• Push是什么?
• 开发者为什么要用Push?
• 我们是怎么样实现大容量Push服务的
10. iPhone vs. Android
• iPhone
– 不允许在后台跑服务与联网
– APNs是唯一的Push选择
• Android
– 大家的选择是:常驻后台服务,保持网络连接
12. • APNs (Apple Push Notifiction service)
• GCM (Google Cloud Messaging)
– 在国内不可用:无Google帐号、服务不稳定
• Urban Airship
– Oracle、Intel、Salesforce、USA Today
– 国内开发者用的可能性小
• 收费
• 服务在国外,在国内响应慢
15. 极光推送:第三方云推送服务
• 永久免费
• 同时支持 Android 与 iOS
• 大容量、稳定
• 集成SDK简单:一行代码
• Push内容:除了通知,还包括消息、多媒
体等
17. Agenda
• Push是什么?
• 开发者为什么要用Push?
• 我们是怎么样实现大容量Push服务的
20. 2012 CPI
0.9
0.92
0.8
0.68
0.59
0.58
Jan
Feb
Mar
Apr
May
Jun
iOS
数据来自W3i
21. 2012 CPI
0.92
0.9
0.8
0.68
0.59
0.58
0.51
0.43
0.42
0.3
0.29
0.3
Jan
Feb
Mar
Apr
May
Jun
Android
iOS
数据来自W3i
23. 6个月留存率
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
Month
0
Month
1
Month
2
Month
3
Month
4
Month
5
Month
6
No
Push
数据来自Urban
24. Push通知提高留存率
100%
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
Month
0
Month
1
Month
2
Month
3
Month
4
Month
5
Month
6
Push
No
Push
数据来自Urban
26. 自己实现Push成本
• 以某 IM 应用为参考,假设:
– 100万并发
• 开发成本
– 6人
– 半年
• 运维成本
– 服务器:5节点以上
– 带宽:5000每月
27. Agenda
• Push是什么?
• 开发者为什么要用Push?
• 我们是怎么样实现大容量Push服务的
28. 大容量Push服务实现
• Push vs. Polling
• 极光推送 Android SDK
• 极光推送服务器集群设计
• C2000K
29. Push Polling
延迟 低 高
流量 低 高
电量 低 高
实现的复杂度 高 低
30. 手机耗电情况
8
7
6
5
理论待机
4
Polling
3
5个Polling
Push
2
1
0
待机时间
• 电池1400 mAh的手机,底电流8mA
35. 极光 服务器集群架构
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS
TCP 接入
36. 接入
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS
• Server IP-address
TCP 接入 Service
• 通过SIS分配接入
37. 中间件:MQ
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS
TCP 接入
RabbitMQ分发
40. 高可用性: 单个SIS失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • DNS轮询
TCP 接入
41. 高可用性: 单个SIS失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • DNS轮询
• 接入本身的DNS
TCP 接入
42. 高可用性: 单个SIS失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • DNS轮询
• 接入本身的DNS
接入
• 非灾难性
TCP
43. 高可用性: 单个接入失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • SIS 不再调度
TCP 接入
44. 高可用性: 单个SM失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • 其他结点从MQ取
数据
TCP 接入
45. 高可用性: 单个Push Center失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • 其他结点从MQ取
数据
TCP 接入
46. 高可用性: 单个Push Center失效
Session Manager Push Center
MQ Zookeeper MQ
UDP
SIS • 其他结点从MQ取数据
• Nginx + Keepalived
接入
前端
TCP
47. 水平扩展
• 接入通过 SIS 扩展
• SIS 通过 DNS 扩展
• Session Manager/Push Center 通过 MQ
扩展
• 使用 Zookeeper 管理配置
48. 统计/监控
• 在线:输入输出统计
• 离线:日志统计分析
• 统计数据几十秒级采集分析
• 监控各个模块工作状态
• 需人工干预的异常告警
– Email
– SMS
50. C2000K: 服务器设计
• Libev: 事件驱动、异步、非阻塞
• Memory Pool: 省内存、加快分配和回收
• 多核
– 一个核一个进程
– 共享监听一个socket
• 每个子进程有自己的event loop, mem
pool
51. C2000K: 架构
Event Event Event Event
Loop Loop Loop Loop
Mem Mem Mem Mem
Pool Pool Pool Pool
52. C2000K: Linux Kernel参数
• fs.file-max = 10485760
• net.ipv4.tcp_wmem = 4096 4096
16777216
• net.ipv4.tcp_rmem = 4096 4096
16777216
• net.ipv4.tcp_tw_reuse = 1