- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
业务 客户端 App
业务服务端 app-serv er
msg-gate msg-logic
mq 消息 总线
ipconfig redis
TC P消息 系统
TCP消息系统
C2S流程
业务 服务端 app-serv er
业务 客户端 App
2.ack 1 msg
msg-gate
3msg
msg-logic
业务服务器端需要做什么
发送消息,sendMsg 接收消息,读取mq
APP
send ack
推送通道
ack
send ack
业务服务器
send
策略中心
消息数据
mq
(4)端
客户端统一SDK
保活很关键 消息要去重 TCP重连随机延时 控制电量消耗
四、总结
总结
提供移动端SDK,统一端上接口 统一服务器端接口 强化消息推送能力,不开App也能送达用户 增加消息推送策略,满足业务需求变化
DSF Client2
DSF Client3
DSF Client4
×
DSF Server1 调度器
DSF Server2
DSF Server3
Restart shutdown
1、关闭DSF Server到client的TCP连接,设置为不可连 接状态。DSF Client重新连接其他Server
2、等待调度器中的缓存消息到期(约5秒),缓存 消息清空后执行关闭或重启
序号 1 2 3 4 5 6 7 8
时机 登录、登出 Keepalive Logic层请求踢人 限速 socket异常 消息头校验 定时遍历peer 推送消息(只读)
检索类型 uid uid uid channel(socketid) channel(socketid) channel(socketid) 遍历 uid
外部系统 TCP通道配置 App端数据 App端数据 App端数据
dus 短信推送系统
(3)统一策略中心
策略中心
策略配置 请求推送数据
ACK检测
策略配置库 策略解析 消息缓存
消息推送 (选择通道)
计时器调度
结果反馈
策略中心—海量消息如何调度
固定Δt时间读到出队时 间小于当前时间的消息
Time1
send ack
推送通道
ack
send ack
业务服务器
send
策略中心
消息数据
mq
推送通道
根据目标用户uid,获取相应通道所需的技术参数
序号 1 2 3 4 5 6 7
技术通道 TCP通道 APNS 个推 米推 MQTT 微信 短信
技术参数 uid,appCode device_token imei,CID imei token(主题) openid templateId
58到家多端消息整合架构
技术创新 变革未来
目录
背景及痛点 消息类型划分 方案设计 总结
一、背景及痛点
背景及痛点
到家业务复杂 消息需求多样 各组重复开发
速运 用户端
丽人 业务
抢单
……
报警
速运 司机端 上报
C店用 户
HTTP
APNS
MQTT
TC P
个推
米推
钉钉
微信
短信
C店商家
uid4 channelid2
……
……
离线消息
离线消息送达—主动拉取
拉离 线数据 uid=123 msgid=100 size=10
删除123用户 msgid<=100的 离线 数据
App
返回10条数 据,最大
msgid=110
拉离 线数据
uid=123 msgid=110 size=10
Im -serv er
映
端
射
ipconfig
关
返回对应组
系
的某个ip
ip1
ip2
ip3
ip4
ip5
ip6
ip7
业务分组隔离(二)
速运业务
开放平台
其他业务
接入层1
接入层2
接入层3
逻辑层
逻辑层
接入层4
接入层5
逻辑层
逻辑层
接入层6
接入层7
逻辑层
负载均衡
负载均衡怎么做
ip,status
更新ip状态status
如果当前ip状态正常,返回 当前ip,指针指向下一个ip; 如果当前ip状态异常,指针
5.msg
mq
消息 总线
4.msg
ipconfig redis
TC P消息 系统
TCP消息系统
S2C流程
业务 客户端 App
4.msg
5.ack
msg-gate
业务服务端 app -serv er
3.msg
6.ack
1.sendmsg
msg-logic
2.find gate
ipconfig redis
端
ipconfig
server1 server2
逻辑层细节
业务分组
业务分组隔离(一)
/xx/addr?appcode=402&uid=400184228&app_version=4.5.1&phone_os=HUAWEI+NXT-AL10
Appcode=402
聊天
保姆 业务 通知
保洁 业务
多套消息系统,急需统一
二、消息类型划分
消息类型划分
业务抽象 (1)经纬度上报 (2)保洁券过期 (3)用户咨询商家 消息类型 (1)C2S(client to server) (2)S2C(server to client) (3)C2C(client to client)
TC P消息 系统
mq 消息总线
TCP消息系统—C2C
C2C系统改造 C2C流程
业务 服务端 app-serv er 消息总线 mq
业务 客户端 App1
业务 客户端 App2
1.msg:req 5.msg:ack
8.msg:notify 9.msg:ack
msg-gate
msg-gate
4.msg:7a.cmksg:notify
消息平台
c2s消息 s2c消息 c2c消息
业务服务器
业务服务器
业务服务器
如何一套架构,满足各类消息需求?
三、方案设计
整体方案
TCP消息系统 统一推送通道 统一策略中心 端
端
统一SDK
微信
手机短信
TCP消息系统
推送通道
策略中心
(1)Tcp消息系统
TCP消息系统
业务客户端 业务服务端 消息总线 TCP消息系统 (1)gate (2)logic (3)redis (4)ipconfig
查询uid=123, msgid>100的前 10条数 据
删除123用户 msgid<=110的 离线数据
离线 消息数 据
……
返回 没有查 到 数据,离线消 息拉取结束
……
查询uid=123, msgid>140的前 10条数 据,无 数据
离线消息送达—被动接收
以前没做离线拉取,新增需求,老版本App表示不支持 强制升级?太不友好 不做了?产品怕不答应 服务器端上逻辑解决
频率 较高频 高频 低频 低频 低频 低频 低频 高频
接入层session管理—结构
遍历Peer (Queue) channel链表 channelid1 channelid2 channelid3 channelid4 channelid5
……
通过channel检索 (HashMap)
Key
Value
channelid1
Peer1
channelid3
Peer3
channelid2
Peer2
channelid5 channelid4
……
Peer5 Peer4 ……
通过uid检索
(BiMap)
Key
Value
uid2 channelid1
uid3 channelid5
uid1 channelid3 uid5 channelid4
指向下一个ip再进行判断
如果指针连续前进6次均没有 状态正常ip,表明列表中所有 接入层ip均异常。此时需要特 殊处理,认为所有ip都正常,
并报警。
一致性哈希路由
平衡性 单调性 路由一致性
缓存层细节
如何保证缓存状态高可用?
双读双写
Redis集群
(2)统一推送通道
消息推送架构
APP
2.msg:req
10.msg.ack
msg-logic 6.find gate
redis
11.msg.delete
3.msg:save
离线 消息
ipconfig
TC P消息 系统
接入层细节
session管理
接入层session管理—维护时机
Peer<channel, isLogin, loginTime, lastKeepAliveTime>
……
message2的送达值为5,转化为二进制数 为101,第一位和第三位对应值为1,说明
TCP和个推通道送达数据
……
0
0
1
0
送达值 2 5 1 0 0
……
1
策略中心—重启计时调度器不丢数据
依靠RPC框架Daojia Service Framework(DSF),能够确保不丢失信息
DSF Client1
Time2
计时器
有新推送消息 时入队
head
消息1
消息2
……
消息N
tail
策略中心—如何判断哪个通道送达
收到某个通道的ACK,在对应的消息ID的消息缓存记录上加上通道值
通道 TCP APNS 个推 米推 MQTT ……
通道值 1 2 4 8 16
……
消息ID message1 message2 message3 message4 message5
谢谢聆听!
DNS优化
DNS优化(一)
HTTP协议典型架构 DNS和nginx转发是有开销的 DNS解析失败,Game Over
browser
DNS
nginx
tomcat1 tomcat2
DNS优化(二)
获取ip(ip-list),并保存。 直接使用ip(ip-list)。 用时间戳更新ip-list,首选ip每次连接时获取。 放弃Nginx跳转(负载均衡怎么做)。 ipconfig服务定时监控server状态并更新。