章节 01
导读 / 主楼:kvmux:一个零依赖、高性能的LLM推理网关,用C++20打造
kvmux是一个单二进制、零Kubernetes的OpenAI兼容网关,支持多后端(vLLM、llama.cpp、Ollama)统一接入,具备前缀亲和路由、熔断故障转移和细粒度延迟监控。
正文
kvmux是一个单二进制、零Kubernetes的OpenAI兼容网关,支持多后端(vLLM、llama.cpp、Ollama)统一接入,具备前缀亲和路由、熔断故障转移和细粒度延迟监控。
章节 01
kvmux是一个单二进制、零Kubernetes的OpenAI兼容网关,支持多后端(vLLM、llama.cpp、Ollama)统一接入,具备前缀亲和路由、熔断故障转移和细粒度延迟监控。
章节 02
章节 03
原作者与来源
POST /v1/chat/completions(流式和非流式)、GET /v1/models、健康检查和Prometheus指标端点\n- SSE流式传输:每帧数据立即写入并刷新,配合TCP_NODELAY保持token间延迟(ITL)不被聚合\n- 前缀亲和路由:相同前缀的请求会被路由到同一后端,复用其前缀缓存(一种客户端前缀哈希亲和,无需订阅引擎KV事件)\n- 熔断与准入控制:每个后端有独立的健康检查和熔断器,全局并发上限和FIFO等待队列保护后端,溢出时返回429并带Retry-After头\n- 延迟仪表:TTFT(首token时间)、token间延迟、端到端延迟、队列时间,以及网关自身增加的延迟,全部以Prometheus直方图暴露\n\n架构设计:请求如何流动\n\n请求进入kvmux后的处理流程:\n\n\n客户端 → 监听器 → 会话 → 准入控制 → 路由层 → 后端\n ↓ ↓ ↓\n SSE重流 并发限制+队列 前缀亲和/轮询\n (逐帧flush) +健康熔断\n\n\n每个后端都有独立的健康检查和熔断逻辑。路由层根据前缀哈希或轮询策略选择健康后端。SSE写入器将上游响应逐帧转发给下游客户端。\n\n快速上手:十分钟内跑起来\n\n以Ollama作为单一后端的最简配置为例:\n\n1. 安装并启动Ollama\n\nbash\ncurl -fsSL https://ollama.com/install.sh | sh\nollama serve &\nollama pull llama3.2:1b\n\n\n2. 构建kvmux\n\n需要CMake ≥ 3.28、GCC 13或Clang 18、Boost ≥ 1.83:\n\nbash\ngit clone https://github.com/mickelsamuel/kvmux.git\ncd kvmux\ncmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release\ncmake --build build\n\n\n3. 运行网关\n\nbash\n./build/kvmux --config config/ollama-quickstart.toml\n\n\n4. 测试流式响应\n\nbash\ncurl -N http://127.0.0.1:8080/v1/chat/completions \\\n -H 'Content-Type: application/json' \\\n -d '{\"model\":\"llama3.2:1b\",\"stream\":true,\n \"messages\":[{\"role\":\"user\",\"content\":\"什么是LLM网关?\"}]}'\n\n\n你会看到data: {...}帧逐个token流式返回。\n\n配置详解:TOML格式\n\nkvmux使用单一TOML配置文件。未知键会硬失败并指出行列号,避免静默忽略配置错误。配置包括:\n\n- 网关监听地址和端口\n- 指标端点端口\n- 全局并发限制和队列大小\n- 后端列表:每个后端指定URL、模型列表、健康检查参数、熔断阈值\n- 路由策略:prefix_affinity或round_robin\n\n前缀亲和路由的原理\n\nkvmux的前缀亲和是一种客户端哈希策略:根据请求消息的前缀计算哈希,将相同前缀的请求路由到同一后端。这利用了LLM推理引擎的前缀缓存机制——当相同前缀的KV缓存已存在于某后端时,后续请求可以复用,显著降低TTFT。\n\n注意:这是v1.0的近似实现,不订阅引擎KV事件。v1.1可能会引入更精确的缓存感知。\n\n延迟监控与Prometheus指标\n\nkvmux在:9090/metrics暴露Prometheus格式的指标,使用OpenTelemetry GenAI直方图桶:\n\n- kvmux_request_duration_seconds:端到端请求延迟\n- kvmux_time_to_first_token_seconds:首token时间\n- kvmux_inter_token_latency_seconds:token间延迟\n- kvmux_queue_time_seconds:队列等待时间\n- kvmux_gateway_overhead_seconds:网关自身处理开销\n\n这些指标可用于构建SLA监控和自动扩缩容策略。\n\n局限与未来方向\n\n当前kvmux处于"公开构建中"状态。主要局限:\n\n- 前缀亲和是近似实现,非精确的KV缓存感知\n- 基准测试结果(亲和vs轮询) pending裸机运行\n- 当前README中的性能数据仅来自WSL2环境的初步测试\n\n未来v1.1可能引入:\n- 引擎KV事件订阅,实现精确缓存感知\n- 更多后端类型支持\n- 更丰富的路由策略\n\n为什么用C++20?\n\n作者坦诚说明:选择C++20是因为其系统编程背景,以及代理热路径(逐帧重流token)值得直接控制。这不是声称"必须用C++",而是诚实的技术选择。\n\n结语\n\nkvmux为自托管LLM推理场景提供了一个轻量、高性能的网关解决方案。它填补了"简单反向代理"和"复杂服务网格"之间的空白——单二进制、零依赖、功能完整。对于需要统一多后端、关心延迟指标、希望保持基础设施简单的团队,kvmux值得评估。