阿里云我是程序员Java服务器端编程

一个系统,搞定闲鱼服务端复杂问题告警-定位-快速处理

2019-07-25  本文已影响53人  阿里云云栖号

引言

服务端问题排查(服务稳定性/基础设施异常/业务数据不符合预期等)对于开发而言是家常便饭,问题并不可怕,但是每天都要花大量时间去处理问题会很可怕;另一方面故障的快速解决至关重要。那么目前问题排查最大的障碍是什么呢?我们认为有几个原因导致:

  1. 大量的告警信息。
  2. 链路的复杂性。
  3. 排查过程繁复。
  4. 依赖经验。
    然而实际工作中的排查过程并非无迹可寻,其排查思路和手段是可以沉淀出一套经验模型。

沉淀路径

下面是我的订单列表的简单抽象,其执行过程是先拿到我买到的订单列表。订单列表中又用到了卖家,商品以及店铺信息服务,每个服务又关联着单次请求中提供服务对应的主机信息。


以线上常见的服务超时为例,上图中因为127.123.12.12这台机器出现异常导致商品服务超时,进而导致我的订单列表服务超时。根据日常中排查思路可以总结出以下分析范式:


上面这种分析范式看起来很简单清晰,但是它首先面临着以下问题

系统架构

我们认为这样一套问题自动定位的系统一定要满足4个目标,这同时也是整个系统的难点所在。

围绕着这4大目标,我们实现了上面这样一套完整的定位系统,实现了从告警->定位->快速处理这样一套完整闭环。自下而上划分为4个模块,下面讲一下每个模块解决的问题以及其难点。

数据采集

数据采集模块主要负责埋点数据的采集与上报,需要解决两个问题:

实时计算

实时计算以数据采集的输出作为输入,负责对数据进行一轮预处理,包括链路数据的关联(请求都有唯一标识,按照标识group by),数据清洗(只选取需要的数据)以及事件通知。

实时分析

当收到事件通知后根据实时计算产出的有效数据进行自动化的分析,输出问题的发生路径图。需要解决:

聚合&展示

按照时间窗口对问题发生路径进行实时聚合,还原问题发生时的现场。将监控,告警和诊断链路进行了互通,最大化的缩短从问题发现到结果展现的操作路径。

效果

系统上线以来经受住了实践的检验,故障以及日常问题的定位效率得到显著提升,并获得了稳定性的结果。将日常问题/故障定位时间从10分钟缩短到5s以内,以下是随机选取的两个真实case。

案例1:闲鱼发布受影响

监控系统发现商品发布接口成功率下跌发出来告警信息,点击告警诊断直接跳转到问题现场,发现是因为安全某个服务错误率飙升导致,整个过程不到5s。


案例2: 首页因为单机问题受到影响

闲鱼首页因为单机gc问题抖动触发大量告警信息,秒级给出问题发生路径。根据诊断路径显示搜索单机出现大量异常。


总结

目前整个系统主要聚焦服务稳定性相关的问题定位,仍然有许多场景有待覆盖,信息有待补全,措施有待执行,定位只是其中的一环。最终目的一定是建设问题定位,隔离,降级,与快速恢复这样一个完整闭环。要想实现这样一个完整闭环,离不开底层各个子系统的数据建设,核心在于两点一面的建设:



本文作者:闲鱼技术-吴白

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

上一篇下一篇

猜你喜欢

热点阅读