小研究 - 微服务系统服务依赖发现技术综述(二)

微服务架构得到了广泛的部署与应用, 提升了软件系统开发的效率, 降低了系统更新与维护的成本, 提高了系统的可扩展性. 但微服务变更频繁、异构融合等特点使得微服务故障频发、其故障传播快且影响大, 同时微服务间复杂的调用依赖关系或逻辑依赖关系又使得其故障难以被及时、准确地定位与诊断, 对微服务架构系统的智能运维提出了挑战. 服务依赖发现技术从系统运行时数据中识别并推断服务之间的调用依赖关系或逻辑依赖关系, 构建服务依赖关系图, 有助于在系统运行时及时、精准地发现与定位故障并诊断根因, 也有利于如资源调度、变更管理等智能运维需求. 首先就微服务系统中服务依赖发现问题进行分析, 其次, 从基于监控数据、系统日志数据、追踪数据等 3 类运行时数据的角度总结分析了服务依赖发现技术的技术现状; 然后, 以基于服务依赖关系图的故障根因定位、资源调度与变更管理等为例, 讨论了服务依赖发现技术应用于智能运维的相关研究. 最后, 对服务依赖发现技术如何准确地发现调用依赖关系和逻辑依赖关系, 如何利用服务依赖关系图进行变更治理进行了探讨并对未来的研究方向进行了展望.

目录

3 服务依赖图的关键应用

3.1 基于服务依赖图的故障根因定位

3.2 基于服务依赖图的资源调度

3.3 基于服务依赖图的变更治理

4 工程实践应用

5 服务依赖发现技术展望

6 结束语


3 服务依赖图的关键应用

服务依赖关系图对于提高微服务架构软件系统的运维效率具有重要意义, 能够帮助开发与运维人员高效、精准地发现与定位系统中的故障并进行根因分析, 制定高效的资源调度策略以保证微服务架构系统的端到端 SLA (service level agreement), 以及用于包括故障预防、部署规划和异常检测等在内的变更治理.本节重点介绍基于服务依赖关系图的故障根因定位、资源调度和变更治理等研究工作.

3.1 基于服务依赖图的故障根因定位

随着微服务的发展, 服务间存在复杂的依赖关系, 一个请求往往会引起不同节点上若干服务的大量复杂的互操作. 同时, 这种复杂的依赖关系带来了故障的蔓延性和传播性, 单个服务的故障会在系统中迅速传播. 当某服务出现异常, 可能会级联地导致依赖该服务的其他服务的行为异常, 使得大量的服务失效. 这种跨节点、跨服务的故障传播会大大增加故障根因定位的难度, 降低故障根因定位的效率. 通过构建服务之间的依赖关系图, 在某个服务发生故障时, 可以快速精准地定位故障根因的位置并判断受影响的下游服务. 根据故障根因定位的方法不同, 基于服务依赖关系图的故障根因定位可以分为基于可视化、基于图搜索和基于随机游走方法.

服务依赖关系图已在故障根因定位领域得到了大量应用, 服务依赖关系图对服务之间的依赖关系进行刻画, 这种依赖关系反映了服务之间的故障传播, 从而有助于运维人员进行故障根因定位. 基于服务依赖关系图的故障根因定位首先通过指标、系统日志或追踪数据构造服务依赖关系图, 然后当异常发生时, 从服务依赖关系图中的异常节点出发, 通过图搜索、随机游走等算法得到候选故障根因, 然后通过异常分数、与异常节点的相关性或被访问次数等方式对候选故障根因进行排序. 相信未来会有更多研究工作提出结合服务依赖关系图的故障根因定位方法. 

3.2 基于服务依赖图的资源调度

基于服务依赖关系图的资源调度可以保证整个服务的 SLA 要求. 文献 [66] 提出一种基于机器学习的微服务资源管理框架. 该框架首先构造用于预测服务端到端延迟和 QoS 违反概率的机器学习模型, 然后使用该模型对资源分配进行预测, 在满足 QoS 的同时最大化资源效率. 文献指出资源调度需要考虑微服务之间的依赖性, 否则将导致低效的资源分配, 并且不一定有助于应对负载变化和保证服务性能. 因此, 该工作基于延迟从后端服务传播到前端服务的假设, 利用服务依赖关系图优先对后端微服务进行资源调度, 从而避免前端微服务不必要的资源调度. 从服务依赖关系图上识别关键路径, 并定位可能违反 SLA 的关键微服务实例, 基于关键微服务实例上的资源利用率、性能指标和工作负载特点, 通过强化学习对资源做出扩容或缩容的决策. 同样地, 基于服务依赖图, 提出一种基于梯度下降的资源调度算法, 则使用分层排队网络对微服务的性能建模, 通过遗传算法求解最优资源调度策略.

在资源调度领域, 服务依赖图精准刻画了服务/虚拟机之间的依赖关系, 有助于准确地分析服务性能以保证服务端到端 SLA.

3.3 基于服务依赖图的变更治理

在变更故障预防方面, 文献基于服务依赖对变更风险进行评估. 首先, 从网络依赖、组件调用等数据构造故障图, 故障图描述了从底层路由器、交换机等网络设备到上层服务的故障传播. 然后, 基于变更通常只会影响小部分服务的假设, 提出一种增量评估算法, 该算法复用已有的评估结果, 将变更风险评估问题转换为布尔可满足性 (SAT) 问题, 使用 SAT 求解器对差异故障图进行分析, 从而避免重新分析整个故障图. 最后, 如果待变更的故障图不满足可靠性目标, 则会根据提供的规则生成一组满足该目标的改进方案.

在变更治理领域, 服务依赖图主要应用于变更影响面的分析, 相信未来会有更多研究工作将服务依赖图应用于变更治理的其他方向. 

4 工程实践应用

如前文所述, 微服务系统依赖发现技术可分为基于监控数据的依赖发现, 基于系统日志的依赖发现和基于追踪数据的依赖发现. 目前产业界微服务依赖发现技术往往与数据采集和分析工具紧耦合, 通常作为其中的一个关键功能模块. 日志数据的采集和分析工具包括 Filebeat、Logstash、Flume 等开源工具. 其中, 以 ELK(Elasticsearch、Logstash 和 Kibana) 为代表的开源软件生态是业界主流的日志采集存储与分析的技术架构.此类软件在各个目标节点安装 agent 组件, 读取不同格式的日志数据, 并将数据发送到指定的位置, 收集微服务系统产生的系统日志数据, 然后基于统一标识、共现概率、日志频率等方法预测服务请求执行逻辑, 进而发现微服务实例和微服务依赖关系. Splunk 是业界日志数据采集和分析的代表性工具, 支持自定义丰富的日志分析方法,能够支持构造微服务发现应用.

5 服务依赖发现技术展望

表 1 从相关工作所使用的运行时数据的类型、期望发现的服务依赖关系、最终发现的是否为服务运行时数据之间的相关性、是否需要修改目标系统的源代码以及是否需要向软件系统中注入故障或者干扰 5 个角度对比分析了现有的服务依赖发现方法.

在拓展服务依赖发现技术的应用领域方面, 将服务依赖发现技术应用于系统变更风险感知和故障根因定位是一个关键发展趋势. 首先, 服务依赖发现技术能够监测整个变更周期中受变更影响的服务的运行情况, 预测变更可能引起的故障, 实现实时变更风险感知, 帮助运维人员动态调整变更灰度策略, 避免和降低变更造成的故障对业务的影响. 其次, 由于微服务间具有复杂的依赖关系, 发生故障的服务与导致故障的部署了变更的根因服务可能完全不同, 导致故障根因定位十分困难. 针对该问题, 在故障发生时, 基于服务依赖图采用图搜索、因果推断等技术, 可以找到与故障高度相关的变更, 辅助运维人员进行故障根因定位, 提升运维效率. 

6 结束语

服务依赖发现技术是准确地刻画微服务架构软件系统中各个微服务之间的复杂的依赖关系的重要手段, 对微服务架构软件系统中的故障定位、性能瓶颈分析、资源调度等一系列运维任务有重要意义, 其研究受到了工业界和学术界的广泛关注.本文从服务依赖发现的基本概念出发, 从 3 类不同的运行时数据的角度总结了已有的服务依赖发研究工作. 通过整理总结已有的服务依赖发现技术及其应用的相关工作, 进一步分析了服务依赖发现技术当前所面临的问题并对未来的研究方向进行了展望, 为相关研究人员开展下一步研究工作做出一些有价值的探索.

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

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

相关文章

AI算法图形化编程加持|OPT(奥普特)智能相机轻松适应各类检测任务

OPT(奥普特)基于SciVision视觉开发包,全新推出多功能一体化智能相机,采用图形化编程设计,操作简单、易用;不仅有上百种视觉检测算法加持,还支持深度学习功能,能轻松应对计数、定位、…

记一次 .NET 某物流API系统 CPU爆高分析

一:背景 1. 讲故事 前段时间有位朋友找到我,说他程序CPU直接被打满了,让我帮忙看下怎么回事,截图如下: 看了下是两个相同的程序,既然被打满了那就抓一个 dump 看看到底咋回事。 二:为什么会打…

新人如何高效写 API 文档

什么是 API 文档? 在深入研究 API 文档之前,让我简要解释一下 API 是什么以及它的基本功能。 API 是应用程序编程接口的首字母缩写。 ​ 编辑 切换为居中 通过 API 将设备连接到数据库 无论你是初学者还是高级开发人员,你都会在软件开发…

Mr. Cappuccino的第53杯咖啡——Mybatis源码分析

Mybatis源码分析 Mybatis源码分析入口1. 读取配置文件总结 2. 解析配置文件核心代码(一)核心代码(二)分析parse()方法分析build()方法 总结 3. 获取SqlSession总结 4. 获取mapper代理对象总结 5. 使用mapper代理对象执行Sql语句二…

MySQL操作命令详解:增删改查

文章目录 一、CRUD1.1 数据库操作1.2 表操作1.2.1 五大约束1.2.2 创建表1.2.3 修改表1.2.3 删除表1.2.4 表数据的增删改查1.2.5 去重方式 二、高级查询2.1 基础查询2.2 条件查询2.3 范围查询2.4 判空查询2.5 模糊查询2.6 分页查询2.7 查询后排序2.8 聚合查询2.9 分组查询2.10 联…

【移动机器人运动规划】02 —— 基于采样的规划算法

文章目录 前言相关代码整理:相关文章: 基本概念概率路线图(Probabilistic Road Map)基本流程预处理阶段查询阶段 优缺点(pros&cons)一些改进算法Lazy collision-checking Rapidly-exploring Random Tree算法伪代码…

数据结构 10-排序4 统计工龄 桶排序/计数排序(C语言)

给定公司名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。 输入格式: 输入首先给出正整数(≤),即员工总人数;随后给出个整数,即每个员工的工龄,范围在[0, 50]。 输出格式: 按工龄的递…

【Jmeter】配置不同业务请求比例,应对综合场景压测

目录 前言 Jmeter5.0新特性 核心改进 其他变化 资料获取方法 前言 Jmeter 5.0这次的核心改进是在许多地方改进了对 Rest 的支持,此外还有调试功能、录制功能的增强、报告的改进等。 我也是因为迁移到了Mac,准备在Mac上安装Jmeter的时候发现它已经…

Keil MDK环境下FreeModebus移植踩坑记录

Keil MDK环境下FreeModebus移植踩坑记录 文章目录 Keil MDK环境下FreeModebus移植踩坑记录armcc (arm compiler v5)环境实验一:实验二: armclang (arm compiler v6)环境实验一:实验二:实验三:实验四 总结 armcc (arm c…

安防视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作

智能视频监控平台EasyCVR能在复杂的网络环境中,将海量设备实现集中统一接入与汇聚管理,实现视频的处理与分发、录像与存储、按需调阅、平台级联等。 TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协…

详聊API接口?淘宝API接口在ERP系统中扮演者什么角色?

什么是API? API全称应用程序编程接口(Application Programming Interface),是一组用于访问某个软件或硬件的协议、规则和工具集合。电商API就是各大电商平台提供给开发者访问平台数据的接口。目前,主流电商平台如淘宝…

软件安全测试和渗透测试的区别在哪?安全测试报告有什么作用?

软件安全测试和渗透测试在软件开发过程中扮演着不同的角色,同时也有不同的特点和目标。了解这些区别对于软件开发和测试人员来说非常重要。本文将介绍软件安全测试和渗透测试的区别,以及安全测试报告在软件开发和测试过程中的作用。 一、 软件安全测试和…

【JavaEE初阶】Servlet(四) Cookie Session

文章目录 1. Cookie && Session1.1 Cookie && Session1.2 Servlet会话管理操作 1. Cookie && Session 1.1 Cookie && Session Cookie是什么? Cookie是浏览器提供的持久化存储数据的机制.Cookie从哪里来? Cookie从服务器返回给浏览器. 服务…

IntelliJ IDEA 2023.2社区版插件汇总

参考插件帝:https://gitee.com/zhengqingya/java-developer-document 突发小技巧:使用插件时要注意插件的版本兼容性,并根据自己的实际需求选择合适的插件。同时,不要过度依赖插件,保持简洁和高效的开发环境才是最重要…

JdbcTemplate

目录 1、简介 2、开发步骤 2.1、导入坐标 2.2、创建表和类 2.3、创建JdbcTemplate对象 2.4、执行数据库操作 3、解耦 4、增删改查 ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹…

AlmediaDev Style Controls Crack

AlmediaDev Style Controls Crack StyleControls是一个稳定、强大的包(超过100个组件),它使用经典绘图、系统主题、GDI和VCL样式。该软件包包含扩展标准VCL控件的独特解决方案,还包含许多独特的高级控件,用于创建具有Fluent UI模糊背景的现代…

Windows下QT Creator安装MinGW 32bit编译器

前言 注:本作者是基于FFmpeg开发需要,故在Windows下QT Creator中安装MinGW 32bit编译器!其它型号编译器参照此文章基本可以实现! 一、下载需要的编译器 1、下载链接 链接: 链接:https://pan.baidu.com/…

C++ - 模版进阶 - array

简介 之前对模版的进行了初步了解和使用,可查看博客:C 初始模板_c模板初始化_chihiro1122的博客-CSDN博客 其实模版除了是一类算法,或者自定义类型的 套用,还有其他功能,和其他的更高阶的使用方法。 之前在实现 各种 …

集成学习算法是什么?如何理解集成学习?

什么是集成学习? 集成学习通过建立几个模型来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。 机器学习的两个核心任务 任务一&#xff1…

嵌入式:C高级 Day3

一、整理思维导图 二、判断家目录下,普通文件的个数和目录文件的个数 三、输入一个文件名,判断是否为shell脚本文件,如果是脚本文件,判断是否有可执行权限,如果有可执行权限,运行文件,如果没有可…