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内存问题可能适用。

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

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

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

相关文章

vue3 递归循环展示下级盒子

index.vue主文件 <template><div><RecursiveCard :data"rootTask" /></div> </template><script> import { reactive } from vue; import RecursiveCard from ./test.vue; // 递归组件的路径export default {components: {Recu…

广东智慧物流2024年端午节放假安排

广东智慧物流2024年端午节放假安排

使用HTML、CSS和JavaScript编写一个注册界面(一)

倘若文章或代码中有任何错误或疑惑&#xff0c;欢迎提出交流哦~ HTML和CSS 首先&#xff0c;我们需要编写一个简洁的注册界面。 简单编写下&#xff0c;如下&#xff1a; 呈现效果为&#xff1a; <!DOCTYPE html> <html lang"en"><head><me…

从普通篮球场到高端气膜馆:全新运动体验的打造—轻空间

在现代体育设施的发展中&#xff0c;气膜馆以其独特的优势和创新设计&#xff0c;正在改变我们对运动场所的传统认知。将一片普通的篮球场转变为高逼格的气膜馆&#xff0c;不仅可行&#xff0c;而且能提供极大的便利和众多的好处&#xff0c;让运动体验更上一层楼。 气膜馆的优…

巨详细Linux卸载Redis教程

巨详细Linux卸载Redis教程 1、检查系统残留redis数据2、卸载系统残留redis数据 1、检查系统残留redis数据 redis等数据相关中间件安装前一定要进行残留数据检查&#xff0c;排除后期存在的各种隐患。 #检查有没有残留客户端 whereis redis-cli #检查有没有残留服务 whereis r…

Git 版本控制系统详解

目录 Git 版本控制系统详解一、Git 的作用1. 版本控制2. 分支管理3. 分布式开发4. 协作开发 二、Git 的安装和基本使用1. 安装 Git1.1 Windows1.2 macOS1.3 Linux 2. 配置 Git3. 创建和克隆仓库3.1 创建本地仓库3.2 克隆远程仓库 4. 基本操作4.1 添加文件到暂存区4.2 提交更改4…

开发项目功能开发设计模板

功能开发设计是一个系统化的过程&#xff0c;旨在确保新功能的开发既满足用户需求又符合技术标准。以下是一个适用于大多数软件开发项目功能开发设计模板&#xff1a;

94、python-第三阶段-4-数据计算-map方法

直接运行会报错&#xff0c;需要配置下python环境变量 from pyspark import SparkConf,SparkContext import os os.environ[PYSPARK_PYTHON]"D:/Program Files/Python/Python3.13/python.exe" conf SparkConf().setMaster("local[*]").setAppName("…

解析!领先的Web应用程序安全测试工具—Burp Suite

Burp Suite 是一款领先的Web应用程序安全测试工具。它被广泛用于识别和修复Web应用程序中的漏洞。 通过使用Burp Suite&#xff0c;组织可以显著提升其Web应用程序的安全性&#xff0c;及时发现并修复漏洞&#xff0c;保障业务的持续运行和数据安全。 Burp Suite 最新版下载h…

go中的指针详解

因为大一的时候c语言没学好,所以看到指针很心烦 ,后来速成了一遍go ,每每写道指针部分就开始遗忘 ,所以专门对指针部分做了此笔记 概念 在 Go 语言中&#xff0c;指针是一种变量类型&#xff0c;它存储的是另一个变量的内存地址。通过指针&#xff0c;你可以访问和修改它指向…

商业代理:利用代理服务器进行市场研究和竞争分析

代理是一种转换设备网络流量并从技术上使用户隐形的工具。个人使用它们来隐藏他们的在线活动并绕过地理限制。企业使用它们来支持他们的市场和竞争对手研究等。 继续阅读以了解代理的特点以及它们为企业研究工作带来的优势。 代理的主要功能 代理服务器是设备和网站服务器之间…

Transformer学习(4)

上篇文章完成了Transformer剩下组件的编写&#xff0c;因此本文就可以开始训练。 本文主要介绍训练时要做的一些事情&#xff0c;包括定义损失函数、学习率调整、优化器等。 下篇文章会探讨如何在多GPU上进行并行训练&#xff0c;加速训练过程。 数据集简介 从网上找到一份中…

出图效率倍增!47个高质量的 Stable Diffusion 常用模型推荐

“选用适当的模型&#xff0c;随随便便出个图&#xff0c;都要比打上一堆提示词的效果要好。” 事实如此&#xff0c;高质量的模型&#xff0c;能够成倍提升出图质量。目前 CivitAI&#xff08;俗称 C 站&#xff0c; https://civitai.com/ &#xff09;是业内比较成熟的一个 …

E10:流程主表表单字段值变化触发事件

效果– //window.WeFormSDK.showMessage("这是一个E10的提示", 3, 2); const onClickCreate () > console.log("create"); const onClickSave () > console.log("save"); const onClickCancel () > dialogComponent?.destroy();/…

如何学习提示词?

随着人工智能技术的飞速发展&#xff0c;AI已经成为我们生活中不可或缺的一部分。从智能助手到专业领域的应用&#xff0c;AI正在以前所未有的速度和规模改变着我们的工作与生活。而在AI的众多应用中&#xff0c;提示词&#xff08;Prompt&#xff09;的作用日益凸显。提示词&a…

【Python】 Python应用的最佳项目结构解析

基本原理 在Python开发中&#xff0c;一个清晰且结构化良好的项目布局对于项目的可维护性、可扩展性和团队协作至关重要。项目结构不仅影响代码的组织方式&#xff0c;还影响到开发流程和部署策略。一个优秀的项目结构应该能够方便地进行模块化开发&#xff0c;易于理解&#…

47、Flink 的 Data Source 原理

1.Data Source 原理 a&#xff09;核心组件 一个数据 source 包括三个核心组件&#xff1a;分片&#xff08;Splits&#xff09;、分片枚举器&#xff08;SplitEnumerator&#xff09; 以及 源阅读器&#xff08;SourceReader&#xff09;。 分片&#xff08;Split&#xff…

第二证券炒股知识:美股的交易规则有哪些?

在经济全球化的浪潮中&#xff0c;美股以其开放的商场体系和完善的买卖规则吸引了不少出资者的关注。关于美股的买卖规则有哪些&#xff0c;第二证券下面就为大家详细介绍一下。 1、美股的买卖时刻&#xff1a;美股的买卖时刻依照美国东部时刻核算&#xff0c;分为夏令时和冬令…

elementUI el-table高度heght和总结summary 同时使用 表格样式异常

背景 同时使用height和 show-summary 样式错位 解决方案 在钩子函数updated 中重新渲染此表格 <el-table :height"autoHeight" show-summary ref"dataTable" >updated() {this.$nextTick(() >{this.$refs.dataTable.doLayout();})},更改后的效果 …

Java注解使用与自定义

一、什么是注解 注解是元数据的一种形式&#xff0c;它提供有关程序的数据&#xff0c;该数据不属于程序本身。注解对其注释的代码操作没有直接影响。换句话说&#xff0c;注解携带元数据&#xff0c;并且会引入一些和元数据相关的操作&#xff0c;但不会影响被注解的代码的逻…