llm-gateway-plugin · 项目介绍

llm-gateway-plugin

本页由项目自动归档生成,源码与最新进展以 GitHub 仓库为准。

项目简介

一个基于 OpenResty(ngx_lua)的 LLM 网关插件化进阶项目,在基础网关的路由 / 负载均衡 / 配置管理 / 重试能力之上,增加了多策略重试、自定义 Handler 动态管理、熔断器、限流退避与指标收集等可插拔能力。它面向需要在网关层对上游 LLM 服务做弹性治理(重试、熔断、退避、可观测)的部署场景。

技术栈

维度 技术
主要语言/框架 Lua(OpenResty / ngx_lua),Shell(启停与测试脚本)
关键依赖/库 OpenResty 内置 lua_shared_dict(状态共享)、cosocket;自定义 Handler 通过 loadstring + pcall 动态加载,无第三方 Lua 库
数据存储 共享内存 lua_shared_dict(熔断器状态 failure_counts / circuit_open_until、指标计数 upstream_state、Handler 缓存);配置经 admin API 写入
运行/部署方式 OpenResty:./start.sh → openresty -p . -c conf/nginx.conf,默认监听 8080;测试 ./test.sh

核心功能 / 亮点

  • 路由 + 负载均衡 + 多策略重试(lua/llm_gateway/router.lua、balancer.lua、config.lua):retry_policies 按 state(failed / next)+ status_codes 细分,可独立配置重试次数与超时。
  • 自定义 Handler 动态管理(lua/llm_gateway/handler_manager.lua):支持上传 / 验证 / 存储 / 删除 / 热重载,用户 handler 放在 lua/plugins/custom/。
  • Handler 安全检查:正则禁止 os.execute / io.popen / io.open / loadfile / dofile / debug 等危险操作,并用 loadstring + pcall 校验返回值为 table 后才加载。
  • 熔断器插件(lua/plugins/circuit_breaker.lua):连续失败达到阈值后暂停重试(模块级跨请求状态)。
  • 限流退避插件(lua/plugins/rate_limit_handler.lua):命中 429 时指数退避 delay = base * 2^(tries-1),并叠加 ±20% 随机抖动防止惊群。
  • 指标收集插件(lua/plugins/metrics_handler.lua):每次重试统计失败状态 / 服务器级别,存入 lua_shared_dict 做原子 incr 计数。
  • 管理 REST API(lua/llm_gateway/admin.lua):/admin/api 管理 API 配置,/admin/handler 管理自定义 handler(列举 / 上传 / 获取 / 删除)。

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
llm-gateway-plugin/
├── conf/
│ └── nginx.conf # 网关入口 + admin API + handler 管理 API
├── lua/
│ ├── llm_gateway/
│ │ ├── router.lua # 路由匹配
│ │ ├── config.lua # 配置管理(含 retry_policies)
│ │ ├── balancer.lua # 负载均衡 + 多策略重试
│ │ ├── admin.lua # API 配置管理 REST API
│ │ └── handler_manager.lua # 自定义 Handler 管理(上传/验证/安全检查/热重载)
│ └── plugins/
│ ├── circuit_breaker.lua # 熔断器插件
│ ├── rate_limit_handler.lua # 429 限流指数退避插件
│ ├── metrics_handler.lua # 指标收集插件
│ └── custom/ # 用户上传的自定义 handler
├── start.sh / stop.sh # 启停脚本
├── test.sh # 测试脚本
└── README.md

相关链接