58到家实时消息平台架构实现细节.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
58到家-通用实时-消息平台 架构实现细节 58沈剑 关于-我 • 前百度- 高级工程师 • 58 同城- 高级架构师,技术委员会主席,技术学院优秀讲师 • 58到家- 技术总监,技术委员会主席 • “架构师之路”作者,深夜写写技术文章 • 本质:技术人一枚 目录 • 一、实时消息平台解决什么问题 • 二、传统的解决方案与不足 • 三、可扩展实时消息平台设计与实践 • 四、分布式消息平台架构细节 • 五、总结 一、解决什么问题 一、实时消息平台解决什么问题 • 端到云的实时上报需求:58速运司机端GPS实时上报 • 云到端的实时推送需求:订单实时推送 • 端到端的聊天消息需求:用户、商户、客服之间的聊天沟通 • 重点是通用,与业务线解耦 二、传统解决方案与不足 二、传统解决方案与不足 • 端到云的实时上报需求:58速运司机端GPS实时上报 • 传统解决方案:http轮询上报 • http轮询上报的不足 (1)http短连接 (2 )web-server并发 二、传统解决方案与不足 • 云到端的实时推送需求:订单实时推送 • 端到端的聊天消息需求:用户、商户、客服之间的聊天沟通 • 传统解决方案: (1)APNs (2 )mqtt • APNs与mqtt的不足 (1)APNs可达性、实时性、限速 (2 )mqtt可用性 三、可扩展实时消息平台 三、可扩展实时消息平台(1) • 业务分析与抽象:“在线的业务”(司机、用户、商家、客服) • 优化TIPS :TCP长连接消息通道 • 新的问题:多APP多业务后端时扩展性差,耦合严重 • 优化TIPS :通过消息总线与业务后端解耦 • 实现了“端到云”的实时上报 三、可扩展实时消息平台(2 ) • 有了“TCP消息通道”,“云到端”的消息实时推送不是问题 • 优化TIPS :提供RPC接口推送消息 • “端到云”不允许RPC调用,“云到端”为何可以RPC调用呢? • 新的问题:大量消息不可达,因为用户根本不在线 • 优化TIPS :引入缓存存储用户在线状态 三、可扩展实时消息平台(3 ) • “端到端”的消息实时推送呢? • 万一接收方不在线怎么办? • 优化TIPS :离线消息 • 消息丢失怎么办? • 优化TIPS :先落地,接收方收到回ACK再删除 • 消息发送流出步骤 • 万一没收到服务器回复怎么办? • 优化TIPS :发送方重发 • 万一收到重复消息怎么办? • 优化TIPS :接收方去重 三、可扩展实时消息平台(4 ) • 线上通用消息平台架构 • 为何接入层与逻辑层分离? • 通用消息平台核心接口 login/logout/keepalive c2s/s2c c2c/c2c-ack/get-offline-msg • 通用消息平台核心流程 • 既然是通用的消息平台,如何实现跨帐号体系的c2c聊天? • uid不是消息通道中的唯一标识,因为各账号体系uid不同 • 优化TIPS :当当当当! 三、可扩展实时消息平台(5 ) • 协议设计如何支持多接口,如何扩展接口? • 优化TIPS :定长包头+ cmd +变长包体 • 如何无缝兼容支持协议变更? • 优化TIPS :调用方关注接口,协议透明,使用可扩展的协议(pb) • 不同业务发送的消息体不一样,如何可扩展的支持业务线的变态需求 • 优化TIPS :消息内容可扩展(xml ) (1)富文本字体、字号、加粗、颜色 (2 )如何支持图片的发送 (3 )如何可扩展的支持“震一下”“对方正在输入”等需求 四、分布式架构与细节 四、分布式架构 • sdk如何获取接入层ip ? • 扩展性 (1)接入层如何水平扩展? (2 )逻辑层如何水平扩展? (3 )数据层如何水平扩展? • 负载均衡 • 可用性:使用冗余解决可用性问题 (1)接入层挂了怎么办? (2 )逻辑层挂了怎么办? (3 )缓存挂了怎么办? 四、分布式架构 • 一致性:数据冗余必将引发一致性问题 (1)缓存挂了怎么办? (2 )缓存在线、接入层断了怎么办? (3 )缓存不在线、接入层连上来怎么办? (4 )状态不一致,有没有办法恢复? 五、总结 五、总结(1) • “端到云”消息投递:TCP消息通道,消息总线业务解耦 • “云到端”消息投递:向业务

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档