消息质量平台系列文章|全链路排查篇
背景
闲鱼每天流转的消息量级过亿,触达一半的用户,由于二手商品的性质,闲鱼用户需要通过聊天进一步了解宝贝成色,进行商品价格协商等,消息作为闲鱼的基础功能,在促进商品成交中起到很大的作用。同时在闲鱼,买卖双方通常是个人用户,是否在线存在非常大的不确定性,消息触达一旦出现问题,就有可能影响到商品成交,甚至还会出现引流到微信进行欺诈的情况,因此急需通过有效手段为用户提供稳定可靠的消息服务。
问题定义
在消息领域,从用户角度来说,问题现象主要是消息丢失、消息触达延迟等。从技术上来说丢消息的根因是端上架构设计,即有通过服务端接口拉消息,也有accs长连接通道下发消息,当有大量消息同时到达客户端时,消息合并或落库异常则会被丢弃掉,导致用户消息丢失。而在线消息延迟,更多是accs通道延迟和阻塞导致。
但闲鱼消息因为收发链路长,服务端和客户端上实现的处理逻辑复杂,还涉及第三方通道,所以面临三个主要问题:
如何在上线前尽早发现问题?
线上出现问题如何快速发现?
舆情问题如何有效定位?
以上问题都值得去解,但是考虑到闲鱼闲鱼消息功能自上线以来,核心逻辑都是自己实现没使用集团现成的消息SDK,随着早起业务疯狂增长开发交替,现在开发接手消息的需求如履薄冰,从而导致消息线上问题不断叠加。着手消息问题治理,最优先需要的是有一个全面的排查手段,能够快速排查定位线上问题。
消息全链路排查建设
在定位舆情问题时,仅仅通过有限的文字描述和截图难以发现问题的本质,甚至是无法确认是端上问题还是服务端问题。举个栗子,某天晚上大家准备下班时,老板抛出一个舆情,用户反馈消息丢失,这时候大家都慌了,服务端、客户端、质量同学大家都聚集在一起定位问题,而定位的唯一途径就是你查你的日志,我查我的日志,查到最后还是在盲猜问题,耗时耗力不精准。
从这件事情来看,要想提升闲鱼消息服务质量,光靠开发优化远远是不够的,还需要基建项目来提升定位问题的消息,于是质量团队和开发团队一起着重闲鱼消息全链路排查的建设。要做消息全链路排查,关键是有全面的消息日志支撑,能够获取到消息的完整轨迹。我们通过将服务端消息节点日志、接口日志、客户端消息状态埋点日志、和行为埋点日志聚合,最大程度还原用户当时的行为和消息途径链路。
日志上报
首先是消息链路的核心场景梳理,针对消息合并、落库、上屏、域环同步、域环更新等容易出现或反映问题的关键节点,会进行排查所需的日志上报。
其次就是日志格式约定,核心是客户端在生成每一条消息时也会给它生成一个messageId,对于服务端推送的营销类消息,messageId则是由服务端生成。消息每经过一个核心节点都只将途经状态加上messageId上报,该id也会透传给服务端上报日志使用,这样messageId串联起了一条消息从客户端发到服务端再到客户端收的完整追踪链路。
最后是上报的方式,最开始的想法是端上接入SLS SDK进行实时上报,但对端上改动成本过大,对稳定性会有一定影响所以放弃了,最终复用了客户端埋点上报路径,后面只需实时清洗埋点日志即可,在不用端上改造的情况下满足了实时日志获取的需求。服务端日志上报则是用现有的SLS上报链路。
需要强调的是,出于隐私和存储成本考虑,日志上报不会带上具体消息内容,只会带上必要的排查所需参数和messageId。
实时日志清洗
进行实时日志清洗,首先订阅了闲鱼的TT分钟级别埋点日志,清洗出消息相关的埋点日志。但是这里面的数据量巨大,一条消息的埋点可能有几十条。所以我们按照messageId、utdid对这些日志进行聚类,将数据的量级降低了几十倍,最后将排查数据写回SLS用于排查链路,将分钟级别统计数据写入TDDL用于监控建设。
用户行为日志
除了聚焦单条消息的生命周期外,问题排查另一个角度是宏观去看用户在端内做了什么行为触发了异常。
通过实时清洗和编排客户端上报来的点击和页面曝光埋点,去了解用户在异常发生前点了哪些按钮,访问了哪些页面,从而分析出异常的可复现路径。同时整合服务端接口调用日志,检查用户异常发生时是否成功请求了服务端接口,请求参数是否正确,异常的错误码是什么。这些有效信息整合,有助于我们去复现和定位具体是什么场景出现,辅助开发更快解决问题。
前台交互
“兵马未动,数据先行”——前面的数据准备让我们能够做到更加精细地排查消息链路中可能存在的问题,那么如何让问题暴露的更加明显、让开发使用的更加方便则是我们的另一个目标。通过观察开发同学在排查消息问题时,一般会根据用户、消息ID、会话ID三个纬度进行,所以对其进行了分类和梳理。
另外为了让使用者在查询的过程中更加直观的观察到消息在链路的各个节点,我们将链路进行了分类:客户端上行、服务端、客户端下行。同时会对异常节点进行显著提醒,让使用者快速发现问题出现在哪一端、哪一个环节。
总结与展望
现在,大家通过闲鱼消息质量平台的链路排查工具,可以清楚查看到消息的完整生命周期,并根据异常用户的行为日志排查问题出现路径,辅助开发快速定位可能在哪个环节出现了问题,而不用人肉翻查多个数据库和日志流进行整合分析,甚至隔天才能拿到数据排查,排查效率提升90%以上。此外该排查模式具备可复用性,比如发布链路排查也在平台接入中。除此之外,消息质量平台在问题发现效率和测试效率上也做了很多事情,比如端上的巡检对账能力、核心指标实时监控、舆情管理还有链路级别测试回归工具等后面再进行详细介绍。还有与自动化和端智能结合,也是我们不断尝试的方向,希望通过我们的保驾护航,闲鱼消息越来越稳。
闲不住?来闲鱼!
PICK ME
闲鱼技术团队通过创新追寻更多价值,不断驱动业务变革。
从闲置生意的老本行,到打造“无忧购”“会玩社区““新线下”,
从出版书籍、峰会发声,到开源专利、海外传播,
闲不住,上闲鱼——技术团队对极致的探索与深耕是我们的底气。
立即加入
1、招客户端/服务端/前端/架构/质量工程师
2、发简历给guicai.gxy@alibaba-inc.com
3、你还可以在头条、知乎、掘金、facebook、twitter找到我们
消息质量平台系列文章|全链路排查篇相关推荐
- 闲鱼玩法平台系列文章——双11实操篇
背景 营销玩法是电商行业进行商品促销和用户增长的重要手段,上一篇中介绍了闲鱼的玩法平台--多啦A梦,本篇将介绍在该系统上承接的玩法.闲鱼作为闲置循环工厂也参与了大促,为了让更多闲置在闲鱼游起来,在商品 ...
- 2009刀片服务器导购系列文章之戴尔篇
--> 作者:小云 自从2000年刀片服务器这一产品形态开始进入市场以来,厂商对这一产品的期望值一直是一浪高过一浪.根据有关评测机构的预测,未来2年刀片服务器市场的增长将保持在60%左右,刀片服 ...
- 关于Webpack详述系列文章 (第四篇)
1. webpack基本概念 Entry:入口,Webpack 执行构建的第一步将从 Entry 开始,可抽象成输入. Module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件.W ...
- MTSC2020 | 手淘AIOPS实战-消息全链路智能监控
MTSC2020中国互联网测试开发大会深圳站,于 2020 年 11 月 20 日至 21 日在深圳宝立方国际酒店召开,为中国质量保证行业奉上一场为期 2 天的技术盛宴,500+ 来自世界各地的测试精 ...
- 注释那些事儿:前端代码质量系列文章(一)
摘要: 好的注释可以提高代码的可读性和可维护性,从而提高代码质量.那么什么是好的注释?如何写出好的注释? "Comment or not comment, that is the quest ...
- Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技
本文是钢哥的Oracle APEX系列文章中的第一篇,完整 Oracle APEX 系列文章如下: - Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技 - ...
- DM 源码阅读系列文章(四)dump/load 全量同步的实现
作者:杨非 本文为 DM 源码阅读系列文章的第四篇,上篇文章 介绍了数据同步处理单元实现的功能,数据同步流程的运行逻辑以及数据同步处理单元的 interface 设计.本篇文章在此基础上展开,详细介绍 ...
- 揭秘!消息管理平台的实现原理
没错,我又给自己挖了个坑. 为什么想写项目相关的文章呢?原因有以下: 当我还没正式开始工作时,我经常会想:"网上的视频项目我是看过了,但真正的商业项目究竟长什么样?会不会很难?"我 ...
- 字节跳动全链路压测(Rhino)的实践
1. 背景 随着公司业务的不断扩张,用户流量在不断提升,研发体系的规模和复杂性也随之增加.线上服务的稳定性也越来越重要,服务性能问题,以及容量问题也越发明显. 因此有必要搭建一个有效压测系统,提供安全 ...
最新文章
- XHTML基础问答-给初学者
- mysql dba系统学习(14)mysql用户管理之一、二
- 自建Kubernetes集群如何使用弹性容器实例ECI
- nginx长连接出现504的解决办法
- 想上云,请评估与思考上云目的
- 使用python pandas dataframe学习数据分析
- PHP函数库06:PHP统计字符串里单词出现次数
- word更新域后图片错误_你还不知道Word中F1~F12键作用?
- 七月老师python_七月在线Python数据分析入门
- c语言iec 103协议程序,IEC103通信流程详解.doc
- Kafka面试题总结
- 服务器系统怎么安全驱动精灵,服务器驱动精灵
- 利用 visitor map (访客地图) 统计网站访客
- vue 仿外卖app-数据mock部分
- 告别“浮云” 享用云计算服务优势
- html项目经验范文,优秀的项目经验怎么写?
- Rosalind Java| Computing GC Content
- linux服务器远程修改mac地址,linux下修改MAC地址问题解决方法
- linux 打印网卡与IP对应列表
- pycharm PEP8规范(python)