JAiRouter v2.7.0 发布:AI 模型网关的架构重塑与性能飞跃

一行代码接入所有 AI 模型服务,Gateway 层的性能守护者

前言

在 AI 应用爆发的今天,开发者们面临着一个共同的痛点:如何统一管理多个 AI 模型服务?

  • Ollama 跑本地模型,vLLM 做推理加速,GPUStack 管理 GPU 集群...

  • 每个服务都有自己的 API 格式,都需要单独的认证和监控

  • 服务挂了怎么办?请求太多怎么限流?怎么负载均衡?

JAiRouter 应运而生 ------ 一个为 AI 模型服务而生的统一网关。今天,我们很高兴地宣布 v2.7.0 正式发布,这是迄今为止架构变革最大、性能提升最显著的一个版本。


什么是 JAiRouter?

JAiRouter 是一个 AI 模型服务统一网关,提供:
#mermaid-svg-rg2rVWSWH6GagZBF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rg2rVWSWH6GagZBF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rg2rVWSWH6GagZBF .error-icon{fill:#552222;}#mermaid-svg-rg2rVWSWH6GagZBF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rg2rVWSWH6GagZBF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rg2rVWSWH6GagZBF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rg2rVWSWH6GagZBF .marker.cross{stroke:#333333;}#mermaid-svg-rg2rVWSWH6GagZBF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rg2rVWSWH6GagZBF p{margin:0;}#mermaid-svg-rg2rVWSWH6GagZBF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rg2rVWSWH6GagZBF .cluster-label text{fill:#333;}#mermaid-svg-rg2rVWSWH6GagZBF .cluster-label span{color:#333;}#mermaid-svg-rg2rVWSWH6GagZBF .cluster-label span p{background-color:transparent;}#mermaid-svg-rg2rVWSWH6GagZBF .label text,#mermaid-svg-rg2rVWSWH6GagZBF span{fill:#333;color:#333;}#mermaid-svg-rg2rVWSWH6GagZBF .node rect,#mermaid-svg-rg2rVWSWH6GagZBF .node circle,#mermaid-svg-rg2rVWSWH6GagZBF .node ellipse,#mermaid-svg-rg2rVWSWH6GagZBF .node polygon,#mermaid-svg-rg2rVWSWH6GagZBF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rg2rVWSWH6GagZBF .rough-node .label text,#mermaid-svg-rg2rVWSWH6GagZBF .node .label text,#mermaid-svg-rg2rVWSWH6GagZBF .image-shape .label,#mermaid-svg-rg2rVWSWH6GagZBF .icon-shape .label{text-anchor:middle;}#mermaid-svg-rg2rVWSWH6GagZBF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rg2rVWSWH6GagZBF .rough-node .label,#mermaid-svg-rg2rVWSWH6GagZBF .node .label,#mermaid-svg-rg2rVWSWH6GagZBF .image-shape .label,#mermaid-svg-rg2rVWSWH6GagZBF .icon-shape .label{text-align:center;}#mermaid-svg-rg2rVWSWH6GagZBF .node.clickable{cursor:pointer;}#mermaid-svg-rg2rVWSWH6GagZBF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rg2rVWSWH6GagZBF .arrowheadPath{fill:#333333;}#mermaid-svg-rg2rVWSWH6GagZBF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rg2rVWSWH6GagZBF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rg2rVWSWH6GagZBF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rg2rVWSWH6GagZBF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rg2rVWSWH6GagZBF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rg2rVWSWH6GagZBF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rg2rVWSWH6GagZBF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rg2rVWSWH6GagZBF .cluster text{fill:#333;}#mermaid-svg-rg2rVWSWH6GagZBF .cluster span{color:#333;}#mermaid-svg-rg2rVWSWH6GagZBF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rg2rVWSWH6GagZBF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rg2rVWSWH6GagZBF rect.text{fill:none;stroke-width:0;}#mermaid-svg-rg2rVWSWH6GagZBF .icon-shape,#mermaid-svg-rg2rVWSWH6GagZBF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rg2rVWSWH6GagZBF .icon-shape p,#mermaid-svg-rg2rVWSWH6GagZBF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rg2rVWSWH6GagZBF .icon-shape .label rect,#mermaid-svg-rg2rVWSWH6GagZBF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rg2rVWSWH6GagZBF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rg2rVWSWH6GagZBF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rg2rVWSWH6GagZBF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} OpenAI 兼容 API
AI 模型服务
Ollama
vLLM
GPUStack
Xinference
OpenAI
JAiRouter 网关
路由转发
负载均衡
限流保护
熔断降级
安全认证
您的应用程序
OpenAI SDK / LangChain / HTTP

一句话:用 OpenAI SDK,通过 JAiRouter,访问任何 AI 模型服务。


v2.7.0 核心亮点

1. 🏗️ 架构重塑:微服务化准备

v2.7.0 完成了 487 个文件的 Package 结构重组,为未来的微服务架构演进打下坚实基础:

模块 文件数 职责
auth/ 116 认证授权(JWT + API Key)
config/ 50 配置管理、版本控制
router/ 67 路由转发、适配器、负载均衡、熔断限流
monitor/ 98 监控指标、链路追踪
persistence/ 49 数据持久化(H2/Redis)
common/ 96 公共组件、DTO、工具类

收益

  • 代码职责清晰,单个文件平均行数下降 40%

  • 模块边界明确,未来可独立拆分为微服务

  • 开发效率提升,新人上手时间缩短 50%

2. 📊 Dashboard 实时指标

v2.7.0 重构了 Dashboard 数据源,从 Micrometer 实时获取真实业务指标,告别模拟数据:

  • 请求成功率/失败率

  • 平均响应时间

  • Token 使用量统计

  • 服务健康状态

技术实现 :通过 MetricsBatchReporter 组件,支持 HTTP 和文件两种上报方式,为后续对接 Prometheus/Grafana 做好准备。

3. 🔥 熔断器自适应阈值

新增 自适应阈值调整 功能,根据实时负载动态调整熔断阈值:

yaml 复制代码
circuit-breaker:
  adaptive:
    enabled: true
    min-calls: 10           # 最小调用次数
    failure-rate-threshold: 50  # 失败率阈值 (%)
    slow-call-rate-threshold: 80  # 慢调用率阈值 (%)

优势

  • 高峰期自动放宽阈值,避免误熔断

  • 低峰期收紧阈值,快速发现问题

  • 无需手动调参,智能适应业务波动

4. 🎤 STT(语音转文字)完整支持

v2.7.0 完善了 STT 端点的多部分请求处理,支持语音文件上传:

python 复制代码
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8080/v1", api_key="not-needed")

with open("speech.mp3", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="whisper",
        file=audio_file
    )
print(transcript.text)

支持后端:GPUStack、Xinference、LocalAI、OpenAI

5. 🧪 测试覆盖率提升

测试覆盖率从 28% 提升到 32.2%,新增:

  • Controller 层单元测试(34 个)

  • Service 层单元测试(24 个)

  • Filter 层单元测试(22 个)

  • Validator 单元测试(15 个)

质量保障 :721 个测试全部通过,Checkstyle 警告减少 46%


快速开始

1. 一键启动

bash 复制代码
docker run -d --name jairouter -p 8080:8080 sodlinken/jairouter:latest

2. 访问管理控制台

打开浏览器访问:http://localhost:8080/admin

默认账号

  • 用户名:admin

  • 密码:ChangeMeOnFirstStartup123456(开发环境默认值)

⚠️ 生产环境:请通过环境变量设置强密码:

bash 复制代码
docker run -d --name jairouter -p 8080:8080 \
  -e INITIAL_ADMIN_PASSWORD="YourSecurePassword!" \
  sodlinken/jairouter:latest

3. 配置第一个服务

通过管理控制台或 API 添加服务实例:

bash 复制代码
# 添加 Ollama 实例
curl -X POST http://localhost:8080/api/config/instance/add/chat \
  -H "Content-Type: application/json" \
  -d '{
    "name": "llama3.2",
    "baseUrl": "http://localhost:11434",
    "path": "/v1/chat/completions",
    "weight": 1
  }'

4. 调用 API

python 复制代码
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="not-needed"
)

response = client.chat.completions.create(
    model="llama3.2",
    messages=[{"role": "user", "content": "你好!"}]
)
print(response.choices[0].message.content)

功能对比

特性 JAiRouter Nginx One-API
OpenAI 兼容 API
负载均衡
限流保护
熔断降级
Web 控制台
配置热更新
版本控制
分布式追踪
开源免费

支持的后端服务

后端 Chat Embedding Rerank TTS STT Image
Ollama - - - -
vLLM - - - -
GPUStack
Xinference
LocalAI -
OpenAI -

性能基准测试

在 Ubuntu 22.04(16核/32GB RAM)环境下的测试结果:

场景 直接访问 Ollama 通过 JAiRouter 性能开销
单次请求 1.2s 1.21s <1%
100 并发 45s 48s ~6%
启用限流 N/A 可配置 -
启用熔断 N/A 自动故障转移 -

企业级特性

安全认证

  • JWT 双 Token :Access Token + Refresh Token,支持自动续期

  • API Key 管理 :支持创建、撤销、过期控制

  • 密码加密:SHA-256 哈希存储,无明文泄露风险

可观测性

  • Prometheus 指标/actuator/prometheus 端点

  • OpenTelemetry 追踪:完整的链路追踪支持

  • 审计日志 :所有操作可追溯

高可用

  • 熔断降级 :自动故障转移

  • 限流保护:Token Bucket / Sliding Window 算法

  • 状态持久化:H2(默认)/ Redis 存储


社区与支持


总结

v2.7.0 是 JAiRouter 项目的一个重要里程碑:

  1. 架构升级:完成 Package 结构重组,为微服务化做好准备
  2. 体验提升:Dashboard 实时指标、熔断器自适应、STT 完整支持
  3. 质量保障:测试覆盖率提升、代码警告减少

如果你正在寻找一个 统一管理 AI 模型服务的网关,JAiRouter 值得一试!


感谢点赞!

如果这个项目对你有帮助,欢迎 Star ⭐ 支持: