故障定位系列】服务&接口双粒度动态拓扑,精准定位共享连接池故障

简介: 本文以共享连接池故障为例,提出基于服务与接口双粒度动态拓扑的故障定位方法。当接口级定位无法发现根因时,结合服务级拓扑可精准识别跨链路资源竞争问题,有效解决因连接池共享导致的间接影响,提升故障诊断准确性。

原文地址:https://mp.weixin.qq.com/s/rpDd65ISBuFZ9Cx1Q4LY9A

上一期,我们分享了Web应用接口级的故障定位方法,通过细化到接口级的定位方法,可以精准地过滤掉干扰因素。然而这种方法并不适用所有场景,过于细致的过滤有时会产生新的问题。

本文将以共享连接池故障场景为例进行说明,提出一种利用服务&接口双粒度动态拓扑进行故障定位的方法。

1 故障背景

image.png

  • 链路1:service-b的callB接口 -> service-p的callB接口 -> service-h的callB接口

  • 链路2:service-o的callO接口 -> service-p的callO接口 -> service-l的callO接口

其中链路1中的service-p的callB接口和链路2中的callO接口,共用了同一个Http连接池来访问下游不同的服务。

但是尽管如此,两条链路在接口级别上是没有交集的,如下图所示。

image.png

在这样的场景下,假如service-h的callB接口出现了故障,会有以下情况发生:

image.png

  • service-h的callB接口故障 -> 影响到 service-p的callB接口 -> 影响到service-b的callB接口

  • service-p的callB接口长期占用http连接 -> 共享Http连接池中的连接不够用 -> service-p的callO接口获取不到连接而等待 -> 影响到service-o的callIO接口

也就是说,尽管两条链路的接口调用没有交集,但是因为在同一个服务节点上共享了连接池的资源,链路1中的service-h服务出现故障会导致链路2中的service-o服务也出现故障。

此时,假如我们依照接口级根因定位的方法去分析链路2,就只能只能定位到service-p服务的callO接口。而真实情况是,链路1和链路2的故障根因都在service-h的callB接口。

既然接口级别的根因定位在这里无法准确定位,那应该怎么办?

答案:服务级拓扑和接口级拓扑动态结合。当接口级拓扑无法继续往下分析时,结合服务级拓扑找到答案。

下面案例中将给出具体方案。

2 实战案例

我们到RootTalk Sandbox上进行上述故障场景的复现。

RootTalk Sandbox是一个故障演练和定位的系统,可以进行多种故障场景的复现,目前开放注册。

地址:https://sandbox.databuff.com/

2.1 故障注入

image.png

如上图所示进行操作,对拓扑图中的service-h::k8s这个服务的所有实例的CallDB接口注入耗时突增的故障。

注入后等待2~3分钟,可直接点击跳转到Databuff的故障定位平台。

2.2 故障定位

登录Databuff后可以看到完整故障树,如下图。

image.png

点击故障树底部节点,可以定位到接口。

image.png

从上面两张图中可以看到,入口服务service-b和service-o均出现告警,而根因节点都指向service-h服务,故障根因是service-h的callB接口的存在响应时间升高的问题。

我们再来详细看下对service-p服务的分析结论:
image.png

service-p的 callB接口和callO接口都出现了问题,是因为apache-httpclient_2这个共享连接池导致的相互影响。

点击页面中的链接继续下钻,可以来验证这一结论。

针对callB接口来说,客户端和服务端的平均响应时间均发生突变,一般是服务端的问题。

image.png

再看callO接口,客户端响应时间均发生突变,而服务端没有变化,这种情况可能是客户端或者网络的问题。
image.png

继续看callO接口的获取连接时间,发现耗时突增,说明连接池中的连接一直在被占用而被迫等待。

image.png

综上,我们可以得到明确的根因分析结论:

  • 链路1和链路2的入口服务service-b和service-o均出现告警,故障根因是service-h::k8s服务中的callB接口存在耗时突增;

  • 中间节点service-p服务上的callB接口和callO接口都出现了问题,原因是共享连接池apache-httpclient_2一直被占用而被迫等待。

这个结论和前面分析的场景以及注入的故障是匹配的。

相关文章
|
人工智能 自然语言处理 安全
用AI重构人机关系,OPPO智慧服务带来了更“懂你”的体验
OPPO在2025开发者大会上展现智慧服务新范式:通过大模型与意图识别技术,构建全场景入口矩阵,实现“服务找人”。打通负一屏、小布助手等系统级入口,让服务主动触达用户;为开发者提供统一意图标准、一站式平台与安全准则,降低适配成本,共建开放生态。
928 31
|
监控 Kubernetes Go
日志采集效能跃迁:iLogtail 到 LoongCollector 的全面升级
LoongCollector 在日志场景中实现了全面的重磅升级,从功能、性能、稳定性等各个方面均进行了深度优化和提升,本文我们将对 LoongCollector 的升级进行详细介绍。
1039 87
|
运维 Prometheus 监控
🎉 WatchAlert - 开源多数据源告警引擎【运维研发必备能力】
WatchAlert 是一个开源的多数据源告警引擎,支持从 Prometheus、Elasticsearch、Kubernetes 等多种数据源获取监控数据,并根据预定义的告警规则触发告警。它具备多数据源支持、灵活的告警规则、多渠道告警通知、可扩展架构和高性能等核心特性,帮助团队更高效地监控和响应问题。项目地址:https://github.com/opsre/WatchAlert
2360 18
🎉 WatchAlert - 开源多数据源告警引擎【运维研发必备能力】
|
机器学习/深度学习 人工智能 物联网
开源8B参数全能扩散模型Flex.2-preview:把线稿变商稿,还能边画边改!
Flex.2-preview是Ostris开源的80亿参数文本到图像扩散模型,支持512token长文本输入和多类型控制引导,内置修复功能并兼容主流AI绘画工具链。
935 3
开源8B参数全能扩散模型Flex.2-preview:把线稿变商稿,还能边画边改!
|
11月前
|
人工智能 搜索推荐 安全
商务邮件沟通效率提升85%:一套AI指令解决企业邮件痛点
本文基于3000+企业邮件案例,提供一套专业的AI商务邮件指令,通过数据驱动的方法论,帮助企业实现邮件沟通效率提升85%,客户转化率增加60%,年度ROI达400%。包含完整指令代码、实战案例和量化收益分析。
989 11
|
缓存 自然语言处理 JavaScript
Github 3k+ star,中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端!比商业系统还专业!!
Fantastic-admin/basic 是基于 Vue3 与 TypeScript 的中后台管理系统框架,支持多款 UI 组件库,如 Element Plus、Arco Design、Naive-UI 等。它提供完整的项目结构、权限控制、国际化、多级缓存标签页等功能,兼容 PC、平板及移动端,适合快速搭建企业级后台应用。框架具备高度可定制性,拥有 3k+ GitHub Star,生态完善,适合中小团队和个人开发者提升效率。
957 2
|
11月前
|
存储 Shell KVM
手动以及脚本创建KVM虚拟机——Ansible安全基线配置(二)
本教程介绍如何通过手动操作与Shell脚本两种方式创建KVM虚拟机,涵盖环境部署、存储池配置、镜像管理、cloud-init初始化及批量自动化创建。为后续Ansible安全自动化奠定基础,助力实现高效、可复用的服务器基线管控。
601 5
|
11月前
|
人工智能 安全 Anolis
软硬协同!RISC-V 生态分论坛精彩议程公布 | 2025 龙蜥大会
以 “软硬协同” 为核心主线,围绕系统层适配优化、芯片 - 软件协同创新、开源生态标准化三大维度展开深度研讨。