别再背锅了,这个小技巧统计第三方接口耗时很安逸

news2025/1/15 18:15:06

前言

之前我有写过一篇记录生产环境事故的文章,获得了不少好评。

后续,我们团队有做过一些讨论,为了支撑运营维护,搭建了更好的日志平台Granfa+Loki,也引入了SkyWalking做链路追踪。

但过程中也遇到了一些问题,我会在下面讲述出来,然后将这个简单的小技巧分享出来,希望对大家有所帮助。

如果暂时没时间看,可以先收藏起来,等闲下来慢慢看,以后如果遇到类似的情况说不定能直接翻出来照搬。


困难

前面说了,我们团队有搭建日志平台和链路追踪,但实际上也带来一些困难,大体如下:

1)、对于中小企业来说,这样的平台搭建起来对资源有一定要求(要钱),项目维护期也经常会出现资源紧张的情况,增加了维护成本,因为成本不是控制在你手上,是老板手上;

2)、对于团队成员来说,要有一定能力熟悉和使用这样的平台,掌握一些常用的命令,而中小企业人员流动还挺频繁,并不是每个入职的成员都能上手,这无形中加大了人力成本;

3)、在线上排查问题过程中,方便了许多,但也麻烦了许多,方便是因为有平台能直接定位了,麻烦是因为平台越来越多,有成员反应地址太多有点晕了()。

综上所述,考虑到我们公司的规模和经济能力,最终我们团队还是决定用最简单的办法来定位接口耗时的问题,也就是SpringAOP对第三方接口做切面来完成耗时统计。


效果

先把最终在线上呈现的效果展示出来,大家能一目了然。

我们项目使用的是微服务+K8s,下图是Granfa+Loki搭建的收集k8s日志的平台,通过关键字进行搜索就能直接定位到调用第三方接口耗时的情况。

20.jpg


模拟场景

我们来模拟一下场景,实现AOP切面统计第三方接口的耗时。

1、模拟用户建档

实体类

11.jpg

用map来模拟存放用户、获取用户、删除用户。

12.jpg

2、模拟第三方接口

这里就是简单的用线程睡眠来模拟调用第三方接口的耗时,假装几个接口分别耗费了这么多时间。

13.jpg

3、service服务

14.jpg

4、controller服务

15.jpg

5、测试一下接口

接口1.jpg

接口2.jpg

接口3.jpg

OK,没有问题。

6、AOP切面

引入依赖

16.jpg

编写切面类,这里简单说明一下,主要明确几点。

1)、Pointcut切面要指向第三方接口调用的类,也就是本篇场景中的RemoteClient;

2)、使用环绕切面,其中方法名是之后线上检索日志定位的关键字;

3)、计时直接使用StopWatch即可,省得引入其他依赖;

4)、StopWatch的start和stop方法包裹的jointPoint.proceed()就是第三方接口的执行操作,这样StopWatch就可以统计出该方法的耗时;

5)、最后打印日志也挺重要,可以参考我这样,把类名.方法()都打印出来便于以后检索,同时耗时最好用ms单位,这样一目了然。

17.jpg

7、效果

我们手动执行模拟场景中的几个接口后,来观察日志打印的情况。

可以看到,方法对应的耗时都统计出来了。

18.jpg

这样,最终k8s的日志也会像这样被日志平台收集起来,我们最终只需要通过关键字检索就能一次定位到所有第三方接口的耗时情况。

最后,我把我们某一次生产环境定位到的第三方接口超时的日志展示出来给大家看看,正是这样的统计帮助我们定位到了其他厂家的接口问题,之前他们一直都是说我们的问题,靠这个截图才让他们低头认罪,之后他们就修复了这个问题。

这是在Granfa中我们根据类名.方法名直接定位第三方接口的命令

19.jpg

这是检索到的某一段时间内他们接口一直超时的统计,也是最后发给他们的证据。

example.png


总结

最后,我把这种方式的好处再总结一遍,如果和我所在公司情况类似的同行可以参考下。

1)、节约了维护成本,不需要额外搭建什么链路追踪等用来定位的中间件或基础设施,很多中小企业其实用不上,大体还是习惯通过日志来定位问题,一个链路追踪的平台搭建简单,但是使用过程中我们明显发现会造成资源紧张,也要进行定期的维护,这个成本会在日积月累中逐渐变多;

2)、团队成员不需要再额外学习多余的技能,尤其是这种快节奏的互联网行业团队,人员变更挺频繁,每次都要培训和指导是一件比较耗费心力的事情,往往一个人掌握了没多久他又跳槽了,对于公司而言又要重来;

3)、平台变复杂不是好事,光是环境地址就能积累几个Excel,规模不大的团队还是倾向于最简单的方式来处理问题,综合考虑之下,人力完全可以替代平台(老板们其实就喜欢这样的员工)。

另外稍微提一点,这种方式既可以应用于单体架构,也可以应用于分布式架构,但对于分布式架构要注意一点,第三方服务最好能独立出来,这样你使用AOP切面就完美适配了,否则你需要每个服务都引入一遍。


附言

源码会在评论区分享出来,有兴趣的可以去下载来自己试试,里面还有我整理的logback配置,有彩色日志的配置,还有每个配置很详细的注释,AOP部分的代码就是线上运行了半年多的代码,可以直接拿去使用,只需要修改一下你的切面指向及类名方法名的日志打印即可。



原创文章纯手打,一个一个字敲出来的,键盘上全是血,如果觉得有帮助麻烦点个赞和收藏吧~

本人致力于分享工作中的经验及趣事,喜欢的话可以进主页关注一下哦~

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

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

相关文章

26个工业废水处理工艺流程图!水处理从业人员必看

1 矿泉水除溴酸盐工艺流程 季胺1型官能团耐受硫酸盐、氯离子等去除溴化物 2 电厂制备超纯水工艺流程 内冷水系统降电导装置,脱除阴阳离子 电导率<1μs/cm 3 锰矿除氨氮工艺流程 两串一备,通过磺酸基官能团捕捉铵根离子 4 垃圾渗滤液除氨…

5-7:Spring整合Elasticsearch

引入依赖 spring-boot-starter-data-elasticsearch 配置Elasticsearchcluster-name、cluster-nodes. Spring Data Elasticsearch ElasticsearchTemplateElasticsearchRepository 实现对帖子的搜索&#xff0c;将帖子的数据存到ES中 EslaticSearch使用 下载依赖 <!-- htt…

Elasticsearch:基于文件的用户认证

你可以使用内置文件域&#xff08;file realm&#xff09;管理和验证用户。 使用文件域&#xff0c;用户在集群中每个节点上的本地文件中定义。 重要&#xff1a;作为集群的管理员&#xff0c;你有责任确保在集群中的每个节点上定义相同的用户。 Elastic Stack 安全功能不提供任…

C++ Reference: Standard C++ Library reference: Containers: map: map: erase

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/erase/ 公有成员函数 <map> std::map::erase C98 (1) void erase (iterator position); (2) size_type erase (const key_type& k); (3) void erase (iterator first, iterator last);…

HR是怎么看待PMP证书呢?

HR 也是打工人&#xff0c;企业需要什么样的人才就招聘什么样的求职者&#xff0c;问 HR 怎么看待 PMP 证书&#xff0c;其实也就是PMP 证书的市场价值怎么样。 市场上对PMP证书的评价争议非常大&#xff0c;尤其近两年考 PMP 的人越来越多&#xff0c;不可否认&#xff0c;很…

UNIAPP实战项目笔记52 输入手机号页面和输入验证码页面

UNIAPP实战项目笔记52 输入手机号页面和输入验证码页面 实际案例图片 输入手机号页面 输入验证码页面 显示输入手机号 使用验证码登录 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 login-tel.vue页面 <templat…

33-Vue之ECharts-仪表盘图

ECharts-仪表盘图前言仪表盘的特点仪表盘的基本实现仪表盘的常见效果前言 本篇来学习写仪表盘图 仪表盘的特点 可以更直观的表现出某个指标的进度或实际情况 仪表盘的基本实现 ECharts 最基本的代码结构准备数据, 设置给 series 下的 data在 series 下设置 type:gauge &l…

毕业设计-国内疫情数据综合可视化分析系统

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

关于websocket抓包时的注意事项

总是需要一些原因&#xff0c;需要查看客户端和服务端的websocket数据交互&#xff0c;为了使得查看方便&#xff0c;客户端和服务端使用ws而非wss。 服务端部署在linux上&#xff0c;用tcpdump抓包后&#xff0c;在windows上用wireshark打开&#xff0c;如下所示&#xff1a; …

前端基础(十)_标签分类(行级标签、块级标签、行块标签)

标签分类 可以分为三类&#xff1a;行级标签、块级标签、行块标签 行级元素 常用的行级元素&#xff1a;span、b、i、em、strong、a、del、sub、sup等 注意&#xff1a; 1、默认宽度随元素的内容的变化而变化&#xff1b; 2、默认情况下高度由内容撑开&#xff1b; 3、不会…

【快速学习系列】Spring理解,IOC、DI、AOP的使用和代码示例及spring扩展(bean作用域、自动装配类型和拆分策略)

【快速学习系列】Spring理解&#xff0c;IOC、DI、AOP的使用和代码示例及spring扩展&#xff08;bean作用域、自动装配类型和拆分策略&#xff09; Spring概述 Spring设计理念 Spring是面向Bean的编程 Spring三大核心容器&#xff1a; Beans&#xff0c;Core&#xff0c;Conte…

使用vue-cli创建一个新项目

1&#xff0c;在文件夹中打开命令行输入&#xff1a; vue create educationcloud-pc 2&#xff0c;这里我选择手动创建配置 3&#xff0c;我会选择我用到的几个 空格键是选中 取消 a是全选 4&#xff0c;这里我暂时使用vue2版本 5&#xff0c;是否使用history路由 6&#xf…

skyBox 近地时角度倾斜问题,天空倾斜

近地出现角度不对问题 将下面代码放入js文件&#xff0c;引入项目。 本质是在Cesium.skyBox的代码上修改&#xff0c;并给Cesium重新增添近地的天空盒 需要注意的是&#xff0c;代码最后的Cesium.GroundSkyBox SkyBoxOnGround 调用方式&#xff1a; import ‘…/…/路径’ 然后…

地址汇总详细讲解(内附非纯末梢)

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

5.2 词向量Word Embedding

在自然语言处理任务中&#xff0c;词向量&#xff08;Word Embedding&#xff09;是表示自然语言里单词的一种方法&#xff0c;即把每个词都表示为一个N维空间内的点&#xff0c;即一个高维空间内的向量。通过这种方法&#xff0c;实现把自然语言计算转换为向量计算。 如 图1 …

转转用户画像平台实践

文章目录1. 背景2. 什么是用户画像3. 标签画像的应用场景4. 转转用户画像平台的实践4.1 系统结构图4.2 标签画像的构建原则4.3 标签类型和规则4.4 标签的生产加工4.5 标签的存储设计4.6 用户洞察4.7 用户分群计算4.8 ID-MAPPING5 未来规划6 总结1. 背景 转转作为二手电商交易领…

Linux C编程一站式学习笔记2

Linux C编程一站式学习笔记 chap2 常量、变量和表达式 本书以C99为标准 一.继续hello world 加入更多注释的hello world 可以用ctrl(shift)v复制到vim里面 #include <stdio.h>/* * comment1* main: generate some simple output*/int main(void) {printf(/* comment2 */…

【JS ES6】了解Symbol类型

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 目录声明定义Symbol的几种方式使用Symbol解决字符串耦合问题扩展特性与对象属性保护声明定义Sym…

Qt5.6.1移植海思Hi3521d(三)

系列文章目录 Qt5.6.1移植海思Hi3521d&#xff08;一&#xff09; Qt5.6.1移植海思Hi3521d&#xff08;二&#xff09; 前言 本章讲解如何将编译好的qt程序移植到海思Hi3521D板子上&#xff0c;并且能够启动qt界面&#xff0c;和正常显示中文 一、移植qt库 创建qt.conf&#…

不再封控,各高校要如何开展教学

疫情政策逐步放开&#xff0c;石家庄、福州、广西等地各高校发布寒暑假和期末课程安排。 广西科技大学要求从2022年12月13日下午起&#xff0c;停止所有线下课程&#xff0c;未完成的教学任务启动线上教学。 在疫情这三年里&#xff0c;线上教学已经成为学校的主要教学手段&…