Skip to content

路由策略

路由策略决定了 Snail AI Server 如何将智能体的推理请求分发到应用下的各个客户端节点。选择合适的路由策略对于保证系统的性能、稳定性和资源利用率至关重要。

策略概览

Snail AI 提供 6 种内置路由策略:

策略标识中文名称核心思想
Least LoadLEAST_LOAD最少负载选择当前负载最轻的节点
Round RobinROUND_ROBIN轮询按顺序依次分发到各节点
Consistent HashCONSISTENT_HASH一致性哈希相同会话路由到同一节点
RandomRANDOM随机随机选择一个在线节点
LRULRU最近最少使用选择最近最少被分配请求的节点
FirstFIRST固定首节点始终选择第一个可用节点

策略详解

1. 最少负载(Least Load)

标识LEAST_LOAD

工作原理:Server 实时跟踪每个节点的当前活跃对话数(activeChats)和最大并发容量(maxConcurrent),计算各节点的负载率,并将新请求分发到负载率最低的节点。

负载率 = activeChats / maxConcurrent
选择 → 负载率最低的在线节点

适用场景

  • 各节点的硬件配置不同(异构集群),maxConcurrent 值不同。
  • 希望充分利用所有节点的计算能力。
  • 对话处理时间差异较大的场景。

优势

  • 自动适应节点能力差异,配置高的节点自然承担更多请求。
  • 能够动态应对负载波动,避免单节点过载。

注意事项

  • 依赖节点心跳中上报的实时负载数据,心跳延迟可能导致短暂的负载不均。

推荐

最少负载是默认且推荐的路由策略,适用于大多数生产场景。

2. 轮询(Round Robin)

标识ROUND_ROBIN

工作原理:维护一个全局计数器,按顺序将请求依次分发到各在线节点。第 1 个请求发到节点 A,第 2 个发到节点 B,第 3 个发到节点 C,然后循环回到节点 A。

请求 1 → Node A
请求 2 → Node B
请求 3 → Node C
请求 4 → Node A(循环)
...

适用场景

  • 各节点硬件配置相同(同构集群)。
  • 每个对话的处理时间大致相同。
  • 希望请求分配绝对均匀。

优势

  • 实现简单,分配绝对均匀。
  • 不依赖节点的实时状态信息。

注意事项

  • 不考虑各节点的实际负载情况。如果某些对话处理时间较长,可能导致部分节点积压。
  • 不适合异构集群(节点能力不同)场景。

3. 一致性哈希(Consistent Hash)

标识CONSISTENT_HASH

工作原理:将请求的会话标识(如 conversationId 或用户 ID)通过哈希函数映射到哈希环上,确保相同标识的请求始终路由到同一个节点。当节点增加或减少时,只有少量请求需要重新映射。

Hash(conversationId) → 哈希环位置 → 对应节点
相同的 conversationId 始终映射到同一节点

适用场景

  • 需要会话亲和性(Session Affinity),确保同一对话的所有请求由同一节点处理。
  • 客户端节点维护了本地状态(如本地缓存、模型热数据)。
  • 减少跨节点状态同步的开销。

优势

  • 天然支持会话亲和性,避免上下文在节点间切换。
  • 节点扩缩容时影响范围小(只有少量会话需要迁移)。

注意事项

  • 如果某些会话特别活跃,可能导致对应节点过载。
  • 节点故障时,该节点上的会话会被重新分配到其他节点。

4. 随机(Random)

标识RANDOM

工作原理:从所有在线节点中随机选择一个节点处理请求。每次分配完全独立,不考虑历史分配情况。

可用节点 = [Node A, Node B, Node C]
选择 → 随机一个

适用场景

  • 简单测试和开发环境。
  • 节点数量较多且配置相同的场景。
  • 对分配均匀性要求不高的场景。

优势

  • 实现最简单,无状态。
  • 在大样本下趋近均匀分配。

注意事项

  • 短期内可能出现分配不均(随机性导致)。
  • 不考虑节点实际负载。

5. 最近最少使用(LRU)

标识LRU

工作原理:维护一个按"最近被分配请求的时间"排序的节点列表,优先选择最长时间未被使用的节点。每次分配后,被选中的节点移到列表尾部。

最近分配时间排序(从旧到新):
Node C (10:01) → Node A (10:03) → Node B (10:05)

新请求 → 选择 Node C(最久未使用)
更新后:
Node A (10:03) → Node B (10:05) → Node C (10:06)

适用场景

  • 希望各节点的使用频率尽量均匀。
  • 对话处理时间差异大,轮询可能导致部分节点积压。
  • 需要给各节点留出"冷却时间"的场景。

优势

  • 自然地实现了时间维度的均匀分配。
  • 避免了某个节点被连续多次选中的情况。

注意事项

  • 与轮询类似,不考虑节点的实际并发容量差异。

6. 固定首节点(First)

标识FIRST

工作原理:始终选择第一个可用的在线节点处理所有请求。只有当第一个节点不可用时,才会切换到下一个节点。

可用节点 = [Node A, Node B, Node C]
所有请求 → Node A
Node A 离线 → 切换到 Node B
Node A 恢复 → 切回 Node A

适用场景

  • 主备部署模式(Active-Standby),通常只使用主节点,备用节点仅在主节点故障时接管。
  • 单节点运行场景,只有一个 Agent Client 实例。
  • 开发和测试环境。

优势

  • 行为最简单和可预测。
  • 适合主备容灾场景。

注意事项

  • 所有流量集中在一个节点上,不具备负载均衡能力。
  • 备用节点在正常情况下完全空闲,资源利用率低。

策略选择指南

根据你的部署场景和业务需求,参考以下决策表选择合适的路由策略:

场景推荐策略原因
生产环境 - 通用场景最少负载自动适应负载变化,充分利用资源
生产环境 - 同构集群最少负载 或 轮询节点能力相同时,两者效果接近
生产环境 - 异构集群最少负载能自动适应不同节点的处理能力差异
需要会话亲和性一致性哈希确保同一会话由同一节点处理
主备容灾部署固定首节点主节点处理所有请求,备节点待命
单节点 / 开发测试固定首节点 或 随机只有一个节点时策略无差别
节点有本地状态一致性哈希减少状态迁移开销

配置路由策略

创建应用时设置

在创建应用时,路由策略是必填字段,默认值为"最少负载"(LEAST_LOAD)。

修改已有应用的策略

  1. 在应用管理列表中,点击目标应用的「编辑」按钮。
  2. 在路由策略下拉选择器中选择新的策略。
  3. 点击「确定」保存。

TIP

修改路由策略会立即生效,之后的新请求将按照新策略进行分发。已经在处理中的请求不受影响。

智能体绑定应用

将智能体绑定到应用后,该智能体的推理请求将通过应用的路由策略分发到客户端节点执行。

绑定步骤

  1. 进入智能体的配置页面。
  2. 在「执行应用」下拉选择器中选择目标应用。
  3. 保存智能体配置。

解绑

将「执行应用」设为空值即可解绑。解绑后,智能体的推理将回退到 Server 本地执行。

监控与调优

观察指标

配置路由策略后,建议关注以下指标来评估策略效果:

指标获取方式关注点
各节点活跃对话数节点列表的负载进度条分布是否均匀
各节点在线状态节点列表的状态指示灯是否有频繁离线
对话响应时间可观测性追踪是否有节点响应明显偏慢

调优建议

  • 如果发现负载分布不均匀,考虑从轮询/随机切换到最少负载。
  • 如果对话处理中频繁出现上下文丢失,考虑切换到一致性哈希以实现会话亲和。
  • 如果只有少量节点(1-2个),策略差异不大,使用默认的最少负载即可。

Apache 2.0 Licensed