当前位置: 首页 > ai >正文

KONG根据请求参数限流

背景

价格接口 /search 同时支持缓存查价和实时查价,主要通过searchType字段区分这两种请求。

  • searchType 为空时为缓存查价,QPS很高。
  • searchType 不为空时为实时查价,但QPS远低于普通查价。

如果直接对该接口限流,当流量波动超过限流阈值时,实时查价可能会被拦截。实时查价是进入订单流程的关键环节,期望实时查价尽量不限流。

kong 插件

pre-function 的优先级比 rate-limiting 高,pre-function 在access阶段根据入参设置特定的header,如X-Search-Type。缓存查价设置 X-Search-Type:price,实时查价设置X-Search-Type:check。

rate-limiting 设置通过 X-Search-Type 头来限流,相当于缓存查价和实时查价设置了相同的限流,但由于实时查价的qps远低于缓存查价,所以满足了要求。

  • pre-function access 阶段的脚本

入参为json格式

local kong = kong
local cjson = require("cjson.safe")local req_body = kong.request.get_raw_body()
if req_body thenlocal decoded_body = cjson.decode(req_body)if decoded_body and decoded_body.searchType and decoded_body.searchType ~= "" thenkong.service.request.set_header("X-Search-Type", "check")elsekong.service.request.set_header("X-Search-Type", "price")end
end

konga-kong-postgres 三件套

docker-compose.yml

version: "3"networks:kong-net:driver: bridgeservices:kong-database:image: postgres:9.6restart: alwaysnetworks:- kong-netenvironment:POSTGRES_PASSWORD: kongPOSTGRES_USER: kongPOSTGRES_DB: kongports:- "5432:5432"healthcheck:test: ["CMD", "pg_isready", "-U", "kong"]interval: 5stimeout: 5sretries: 5kong-migration:image: kong:2.2.1-ubuntucommand: "kong migrations bootstrap"networks:- kong-netrestart: on-failureenvironment:KONG_PG_HOST: kong-databaseKONG_DATABASE: postgresKONG_PG_PASSWORD: konglinks:- kong-databasedepends_on:- kong-databasekong:image: kong:2.2.1-ubunturestart: alwaysnetworks:- kong-netenvironment:KONG_DATABASE: postgresKONG_PG_HOST: kong-databaseKONG_PG_USER: kongKONG_PG_PASSWORD: kongKONG_PROXY_LISTEN: 0.0.0.0:8000KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443KONG_ADMIN_LISTEN: 0.0.0.0:8001KONG_PROXY_ACCESS_LOG: /dev/stdoutKONG_ADMIN_ACCESS_LOG: /dev/stdoutKONG_PROXY_ERROR_LOG: /dev/stderrKONG_ADMIN_ERROR_LOG: /dev/stderrdepends_on:- kong-migration- kong-databasehealthcheck:test: ["CMD", "curl", "-f", "http://kong:8001"]interval: 5stimeout: 2sretries: 15ports:- "8001:8001"- "8000:8000"konga-prepare:image: pantsel/konga:0.14.9command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/postgres"environment:DB_ADAPTER: postgresDB_HOST: kong-databaseDB_USER: kongDB_PASSWORD: kongnetworks:- kong-netrestart: on-failurelinks:- kong-databasedepends_on:- kong-databasekonga:image: pantsel/konga:0.14.9restart: alwaysnetworks:- kong-netenvironment:DB_ADAPTER: postgresDB_HOST: kong-databaseDB_USER: kongDB_PASSWORD: kongDB_DATABASE: postgresNODE_ENV: productiondepends_on:- kong-databaseports:- "1337:1337"

总结

这里只是根据入参限流的简单实现,不支持根据入参设置不同的限流阈值。要实现更复杂的限流,可以自定义插件,或者下降到服务层处理。

http://www.xdnf.cn/news/9508.html

相关文章:

  • 线代第四章线性方程组第四节:方程组解的结构
  • 使用java实现word转pdf,html以及rtf转word,pdf,html
  • DeepSeek实战:构建智能问答系统的完整指南
  • Android学习之定时任务
  • 【组件】翻牌器效果
  • More SQL(Focus Subqueries、Join)
  • 如何优化Elasticsearch的搜索性能?
  • 登高架设作业考试中常见的安全规范考点是什么?
  • DBeaver 连接 OceanBase Oracle 租户
  • react-native的token认证流程
  • AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为
  • 《吾心悔已》---李劭卓2025.5.28
  • 漫画Android:View是怎么绘制出来的?
  • MySQL数据库(一)
  • 华为OD机试真题——最佳的出牌方法(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 嵌入式开发学习(第二阶段 C语言笔记)
  • 电缆护层保护器的优势
  • OpenWrt 插件安装失败的常见问题和解决方法
  • sglang 部署Qwen/Qwen2.5-VL-7B-Instruct
  • JavaScript 性能优化:从入门到实战
  • 将文件夹中的未命名的文件类型或txt的文件类型改为dat类型
  • mybatis-plus实现增删改查(新手理解版)
  • 6.4.2_3最短路径问题_Floyd算法
  • 【连接器专题】案例:SD卡座规格书接触阻抗测试标准EIA-364-06B和EIA-364-23有什么区别?
  • day023-面试题总结
  • 【计算机网络】4网络层①
  • STM32学习笔记---时钟树
  • 易学探索助手-个人记录(十二)
  • 【ArcGIS Pro草履虫大师】空间地图系列
  • 数据结构之堆(topk问题、堆排序)