AIBrix 路由器#

AIBrix 路由器是一个可插拔的智能流量管理组件,嵌入在 AIBrix LLM 服务堆栈中。它被设计为通过外部处理钩子的 Envoy Gateway 扩展,作为所有 LLM 推理请求的单一入口点。

此网关抽象了管理多个模型、LoRA 适配器、异构 GPU 后端和各种扩展策略的底层复杂性。

gateway-design

详细序列流#

        sequenceDiagram
    participant Client
    participant Envoy
    participant GatewayPlugin
    participant Router
    participant Cache
    participant InferencePod

    Client->>Envoy: POST /v1/chat/completions
    Envoy->>GatewayPlugin: External Processing Hook
    GatewayPlugin->>Router: Make routing decision
    Router->>Cache: Query pod metrics & KV state
    Cache-->>Router: Return latest metrics
    Router->>Router: Apply routing algorithm
    Router->>InferencePod: Forward request to selected pod
    InferencePod-->>Router: Return streamed tokens
    Router-->>GatewayPlugin: Return response
    GatewayPlugin-->>Envoy: Pipe back response
    Envoy-->>Client: Complete streaming
    

支持的路由策略#

AIBrix 内置了一组算法,每种算法都针对不同的工作负载模式进行了优化

  • random: 将请求路由到随机 Pod。

  • least-request: 将请求路由到正在进行请求最少的 Pod。

  • throughput: 将请求路由到已处理总加权令牌最少的 Pod。

  • prefix-cache: 将请求路由到已有一个 KV 缓存与请求提示前缀匹配的 Pod,包括负载均衡和多轮对话。

  • least-busy-time: 将请求路由到累积繁忙处理时间最短的 Pod。

  • least-kv-cache: 将请求路由到当前 KV 缓存大小最小(使用 VRAM 最少)的 Pod。

  • least-latency: 将请求路由到平均处理延迟最低的 Pod。

  • prefix-cache-preble: 在考虑前缀缓存命中和 Pod 负载的情况下路由请求,实现基于 Preble:用于 LLM 服务的高效分布式提示调度:https://arxiv.org/abs/2407.00023

  • vtc-basic: 使用混合分数平衡公平性(用户令牌计数)和 Pod 利用率路由请求。它是虚拟令牌计数器 (VTC) 算法的简单变体。更多详情请参见 Ying1123/VTC-artifact

  • pd: 为预填充-解码分离路由请求,将处理分为预填充和解码 Pod,以优化性能。

  • session-affinity: 通过将目标 Pod 的地址 (IP:Port) 编码为 x-session-id 头部中的 base64 编码值来启用粘性会话路由。在后续请求中,如果头部存在且有效,网关会尝试路由到同一个 Pod。如果 Pod 不再就绪(例如,缩减或驱逐),它会回退到选择一个随机就绪的 Pod 并发出新的会话 ID。

核心原则#

通过维护高频的本地指标缓存(通过定期拉取和订阅),路由器可以应用复杂的多元路由逻辑,而无需阻塞对 Pod 的实时查询。这确保了热路径上的低开销,允许扩展到每秒数千个查询。

如何扩展路由算法#

路由框架被设计为高度可插拔,通常遵循以下结构

// Router defines the interface for routing logic to select target pods.
type Router interface {
    // Route selects a target pod from the provided list of pods.
    // The input pods is guaranteed to be non-empty and contain only routable pods.
    Route(ctx *RoutingContext, readyPodList PodList) (string, error)
}

参数和返回值详情

参数:

  • ctx *RoutingContext: 包含请求级别信息,例如头部、模型名称等。

  • readyPodList PodList: 可用且符合路由条件的候选 Pod 列表。此列表已预过滤并保证非空。

返回值:

  • 所选 Pod 的 IP 地址,如果选择失败则返回错误。

添加新算法

  • 实现 Router 接口(根据插件模式,可以是 Go、Python 或 WASM)。

  • 通过路由器的注册表注册策略名称。

  • 通过 HTTP 头部 routing-strategy: your-strategy 或通过策略配置指定它。