Solidway
Solidway 不做的三件事
多数网关通过改写流量来体现价值。Solidway 的设计约束恰好相反。
- 01不做
不碰请求内容
请求体、响应体、Header 顺序与流式分块边界都保持原样。不做 schema 转换,不丢弃字段,不改写提示词。
- 02不做
不把重试暴露给调用方
当某个上游变慢或不可用时,请求在网关内部切换到下一个目标。客户端收到的是一份响应。
- 03不做
不隐藏发生过什么
每一次尝试的延迟、Token 用量、成本与错误分类都会按 provider、模型、密钥记录,并可通过 OpenTelemetry 导出。
Features
转发路径之外运行的能力
转发是快路径。以下能力按请求逐次判定,不改变你发出的字节。
故障转移
可跨 provider、模型与密钥配置有序回退链。每次尝试使用独立的超时预算,上游变慢不会吃掉整个请求的时限。
failover
负载均衡
在密钥与端点之间按权重分配流量,健康评分依据实际观测到的延迟与错误率调整,而不是固定权重表。
load-balancing
熔断
当某个目标报告凭据、配额、权限或限流问题时,将其暂停轮转;待等待时间结束,再用一次探测确认是否可以继续服务。
circuit-breaking
可自托管
单个静态二进制。可用 Docker、Kubernetes 或裸机部署在你自己的网络内,运行时不连接外部控制面。
self-hosted
数据统计与分析
按 provider、模型、密钥与工作区统计请求量、Token、成本与延迟,便于把开销归属到具体团队。
analytics
容量预警
针对配额使用率、错误率与 p99 延迟设置阈值与趋势告警,在触达上限之前发送到邮件、Slack 或 Webhook。
capacity-alerts
Architecture
透明的转发路径
请求路径分为三段,只有中间一段由我们处理。
client
客户端
你的应用,任意 SDK
gateway
rustSolidway
路由、计量、健康
- 选择目标
- 记录用量
- 判定健康
- 保留字节
主目标
上游 5xxprovider-a/gpt-6-astra
回退目标
返回响应provider-b/gpt-6-astra
当主目标失败时,请求由回退链中的下一个目标承接。
Rust
用 Rust 编写
单个静态链接的二进制。没有垃圾回收器,没有解释器,宿主机上也不需要安装运行时依赖。
没有垃圾回收
内存按确定时机释放,延迟分布的尾部不受回收停顿影响。
只需分发一个文件
构建产物是 x86-64 或 arm64 的单个二进制。没有运行时包、没有 sidecar,也不需要维护版本矩阵。
负载下内存占用平稳
吞吐随可用核心数变化,稳态内存由连接池配置决定,而不是由堆大小决定。
编译期内存安全
在安全 Rust 中,借用检查会在构建之前拦截缓冲区溢出、释放后使用这一类缺陷。
Observability
数据统计与预警
每个请求产生一条记录。记录可在面板中查询,也可通过 OpenTelemetry 导出。
统计面板(示例)
最近 24 小时- 请求数
- 1,284,930
- 错误率
- 0.31%
- p99 延迟
- 1.42s
- 成本
- $2,418
+4.1%
-0.12%
+0.04s
+2.8%
延迟分布
| 目标 | 流量占比 | 错误率 | 状态 |
|---|---|---|---|
| openai / gpt-6-sol | 52% | 0.18% | 服务中 |
| anthropic / claude-sonnet-5-5 | 31% | 0.24% | 服务中 |
| bedrock / claude-opus-5-5 | 14% | 1.10% | 降级 |
| azure / gpt-6-astra | 3% | — | 已暂停 |
示例数据,用于展示布局