AIOps探索 | 应急处置中排障的降本增效方法探索

news2025/2/24 8:38:18

原作者:擎创科技 资深产品专家 布博士

前言

在事件管理及应急场景的场景下,一般会造成业务服务和技术服务故障(如应用系统、微服务架构等不同的技术组件)。为了实现对业务的影响分析、查看技术组件的相互依赖关系以及进行根因排查分析,通常需要构建调用链路系统和cmdb等来可视化业务层的交易链路和应用系统各技术组件之间的拓扑关系。然而,根据我近5年接触的项目经验,这两套系统的构建存在以下缺陷:

  • 调用链路系统:需要对不同厂商和不同技术栈(如cs架构、bs架构等)的系统进行不同程度的改动,成本较高且项目周期较长。在出现告警后,相应的运维工具系统之间需要进行大量的集成工作,短期内很难看到效果。

  • cmdb系统:尤其是最近几年,一些AIOPS厂商过度炒作了cmdb的重要性,似乎没有cmdb就无法进行基于拓扑的排障分析。然而,在现实案例中,我们发现为了维护一套高标准的cmdb系统,企业需要进行至少一年甚至几年的治理过程,包括解决数据质量问题、提高数据更新效率、降低维护成本以及解决数据缺失等问题。维护成本高昂且由于cmdb需要应对多种应用场景,不可能面面俱到,导致在实施过程中最终产出的结果更像是一个“四不像”。

在事件管理及应急场景下有没有一种低成本且高效的方法可以快速地构建排障拓扑、实现业务层和技术组件层的链动分析,加速排障过程?答案是有的,本文将详细介绍一下*服务所有权模型*,主要包括如下内容:

  1. 服务所有权模型是什么?

  2. 模型构建完成的样子及能力介绍

  3. 如何逐步落地模型?

  4. 推荐的模型存储及计算方案

  5. 总结

服务所有权模型是什么?

我服务过许多国内大型的金融机构,他们在出现事件或应急的场景下试图研发各种工具以搞清楚当前正在发生什么事件、事件的告警对象依赖什么、谁在对告警对象提供服务、哪些业务受到影响?

想象一下在故障的场景下,您可以清楚地看到您所要解决的事件对业务、对依赖的技术组件和客户的影响,这被称为服务所有权模型。这种模型使开发、测试、运维人员能够更贴近客户、业务和要交付的价值。

通常把服务所有权模型分为两类:

业务服务

是直接向用户提供价值的服务,如信用卡、网上商城等,这些是客户直接接触的,也是企业向自己的客户提供的服务目录,通常最终客户并不会关注你提供的信用卡服务是运行在x86的服务器上,还是oracle的数据库上,他们只关注该服务提供的业务价值是什么、服务标准及规范是什么?当客户不能刷卡时,直接电话callcenter即可。

技术服务

是完成对业务服务的技术支撑平台,如某东提供网上商城,用户只需要在浏览器或手机端浏览商品并下单即可,但是他后台需要很多的技术组件为其提供业务服务,如移动端ios版本、移动端安卓版、csn服务、均衡负载、tomcat中间件等。

通过构建相互之间的依赖关系,可以将企业内部众多的业务服务和技术服务串到一起,形成一张巨大的企业服务网络拓扑,而其中的每一个节点即为一种服务,每一种服务都由独立的团队对其进行开发、测试、运维,保障服务的连续性。

模型构建完成的样子及能力介绍

图片

上图所示,是一个典型的电子商务平台的服务所有权模型图,事件或应急场景下,能够实现以下能力:

将业务链路层和技术组件层告警进行有效关联

通过该模型提供的管理能力,在不构建cmdb和调用链路分析及埋点的情况下,将业务服务相互之间的相互调用关系、业务服务同技术服务之间的依赖关系清晰地刻画出来,从而在事件和应急场景下对告警进行有效关联。

业务影响分析和技术组件影响分析

通过服务所有权模型,可以清晰地了解业务服务和技术服务之间的依赖关系,帮助分析事件对业务和技术组件的影响。如上图,可以清晰看到最底层的技术服务组件“mysql - 库存”出现问题后导致直接依赖他的技术组件”库存api”和“redis - 缓存“出现故障,并最终通过”订单api“服务,影响到了三个业务服务,分别是”结算“、”移动商城“、”网上商城“。

促进团队协作

服务所有权模型使开发、测试和运维人员能够更贴近客户、业务和交付的价值。它帮助团队更好地理解服务的所有权和责任,并加强团队之间的协作和沟通。

加速排障过程

服务所有权模型提供了一个全方位的视角,使团队能够总览整个故障拓扑,它消除了孤立环境和沟通差距,提高了组织快速响应客户需求的能力。

可视化根因分析

由于可以总览整个故障拓扑,使运维团队在分析根因时不再是一条条独立的告警,而是可以从总览拓扑的视角查看整个故障的完整上下文,协助运维人员进行可视化根因分析。

其他更多能力……

如何逐步落地模型?

构建原则

在构建服务所有权模型之前,首先要要明确以下原则:

  1. 建议在管理层要达成共识,从实际应用的视角来构建服务所有权模型,而不需要等待调用链和cmdb全部构建完善再应用。

  2. 鼓励运维工程师在变更完成之后自行更新服务所有权模型,边应用边治理。

  3. 每个服务所有者构建自己的服务模型。

  4. 每个服务所有者必须清楚的知道自己的服务所支持和依赖的服务是谁,而无需知道整个依赖关系的全貌,如库存API的服务所有者必须知道自己所依赖的“mysql - 库存”和“Redis - 缓存“服务,支持”订单API“服务,但不必知道谁支撑订单API和依赖谁。

  5. 每个服务所有者都构建完成自己的上下游依赖关系之后,则会构建完成整个服务所有权模型。

  6. 针对有错或缺失的部分,可以边应用边调整。

  7. 无须一次性完美构建,持续优化即可。

构建过程

第1步:明确业务服务和技术服务以及他们之间的依赖关系

首先要定义清晰的业务服务和技术服务边界,以及自己所运维的技术服务支持哪些业务服务。

  • 业务服务:直接面向最终客户的服务,如,网上购物商城服务,这是直接面向最终消费者的。

  • 技术服务:是为支持某项业务服务而搭建的应用系统或微服务(现代的微服务架构),如web服务向用户提供了商品目录浏览、下单等能力,基于tomcat的应用服务为web服务提供了业务处理的能力,而数据库服务为应用服务提供了数据持久会存储的能力。

  • 依赖关系:是指服务(包括业务服务和技术技术)之间的相互依赖关系,通过依赖关系的构建可以形成完整的服务所有权模型。

通常建议服务所有者先在纸上构建一个草图,明确自己所管理的服务边界以及所依赖和支持的服务有哪些,然后再着手构建服务所有权模型。

第2步:确认服务所有权

图片

如上图所示,确保每一个服务都有具体的管理团队为其提供开发、运维,这样当发生事件或应急时可以有将的将告警路由到不同的团队进行处理,并可以促进团队之间的相互协作。

传统的应用系统是以应用为视角来进行管理的,为了更好地了解应用的架构,以及出现故障时,可以有效地构建应用系统的可视化架构拓扑,建议对整个应用系统进行架构上的拆分,建议如下:

  • 应用系统所支持的业务,拆分为业务服务,这样当系统或相应的组件发生问题时,可以清晰的感知对潜在业务的影响。

  • 构成应用系统的各组件,拆分为技术服务,如一套应用系统包括web集群、应用集群、数据库集群、数据库依赖存储等,可以拆分为web服务、应用服务、数据库服务、存储服务,这样可以有效的构建系统的可视化架构拓扑,而无须依赖cmdb完善之后才能构建。

第3步:构建服务拓扑以及依赖关系

图片

针对第 1、2 步中手绘的服务拓扑关系,可以着手构建服务,如上图所示:为一个业务服务的创建过各,需要输入业务服务的基本信息,然后再从已有的服务列表中选择支持该业务服务的技术服务或业务服务。

服务配置完成之后,后续也可以对服务进行依赖关系的修改,如下图所示,可以对库存API所依赖的服务和所支撑的服务进行修改:

图片

第4步:告警绑定服务

要在服务拓扑上清晰的展示每个服务的状态以及是否发生故障,则需要将告警绑定到服务上,实践中建议有两种绑定方式:

  • 方式 1 - 对告警进行服务规则路由:针对这种方式在告警进入系统时要么通过丰富策略丰富对应的服务信息,要么根据其它的辅助字段,如所属的业务系统、告警对象类型(db主机、应用服务器等)关键字段,建立基于规则的路由策略。

  • 方式2 - 事前构建服务依赖资源表:当服务创建时,运维人员清晰地知道该服务所使用的资源列表,如上图所示的电子商务平台中”redis-缓存“集群,使用了192.168.1.1和192.168.1.2两个主机,这样当告警对象名称为192.168.1.1和192.168.1.2时,会自动路由到该服务上。

建议使用方式2,只是对系统进行扩缩容时,运维管理团队要主动维护这些变更内容,则后续的告警才会进行有效的服务绑定。

第5步:持续优化和改进

服务所有权模型及拓扑依赖关系的构建不是一次性的,是一个长期治理和更正的过程,在使用的过程中会越来越趋近完善。使用的人越多,从服务所有权模型中所得到的回馈也就越多。

更重要的是他仅仅通过简单管理的手段即可完美替代调用链、cmdb两套系统的价值。

推荐的模型存储及计算方案

建议用关系数据库和图数据库两种存储方案,关系数据库做服务节点、节点之间关系的存储,而进行可视化展示、根因分析推荐、相似故障识别算法、服务节点链接关系推荐、影响分析等建议采用图数据库来完成,因为其提供了比关系数据库更好的图查找、遍历、计算的方法,主要包括:

  • 图搜索算法:包括广度优先搜索(BFS)和深度优先搜索(DFS),用于在图中查找特定的节点或路径。

  • 最短路径算法:例如Dijkstra算法和Floyd-Warshall算法,用于找到两个节点之间的最短路径。

  • 最小生成树算法:例如Prim算法和Kruskal算法,用于找到连接所有节点的最小生成树。

  • 图聚类算法:如K-means算法和谱聚类算法,用于将图中的节点划分为不同的聚类。

  • PageRank算法:用于评估网页的重要性,并根据链接关系进行排名。

  • 社区发现算法:例如Louvain算法和标签传播算法,用于识别图中的社区结构。

  • 图神经网络:一种基于深度学习的方法,用于处理图数据的节点分类、链接预测等问题。

请注意,这只是一些常见的图计算方法,还有许多其他方法和算法可用于处理不同类型的图数据。

总结

本文介绍了如何在事件及应急场景下低成本且高效地构建排障拓扑,加速排障过程。

通过服务所有权模型,可以清晰地了解业务服务和技术服务之间的依赖关系,促进团队协作,加速排障过程,并实现可视化根因分析。文章提供了一步步简单的落地服务所有权模型的构建过程,包括明确业务服务和技术服务之间的依赖关系、确认服务所有权、构建服务拓扑以及依赖关系、告警绑定服务,并强调持续优化和改进的重要性。通过构建服务所有权模型,可以更好地管理和理解服务的架构,提高团队的协作效率和快速响应能力。

#智能运维# #应急处置#

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

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

相关文章

全国各省全社会就业人员数,Shp、excel格式,1978-2022年数据

基本信息. 数据名称: 全国各省全社会就业人员数 数据格式: Shp、excel 数据几何类型: 面 数据时间:1978-2022年 数据坐标系: WGS84 数据来源:网络公开数据 数据字段: 序号字段名称字段说明1jy19781978年就业人数(万人…

【JS逆向学习】1号店

逆向目标 接口:https://passport.yhd.com/publicPassport/login.do加密参数: credentials.usernamecredentials.password 逆向过程 老规矩,输入用户名和密码,点击登录,然后过滤 XHR 请求 进入 Initiator 随便找个…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件,写入 module.exports {publicPath: ./, }

每日一记:一个windows的bat脚本工具集

最近在工作上遇到要校验文件的问题,例如,下载了一个文件之后,通过查看文件的md5来校验文件是否完整,这个动作在linux上很简单,但在windows上也不难,可以通过 certutil 命令实现,该命令通常可用于…

hadoop-common: CMake failed with error code 1

问题 在编译hadoop源码时遇到如下错误 hadoop-common: CMake failed with error code 1 看了这个错误表示一脸懵逼 排查 在mvn 的命令中增加 -X 和 -e mvn clean package -e -X -Pdist,native -DskipTests -Dmaven.javadoc.skip -Dopenssl.prefix/usr/local/bin/openssl 在…

带你解析git的基础功能(二)

文章目录 一.前言二.什么是git的分支管理三.git的分支管理的相关操作3.1 创建分支3.2 切换分支3.3 合并分支 和合并冲突3.4 删除分支 四.分支管理策略第一种分支策略第二种分支策略 总结 一.前言 掌握 Git 分⽀管理,从分⽀创建,切换,合并&am…

合适的索引顺序

一.前言 正确的顺序依赖于使用索引的查询,并且同时需要考虑如何更好地满足排序和分组的需要。因为哈希或者其他类型的索引并不会像 B-Tree索引一样顺序存储数据,所以这里只针对B-Tree展开讨论。 二.合适的索引顺序 1. 概念 对于如何选择索引顺序有一个经验法则: 将选择性最…

vue3 + JS + vant 搭建移动端H5项目(完整项目)

vue3 JS vant 搭建移动端H5项目(完整项目) 前言1、移动端UI框架2、搭建步骤3、config.js 配置4、一键发布到服务器iis或者nginx代理5、vue3JSVant 移动端H5项目预览总结: 前言 要成功,先发疯,头脑简单往前冲&#x…

民营经济迎来新发展,创维汽车创始人黄宏生谈创业之道

2024年1月15日,上海高金金融研究院民营经济研究中心高净值研究院年度大咖论坛正式召开,多位来自不同行业的优秀民营企业家在本次论坛上分享企业的创新与发展之道。创维集团、创维汽车创始人黄宏生先生作为本次论坛的首位分享嘉宾,为其他奋斗创…

去TikTok淘金:让一部分人先富起来

“Oh My Lady Gaga!” 一名叫杰西卡的主播在自己的TikTok直播间喊出一句话。 这跟李佳琦那句标志性的「偶买噶」有着异曲同工之妙——瞬间激起粉丝们的购买欲。 杰西卡卖的是各种各样的转运宝石和水晶,她的TikTok账号 dh_crystal_service a已经积累了5…

vue.js环境在window和linux安装

nodei官网:https://nodejs.org/en/download/ 一.windows环境下安装vue 1:node安装 在node.js的官网上下载node的安装包,下载下来之间安装即可,在命令行输入 npm -vnode -v 如下表示安装成功 2:cnpm安装 npm inst…

Kafka 集群部署

目录 1、环境准备 2、搭建ZooKeeper集群 配置文件 节点标记 环境变量 启动集群 数据同步测试 故障测试 3、搭建 Kafka 集群 配置文件 环境变量 配置其他机器 启动服务 4、集群测试 创建 Topic 显示 Topic 配置 创建 Producer 创建consumer 删除Topic 查看Z…

【特征工程】分类变量:BinaryEncoder二进制编码方法详解

Binary Encoding:二进制编码方法详解 Binary Encoding是将每个整数表示为二进制数,然后按位拆分为多个二进制变量。这种方法旨在减少维度,同时避免了One-Hot Encoding的高维稀疏问题。 Binary encoding for categorical variables, similar …

bash shell基础命令(一)

1.shell启动 shell提供了对Linux系统的交互式访问,通常在用户登录终端时启动。系统启动的shell程序取决于用户账户的配置。 /etc/passwd/文件包含了所有用户的基本信息配置, $ cat /etc/passwd root:x:0:0:root:/root:/bin/bash ...例如上述root账户信…

php反序列化漏洞基础

一、序列化 serialize(): 序列化是将对象或类转换为字符串的过程,以便在程序运行过程中对其进行持久化存储或传输的操作。在PHP中,序列化主要用于将类对象或数组转换成字节流的形式,以便于存储在磁盘或传输到其他系统。 通过序列化,可以将对象或类转换成一串字符串,然后可…

FFmpeg之SWScale

文章目录 一、概述二、函数调用结构图三、Libswscale处理数据流程四、重要结构体4.1、SwsContext4.2、SwsFilter 五、重要函数5.1、sws_getContext5.1.1、sws_alloc_context5.1.2、sws_init_context 5.2、sws_scale5.2.1、SwsContext中的swscale()5.2.2、check_image_pointers5…

外汇天眼:外汇交易无法出金?看这篇能提高维权成功率!

天眼君经常分享一些外汇维权成功的案例,但是我们都知道有些投资者在维权之路上并不是一帆风顺的,尤其是面对一些外汇资金盘或已经跑路的黑平台。在这种情况下,受害者需要紧握法律武器,以捍卫自己的权益,维护合法权利。…

AMP“双系统”加持,飞凌嵌入式RK3568核心板强实时性再升级

如果要选出飞凌嵌入式最热门的几款产品,FET3568-C系列核心板一定榜上有名。这款高性价比的全能型核心板上市两年来已赢得了数千家客户的青睐。飞凌嵌入式也在不断对它进行升级——从“配置新增”到“100%国产化认证”再到“新系统适配”,以满足更多行业客…

ubuntu设置每天定时关机

ubuntu设置每天定时关机 终端输入命令: sudo crontab -e输入密码,回车。 我这里使用nano作为编辑器,你可以选择vim。 在末尾输入以下命令: 59 23 * * * sudo -u root shutdown now设置:每天23:59分,电脑…

防微博 java web源代码

以下是我的防微博代码 源代码链接https://pan.baidu.com 提取码:5555 注意将这里的数据库用户名和数据库密码进行合适的修改。 关注并回复“防微博系统数据库”即可获取数据库。