api网关kong对高频的慢接口进行熔断

2024-05-31 21:36

本文主要是介绍api网关kong对高频的慢接口进行熔断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

在生产环境,后端服务的接口响应非常慢,是因为数据库未创建索引导致。
如果QPS低的时候,因为后端服务有6个高配置的节点,虽然接口慢,还未影响到服务的正常运行。
但是,当QPS很高的时候,因为慢接口的访问会分散到所有节点,所以最后导致整个服务的6个节点都宕机假死了。
这个时候,服务的健康状态已经是不健康了,从两个方面可以观察出来:

  • 服务注册中心consul的服务健康检测
    在这里插入图片描述

  • k8s容器的pod 探针检测(livenessProbe和readinessProbe)

在这里插入图片描述

服务的整体响应时间慢,包括/health健康检测接口的响应超时,所以此时健康状态是异常。
K8S容器的Pod因为探针检测服务是不健康的,所以会不断地重启。

因为服务的Slow start–慢启动,加上我们没有对后端服务进行逐步放量的机制,导致服务刚启动,在高QPS的时候,外部请求又大量地请求进来,新启动的服务终被拖垮。

所以下面的两个处理方案都被证明是失败的:

  • 1、重启大法,这个可以解决jvm的full gc等内存问题,但是搞不定高qps的慢接口。
  • 2、原先的6个节点扩容至10个,也是枉然,仍无济于事。

问题的正确解决方案应该是限流或熔断。

二、kong的熔断

熔断限流,是需要基于服务的指标来定的。除了购买云上的一些服务外,业界有sentinel这样的开源项目,但我们都没有接入。
也就是说,我们只能祈求不要大量访问我们的慢接口了,让我们的服务喘口气,否则缓不过来。
显然,这个也不现实,主动权交给用户,呵呵~~

幸运的是,我们在java服务的上层还有一个kong网关,

kong,作为api网关,具备以下作用:
在这里插入图片描述

  • 隔离外网系统与内网系统
  • 通过解耦,使得微服务系统的各方能够独立、高效;网关实现非功能性的要求
  • 脚手架,方便通过扩展机制对请求进行一系列加工和处理
  • 为服务熔断,灰度发布,线上测试提供方案

这里,我们就要介绍一种手动熔断的处理办法。

要做熔断,前提是找出慢接口,也即被熔断的对象。

1、新建路由route

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、配置插件pre-function

在新建的路由下,配置插件pre-function,对慢接口进行拦截,不让请求到后端服务。

这就是隔离外网系统与内网系统的好处。

另外插件式的配置,让kong作为api网关,扩展性的作用表现得非常明显。

在这里插入图片描述
编写function的内容:
在这里插入图片描述

return kong.response.exit(503, '{code: 400, msg: "该功能暂不可用,请稍后再试!"}', {["Content-Type"] = 'application/json' }) 

三、总结

本文通过线上实际发生的一个生产事故,梳理了我们的解决思路,对于高频慢接口的访问,最后只能通过kong的熔断来解决。
事实证明,重启银弹和扩容银弹并不适用此,对于fullgc等jvm内存问题可能适用。

这个生产事故,也给我们一个提醒,需要及时排查慢接口和数据库的慢查询,它们就像是航船的漏洞一样,小洞如果不及时堵上,等变大了,想堵就来不及了。

这篇关于api网关kong对高频的慢接口进行熔断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019108

相关文章

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现