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

服务端问题排查对开发而言是家常便饭,问题并不可怕但要花大量时间去处理;另一方面故障的快速解决至关重要。

目前问题排查最大的障碍是什么呢?我们认为有以下几个原因:

  • 大量的告警信息。
  • 链路的复杂性。
  • 排查过程繁复。
  • 依赖经验。

实际工作中的排查思路并非无迹可寻,排查思路和手段可以沉淀出一套经验模型。

沉淀路径

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

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

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

  • 如何准确界定超时/异常。
  • 上下游调用链路如何生成。
  • 自己和下游,如何确定谁的问题(超时&异常)。
  • 下游异常时,如何区分超时/线程池满/未知异常。

以上问题本质上是底层数据埋点问题,幸运的是阿里集团完备的数据建设使得这些问题基本都能找到很好的解决方案。有了底层数据支撑再配合上层抽象出来的这样一套分析模型,设计并实现一套完全自动化问题定位系统是完全有可能的。

系统架构

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

  • 准(定位准确率不亚于开发人员)
  • 快(定位结果早于监控发现)
  • 简单(从问题发现到定位结果之间的最短链路)
  • 自动化

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

数据采集

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

  • 海量数据。线上的埋点数据每时每刻都在产生,其数据量可达到 80G/ 分钟。
  • 采集时延。快作为整个系统追求的一大目标,数据采集需要满足低时延。
  • 可扩展指标。随着模型的不断演进完善,需要实现灵活的增加采集指标( cpu/gc/gc 耗时/线程数等)。

采用 SLS+ 自定义插件库来实现线上流量埋点数据的采集与上报。SLS 是阿里云研发针对日志类数据的一站式服务,其生命周期管理( TTL )以及极低的存储成本可以很好的解决海量数据带来的成本问题。

实时计算

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

  • 计算延时。从拿到数据到最后过滤输出,要尽可能压缩计算延时来提升整个系统的时效性。
  • 多数据源协同。数据来源于底层不同的数据源,他们之前对应着不同的到达时间,需要解决数据等待问题。
  • 数据清洗。需要有一定的策略来进行一轮数据清洗,过滤出真正有效的数据,来减少计算量以及后续的存储成本。
  • 存储成本。虽然经过了一轮数据清洗,但是随着累积数据量还是会线性增长。

实时分析

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

  • 实时拓扑 vs. 离线拓扑。实时拓扑对埋点数据有要求,需要能够实时还原调用链路,但依赖采集数据的完整度。离线拓扑离线生成,不依赖采集数据的完整度,但不能准确反应当前拓扑。最后选择了实时还原拓扑方式保证准确率。
  • 数据丢失。虽然实时计算中有解决数据协同等待的问题,但无法彻底解决数据的丢失问题(数据延时过大/埋点数据丢失),延时以及丢失数据需要采取不同的处理策略。
  • 分析准确率。影响准确率的因素很多,主要包括数据完整度以及分析模型的完备度。

聚合展示

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

  • 实时聚合 vs. 查询时聚合。查询时聚合性能差但是很灵活(可以根据不同的条件聚合数据),反之实时聚合牺牲了灵活性来保证查询性能。这里我们选择保证查询性能。
  • 并发问题。采用实时聚合首先要解决的是并发写(线上集群对同一个接口的聚合结果进行修改)。最后采取将图拆解成原子 key,利用 redies 的线程安全特性保证线上集群的写并发问题。
  • 存储成本 vs. 聚合性能。为了解决并发问题,我们利用redis的线程安全特性来解决,但带来的一个问题就是成本问题。分析下来会发现聚合操作一般只会跨越 2~5 个窗口,超过之后聚合结果就会稳定下来。所以可以考虑将聚合结果持久化。

效果

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

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

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

总结

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

  • 底层数据建设。完备的数据支持一定是整个系统能够发挥价值的前提,虽然现阶段很多系统在产出这方面的数据,但仍然远远不够。
  • 完备的事件抽象。数据不仅仅局限于请求产生的埋点数据,其范围应该更为广泛(应用发布,线上变更,流量波动等),任意可能对线上造成影响的操作都应该可以抽象成一个事件。
  • 知识图谱的建立。仅仅有完备的事件并没有多大的价值,真正的价值在于把这些事件关联起来,在问题/故障发生时第一时间还原现场,快速定位问题。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bespin Global荣膺“Gartner2020全球公有云基础设施管理服务提供商魔力象限领导者”

近日,国际权威调研机构Gartner发布了《2020全球公有云基础设施管理服务提供商魔力象限》报告,Bespin Global(贝斯平)被评为行业领导者,成为东亚唯一连续四年入选Gartner云MSP魔力象限以及东亚唯一进入领导者象限的科技…

Gartner:2019年公有云服务六大趋势

作系:Gartner杰出研究副总裁Ed Anderson、Gartner研究副总裁David Ackerman、Gartner研究副总裁Sid Nag、Gartner高级研究总监吴涛 在2017年至2018年间,云服务市场发生了巨大的变化。企业机构从低风险地尝试使用云转向全面、大规模地使用云。云项目已进入…

大促背后的流量利器|手淘push升级 比你更懂你

导读:过去的很长一段时间内,由于电商的强运营特性,手淘 App 的 Push 消息大部分时候是作为一个活动通知的通道,对重要活动进行通投引流。然而在竞争环境更加激烈和用户渗透日趋饱和的今天,具备更加精细化的用户运营手段…

京东发布“下一代智能协同开放平台”战略 助力政企数字化转型

5月7日,“下一代智能协同开放平台产业战略发布会”(以下简称“发布会”)在京召开。北京市海淀区委常委、常务副区长李俊杰,京东集团技术委员会主席、京东智联云总裁周伯文博士,以及中关村管委会等政府部门,金山、金蝶、致远互联、今目标、网易有道、稻壳互联等企业代表出席。为…

一行命令导致的数据丢失,阿里工程师是如何恢复的?

阿里妹导读:数据安全性被提到了前所未有的高度,数据保护的话题越来越成为敏感。因为,业务的中断时间对用户造成的影响愈来愈大。阿里技术专家凡钧从数据安全的形势与发展,面临的挑战,问题的定义,传统的解决…

ElasticSearch docker安装

文章目录五、安装ElasticSearch5.1. 修改服务器配置5.2. 创建容器并启动 ES5.3. 查看启动日志5.4. 进入镜像5.5. 修改cluster-name5.6. 安装中文分词插件5.7. 退出并重启镜像5.8. 查看启动日志五、安装ElasticSearch docker 安装 Elasticsearch6.4.3版本 及中文插件安装。 系统…

阿里云物联网平台远程配置功能JAVA 示例参考

概述 很多场景下,开发者需要更新设备的配置信息,包括设备的系统参数、网络参数、本地策略等。通常情况下,是通过固件升级的方式更新设备的配置信息。但是,这将加大固件版本的维护工作,并且需要设备中断运行以完成更新。…

Redis 6.0 新特性:多线程连环 13 问!

来源 | 码大叔责编 | Carol封图 | CSDN付费下载自视觉中国支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不…

支付宝这些程序员要逆天,滑板、画漫画、写科幻小说、航拍,玩得太溜

他一边用代码改变世界,一边用科幻小说去创造未来。 他一边用编程书写传奇,一边用画笔记录生活。 他一边用程序驱动科技,一边用滑板挥洒汗水。 他一边用产品推动技术,一边用航拍记录大地。 他们是四位来自蚂蚁金服的普通程序员&…

技术人最不该忽视可视化数据分析!

阿里妹导读:在这个“人人都是数据分析师”的时代,阿里的同学几乎都在参与数据的采集、加工与消费。数据可视化作为连接“加工——消费”的重要一环,其质量至关重要。优秀的可视化能促成卓越洞见,糟糕的内容则让所有的努力失去意义…

ETL异构数据源Datax_部署前置环境_01

文章目录一、概述1. 是什么&#xff1f;2. 开源地址二、简介2.1. 设计架构2.2. 框架结构三、检查环境3.1. 检验是否安装JDK(1.8以上&#xff0c;推荐1.8)3.2. 检验是否安装python环境&#xff0c;要求2.6<版本3.3. maven环境四、JDK环境安装4.1. rpm方式安装4.2. gz方式安装…

AI 玩王者荣耀狂上分!打了六局,心态崩了

你造吗&#xff1f;人工智能继进军围棋之后&#xff0c;又来我“王者峡谷”了。腾讯AI LAB与王者荣耀合作开发的AI【绝悟】&#xff0c;在最高规格赛事中获胜&#xff0c;宣布已达到“电竞职业水平”&#xff01;据称&#xff1a;【绝悟】一天的训练强度&#xff0c;高达人类44…

MFC 工具栏

目录 工具栏概述 工具栏的使用 添加工具栏资源 创建&#xff0c;加载工具栏 设置工具栏停靠 工具栏概述 CToolBarCtrl-父类CWnd&#xff0c;封装了关于工具栏控件的各种操作。 CToolBar一父类CControlBar&#xff0c;封装了关于工具栏的操作&#xff0c;以及和框架窗口的…

在SLS中快速实现异常巡检

一、相关算法研究 1.1 常见的开源算法 Yahoo&#xff1a;EGADSFaceBook&#xff1a;ProphetBaidu&#xff1a;OpprenticeTwitter&#xff1a;Anomaly DetectionRedhat&#xff1a;hawkularAliTsinghua&#xff1a;DonutTencent&#xff1a;MetisNumenta&#xff1a;HTMCMU&…

可能是你见过最完善的微前端解决方案

Techniques, strategies and recipes for building a modern web app with multiple teams using different JavaScript frameworks.—— Micro Frontends 前言 TL;DR 想跳过技术细节直接看怎么实践的同学可以拖到文章底部&#xff0c;直接看最后一节。 目前社区有很多关于微…

金山云纳斯达克敲钟上市 不负时代的机遇

5月8日&#xff0c;中国知名的独立云服务商金山云正式在美国纳斯达克挂牌交易&#xff0c;股票代码 “KC”。 金山云依托广泛的云基础架构&#xff0c;通过提供先进可信赖的云服务&#xff0c;为各行业定制了结构完善的解决方案&#xff0c;在中国云计算市场取得了领先地位&am…

前沿 | VLDB论文解读:阿里云超大规模实时分析型数据库AnalyticDB

前言 一年一度的数据库领域顶级会议VLDB 2019于美国当地时间8月26日-8月30日在洛杉矶召开。在本届大会上&#xff0c;阿里云数据库产品团队多篇论文入选Research Track和Industrial Track。 本文将对入围Industrial Track的论文《AnalyticDB: Realtime OLAP Database System at…

第一个Java

Hello World 随便创一个文件夹&#xff0c;储存代码 新建一个Java文件 文件后缀名.javaHello.java[注意]系统可能没有显示后缀名&#xff0c;需要手动打开 编写代码 public class Hello{public static void main(String[] args){System.out.print("Hello Wold");…

Teradata天睿公司任命Steve McMillan为总裁兼首席执行官

Teradata天睿公司日前宣布&#xff0c;公司董事会已经任命Steve McMillan担任总裁兼首席执行官以及董事会成员&#xff0c;自2020年6月8日起生效。McMillan先生曾在F5 Networks公司担任全球服务执行副总裁&#xff0c;未来将接任临时总裁兼首席执行官Victor Lund&#xff0c;在…

蚂蚁金服在云原生架构下的可观察性的探索和实践

本文根据 8 月 11 日 SOFA Meetup#3 广州站 《蚂蚁金服在云原生架构下的可观察性的探索和实践》主题分享整理。现场回顾视频以及 PPT 查看地址见文末链接。 前言 随着应用架构往云原生的方向发展&#xff0c;传统监控技术已经不能满足云原生时代运维的需求&#xff0c;因此&am…