ddpush集群化

推送系统集群化设计

说明

1. 数据流


客户端 获取用户ID和客户端唯一标识(uuid),注册到表1
业务发送 消息+用户ID
通过表1,找到消息对应的客户端
通过表2,找到客户端所在的 推送节点
推送节点 根据uuid,找到客户端IP/port
通过TCP/UDP方式推送数据到 客户端


2. 设计要点


推送集群中,每个推送节点都要生成 唯一标识(pid)
客户端第一次心跳到推送集群后,推送节点接收到心跳,创建uuid与客户端地址对应关系的同时,向表2 记录uuid与pid的关系
客户端每次心跳,都由同一个推送节点接收(通过k8s实现),以避免 推送节点与表2频繁交互,造成数据漏发、丢失等问题

 

集群宕机容错设计

说明


业务与推送集群间,维护一个消息记录表,记录推送的消息,消息状态分为 推送中、推送成功
客户端收到推送消息后,更新 消息记录表中对应数据为 推送成功
通过定时调度,定时获取推送失败数据(消息在 五个心跳时间内(暂定),仍没有将状态改为推送成功,即认为推送失败),再次尝试下发,如果仍无法下发,走其他下发方式。


设计要点


消息记录表,由接入平台写入,由客户端更新,推送集群不维护此表,以降低服务器压力。

由客户端维护表,就需要客户端在收到消息后,发两条回执,一条给推送集群,一条给表更新接口

 

 

ddpush集群化技术点:

  1. k8s如何支持UDP数据包和TCP长链接
     -- 通过nodeport对外暴露端口和设置端口协议实现

  2. k8s service路由规则能否设置
       -- k8s service路由有两种方式:轮询和按session,其中按session方式既是同一IP的客户端请求,会路由到同一个pod,满足推送需求;

  3. 推送节点自注册,程序内无法获取宿主机IP
     -- 用pod名做 自注册的唯一标识
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值