GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

消息质量平台系列文章|全链路排查篇

2020 年 12 月 26 日

消息质量平台系列文章|全链路排查篇

背景


闲鱼每天流转的消息量级过亿,触达一半的用户,由于二手商品的性质,闲鱼用户需要通过聊天进一步了解宝贝成色,进行商品价格协商等,消息作为闲鱼的基础功能,在促进商品成交中起到很大的作用。同时在闲鱼,买卖双方通常是个人用户,是否在线存在非常大的不确定性,消息触达一旦出现问题,就有可能影响到商品成交,甚至还会出现引流到微信进行欺诈的情况,因此急需通过有效手段为用户提供稳定可靠的消息服务。


问题定义


在消息领域,从用户角度来说,问题现象主要是消息丢失、消息触达延迟等。从技术上来说丢消息的根因是端上架构设计,即有通过服务端接口拉消息,也有 accs 长连接通道下发消息,当有大量消息同时到达客户端时,消息合并或落库异常则会被丢弃掉,导致用户消息丢失。而在线消息延迟,更多是 accs 通道延迟和阻塞导致。



但闲鱼消息因为收发链路长,服务端和客户端上实现的处理逻辑复杂,还涉及第三方通道,所以面临三个主要问题:


  • 如何在上线前尽早发现问题?

  • 线上出现问题如何快速发现?

  • 舆情问题如何有效定位?


以上问题都值得去解,但是考虑到闲鱼闲鱼消息功能自上线以来,核心逻辑都是自己实现没使用集团现成的消息 SDK,随着早起业务疯狂增长开发交替,现在开发接手消息的需求如履薄冰,从而导致消息线上问题不断叠加。着手消息问题治理,最优先需要的是有一个全面的排查手段,能够快速排查定位线上问题。


消息全链路排查建设


在定位舆情问题时,仅仅通过有限的文字描述和截图难以发现问题的本质,甚至是无法确认是端上问题还是服务端问题。举个栗子,某天晚上大家准备下班时,老板抛出一个舆情,用户反馈消息丢失,这时候大家都慌了,服务端、客户端、质量同学大家都聚集在一起定位问题,而定位的唯一途径就是你查你的日志,我查我的日志,查到最后还是在盲猜问题,耗时耗力不精准。


从这件事情来看,要想提升闲鱼消息服务质量,光靠开发优化远远是不够的,还需要基建项目来提升定位问题的消息,于是质量团队和开发团队一起着重闲鱼消息全链路排查的建设。要做消息全链路排查,关键是有全面的消息日志支撑,能够获取到消息的完整轨迹。我们通过将服务端消息节点日志、接口日志、客户端消息状态埋点日志、和行为埋点日志聚合,最大程度还原用户当时的行为和消息途径链路。


日志上报


首先是消息链路的核心场景梳理,针对消息合并、落库、上屏、域环同步、域环更新等容易出现或反映问题的关键节点,会进行排查所需的日志上报。


其次就是日志格式约定,核心是客户端在生成每一条消息时也会给它生成一个 messageId,对于服务端推送的营销类消息,messageId 则是由服务端生成。消息每经过一个核心节点都只将途经状态加上 messageId 上报,该 id 也会透传给服务端上报日志使用,这样 messageId 串联起了一条消息从客户端发到服务端再到客户端收的完整追踪链路。


最后是上报的方式,最开始的想法是端上接入 SLS SDK 进行实时上报,但对端上改动成本过大,对稳定性会有一定影响所以放弃了,最终复用了客户端埋点上报路径,后面只需实时清洗埋点日志即可,在不用端上改造的情况下满足了实时日志获取的需求。服务端日志上报则是用现有的 SLS 上报链路。


需要强调的是,出于隐私和存储成本考虑,日志上报不会带上具体消息内容,只会带上必要的排查所需参数和 messageId。


实时日志清洗


进行实时日志清洗,首先订阅了闲鱼的 TT 分钟级别埋点日志,清洗出消息相关的埋点日志。但是这里面的数据量巨大,一条消息的埋点可能有几十条。所以我们按照 messageId、utdid 对这些日志进行聚类,将数据的量级降低了几十倍,最后将排查数据写回 SLS 用于排查链路,将分钟级别统计数据写入 TDDL 用于监控建设。


用户行为日志


除了聚焦单条消息的生命周期外,问题排查另一个角度是宏观去看用户在端内做了什么行为触发了异常。


通过实时清洗和编排客户端上报来的点击和页面曝光埋点,去了解用户在异常发生前点了哪些按钮,访问了哪些页面,从而分析出异常的可复现路径。同时整合服务端接口调用日志,检查用户异常发生时是否成功请求了服务端接口,请求参数是否正确,异常的错误码是什么。这些有效信息整合,有助于我们去复现和定位具体是什么场景出现,辅助开发更快解决问题。


前台交互


“兵马未动,数据先行”——前面的数据准备让我们能够做到更加精细地排查消息链路中可能存在的问题,那么如何让问题暴露的更加明显、让开发使用的更加方便则是我们的另一个目标。通过观察开发同学在排查消息问题时,一般会根据用户、消息 ID、会话 ID 三个纬度进行,所以对其进行了分类和梳理。


另外为了让使用者在查询的过程中更加直观的观察到消息在链路的各个节点,我们将链路进行了分类:客户端上行、服务端、客户端下行。同时会对异常节点进行显著提醒,让使用者快速发现问题出现在哪一端、哪一个环节。


总结与展望


现在,大家通过闲鱼消息质量平台的链路排查工具,可以清楚查看到消息的完整生命周期,并根据异常用户的行为日志排查问题出现路径,辅助开发快速定位可能在哪个环节出现了问题,而不用人肉翻查多个数据库和日志流进行整合分析,甚至隔天才能拿到数据排查,排查效率提升 90%以上。此外该排查模式具备可复用性,比如发布链路排查也在平台接入中。除此之外,消息质量平台在问题发现效率和测试效率上也做了很多事情,比如端上的巡检对账能力、核心指标实时监控、舆情管理还有链路级别测试回归工具等后面再进行详细介绍。还有与自动化和端智能结合,也是我们不断尝试的方向,希望通过我们的保驾护航,闲鱼消息越来越稳。


文章转载自:闲鱼技术(ID:XYtech_Alibaba)

原文链接:消息质量平台系列文章|全链路排查篇


2020 年 12 月 26 日 08:00685

评论

发布
暂无评论
发现更多内容

奥里给,通过这几份PDF,终于拿到了阿里,腾讯等一线大厂的offer

Java架构之路

Java 程序员 架构 面试 编程语言

太牛了!这是什么神仙级的面试pdf(含答案),跳槽大厂不是问题

Java架构之路

Java 程序员 架构 面试 编程语言

第二周作业

纳豆卡玛

第二周作业

第2章:产品思维作业

让时间说真话

产品经理

香喷喷!2021最新出炉Java程序员面试全方位贴身指南

比伯

Java 编程 程序员 架构 面试

Alibaba追魂Java四面:HashMap+分布式锁+AOP+Redis+源码问了个遍(已拿offer)

Java成神之路

Java 程序员 架构 面试 编程语言

千万级电商项目从0到1到100全过程 涵盖Java程序员不同成长阶段的问题及优选解决方案!

Java成神之路

Java 程序员 架构 面试 编程语言

产品训练营第二周作业-利益相关者

jpcr987i

产品经理训练营第 0 期 - 第二周作业

🍑

极客大学产品经理训练营

极客时间产品经理训练营第 2 次作业

待注册

Offer经验分享 - 蚂蚁金服、字节跳动、PDD、百度、华为、Paypal - Java社招面经

Java成神之路

Java 程序员 架构 面试 编程语言

Mybatis系列全解(六):Mybatis最硬核的API你知道几个?

潘潘和他的朋友们

Java 后端 mybatis 后端开发 mybatis源码

产品经理训练营 第二周作业记录

玲玲

产品思维 产品经理训练营

席卷图文学习前端Flex布局

魔王哪吒

html 面试 前端 html/css Flex

Alibaba内部晋升手册面试题集 ,Java岗位

Java架构之路

Java 程序员 架构 面试 编程语言

新世界的智能,旧梦中的暖气

脑极体

还不知道简历如何写?就该这样写!

yes

面试 简历

产品经理训练营第二周作业 - 利益相关方

Denny-xi

产品经理 产品经理训练营

作业 - 第二章 产品思维和产品意识

hao hao

喜报丨京东科技主导的开源项目ShardingSphere荣登报告榜单国人主导开源项目中活跃度第五名!

京东科技开发者

分布式数据库 京东 ShardingSphere

MapReduce博文体系

小马哥

大数据 mapreduce 知识体系 架构师 七日更

在质量管理中掘金

俊毅

产品经理训练营 Week2 作业

Mai

训练营-第二周作业

💥萝贝桃儿

新浪微博利益相关方分析

🙈🙈🙈

极客大学产品经理训练营

3分钟带你了解「消息中间件」Kafka、RocketMQ

互联网架构师小马

2021 年产品训练营 - 第二周作业

Meng

第二次作业&第三次作业

yoki

Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

潘潘和他的朋友们

Java 后端 mybatis 后端开发 mybatis源码

小程序抽奖助手产品利益相关者分析

夏天的风

产品经理训练营

极客大学·产品经理训练营·第二章作业

二大爷

产品经历

消息质量平台系列文章|全链路排查篇-InfoQ