| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> 闲鱼消息发展回顾 -> 正文阅读 |
|
[区块链]闲鱼消息发展回顾 |
引言闲鱼消息系统经过几代开发的建设,目前稳定的支撑亿级消息体量。在消息系统建设过程中,我们经历了从简单到复杂,从困扰到破局,每一次的技术改变都是为了更好的解决当下业务面临的问题。“忆昔午桥桥上饮,坐中多是豪英“,此文记录闲鱼消息系统技术变迁,以期在此基础上汲取更多经验。 闲鱼消息1.0:业务初创期,最小化可用背景:14年启动闲置交易独立APP “闲鱼”,一期构建完成APP主链路,包含商品发布→搜索→商品详情→IM会话→交易。作为初创app,业务需尽快上线验证效果,技术建设上需要完成闲鱼消息从无到有的系统搭建。 作为即时通讯系统,最小化能力包含
与一般IM会话模型不同的是,闲鱼会话以商品为主体,人+人+商品为要素构建会话,因会话模型的差异,淘系已有的消息系统,短期内无法满足业务需求,而闲鱼完全自建消息系统耗时巨大。为了保障业务高效上线,技术选型上最大化复用已有系统能力,避免重复造轮子。所以,
总体架构如下图,以此模式完成快速交付保障了业务最小化可用 闲鱼消息2.0:用户量高增速,重建闲鱼消息系统背景 闲鱼用户量快速突破100W,消息服务调用量暴涨。常态性的,用户反馈消息数据获取卡顿、白屏,大量的push发送下,系统告警频发。 造成这些问题的原因:消息1.0 模式下,获取消息数据全量拉模式,客户端纯UI不做数据存储
基于上述问题,我们决定重建消息系统,以应对未来更大的用户增量。回归到IM系统的核心功能 消息存储模型 会话模型:由owner、itemid、user、sessionType 来标识唯一会话,增加扩展属性支持个性化? 摘要模型:作为用户会话视图,同一会话的不同用户可个性化呈现,由userid、sid标识唯一摘要? 消息模型:由sender、消息内容、消息版本、sid组成。sid+消息版本唯一确定一条消息? 指令模型:是一种双端约定,由服务端下发,客户端执行的指令集。如免打扰指令、删除指令等? 消息通道 在线通道:使用淘宝无线ACCS长连接提供的全双工、低延时、高安全的通道服务。 离线通道:使用淘宝消息推送平台AGOO. 其屏蔽了各主流厂商对接的复杂度,直接对业务系统提供服务? 消息同步模型
下图为一条消息从发送到接收的过程以及服务端和客户端的执行流程 如图所示,假设Ua给Ub发送一条消息,消息写扩散至Ua和Ub的各自的域环中。
整个同步逻辑基于闲鱼的消息域环,域环可以看作是有着固定容量的用户消息收件箱,给一个用户发送的所有消息都会同步到他的域环中。? 域环存储:域环需要支持高并发数据读写,使用阿里分布式KV存储系统tair来实现? 域环容量:为减少全量消息同步,以用户下次进入闲鱼需要同步的平均消息量来规划个人域环容量。同时利用FIFO循环覆盖历史数据? 域环版本:用户当前消息位点,在消息进入个人域环时通过tair的counter实现域环版本严格连续递增,用于全量、增量同步判断 上述建设完成后,闲鱼具备了自己独立的消息系统,当下遇到的问题得到了缓解,用户体验度有大幅提升。 闲鱼消息3.0:业务快速发展下,系统稳定性保障背景 随着闲鱼业务生态的丰富,IM会话与消息内容类型不断扩展,同时在DAU的快速增长下,用户反馈消息收不到、消息延迟等舆情问题日渐突出。 问题分析 1.闲鱼app进程无有效保活机制,app退到后台后进程很快就会被系统挂起,导致长连接中断。此时消息推送走厂商通道,而厂商通道的实时性较差,且对消息推送的优先级设定有差异,从而造成用户感知消息延迟? 2.accs在线消息推送时,平均延时较短,但存在假连情况,而且目前的消息推送链路无ack机制,造成服务端以为消息发出去了但实际上客户端并没有收到,用户下次打开app后才能看到消息,用户感知消息延迟。造成假连接的原因:用户退到后台,accs长连中断,但是设备状态更新有延时。 3.目前消息同步的推模式(accs push)、拉模式(mtop),客户端未做隔离,异步进行处理,导致在某些极端情况下消息数据库处理异常,引发消息丢失。比如某用户上线后连续收到多条消息,其中一条触发域黑洞,在进行消息同步端上数据重建时,小概率处理出错。 4.大部分线上消息问题发现靠舆情反馈,如消息错乱,出问题后系统无感知、无补救措施且排查困难,仅能跟随版本做修复? 5.业务不断丰富,孵化出基于消息系统的服务号及小程序内容营销、消息群组等,各类消息发送链路共用域环与数据存储,造成稳定性问题。如个人域环的消息包括IM聊天和营销消息,IM聊天由用户触发,需要保证强到达;而营销消息一般是由系统通过班车等方式批量发送,消息量级大,tps高,影响IM服务稳定性 基于上述分析,我们进行专项解决。 消息重发与推拉隔离 ACK: 保障消息及时到达。服务端下行accs消息时,将消息加入重试队列并延迟重试,客户端在收到accs消息并处理成功后,给服务端回一个ack,服务端收到ack后更新消息到达状态,并终止重试,以此避免设备假连或网络不稳定的情况。 重发:根据延迟重发策略决定何时重发消息,保障消息确定性到达。自适应延迟重发策略是指新消息先通过4次固定N秒的短延迟来探测设备的网络状况,然后根据网络状况来递增固定步长M的延迟策略,这种策略可以保障在最短的时间内,使用最少的重发次数将消息投递成功。 消息队列:端上引入消息队列,按顺序处理消息,保证消息处理的准确性。同时进行推拉隔离,保障队列有序消费,解决了复杂状况下并发处理消息数据合并出错的问题。 数据存储拆分? 闲鱼每天发送的消息中有一半以上是营销消息,营销消息的发送具有明显的波峰波谷流量,高峰期会导致消息数据库抖动,影响IM消息。对消息、摘要、域环存储做业务隔离,以适应不同业务场景对稳定性不同的要求。
线上问题发现与恢复? 保障稳定性的关键要素是做好各种核心指标的监控,而监控首先要有数据来源,对服务端+客户端的关键链路节点埋点,基于集团UT、SLS,通过blink进行实时清洗、计算,最终形成统一规范的日志数据落至SLS,以供实时监控及链路排查。 消息系统的核心目标是保障用户消息发的出、收得到且及时收到,所以我们通过计算发送成功率、到达率、消息延迟来监控系统的稳定性。此外,为了解决用户舆情排查困难的问题
经过一系列专项治理,技术类舆情下降50%,从0到1建设了消息稳定性体系,用户体验进一步提升。 庞大的用户体量下,追求极致的NPS闲鱼作为电商交易APP, 其中IM是交易的前置链路,IM的产品体验极大影响用户交易效率 前段时间进行用户调研,从闲鱼IM NPS低于预期(NPS是用户忠诚度衡量指标 = 推荐者%-贬损者%),从用户反馈来看:
映射到目前闲鱼的消息系统上,我们的系统架构依然有很多需要持续改进的地方。典型的如同步协议冗余,在需求迭代过程中容易引发问题、有效保活机制的缺失对消息即时送达的影响、小众机型离线消息收不到、多年的数据积累在线库臃肿等问题,影响着闲鱼业务迭代速度与NPS。将提升NPS作为核心目标,闲鱼消息4.0进行时。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 3:48:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |