项目

概况

个人资料

操作

负载均衡

目标是提供一个在多个后端之间进行负载均衡的通用接口,每个负载均衡器本身就像一个后端。

负载均衡器是一个 action,它从列表中选择一个后端(并通过 action_enter 执行它);如果后端因特定原因(过载/超时)而失败,负载均衡器
会再次被调用(ActionBackendFail callback)。

那么,负载均衡器关注的后端可能会出现什么问题呢?
  • 后端进程已终止
  • 无法启动后端进程
  • 后端过载
  • connect() 超时
  • connect() 重置(无后端监听,即进程已终止)

还有更多问题,例如数据发送后连接断开;但解决此类问题不应是负载均衡器的工作。

上述问题可分为两类
  • 超时/过载
  • 后端宕机

进程终止后重新启动等派生问题应在其他地方处理。

由于负载均衡器可以像其他 action 一样堆叠,在“actions-tree”中的一个路径中,最多只有一个负载均衡器应具有积压队列。

处理积压队列的一些想法
  • 后端具有以下状态:“正常”、“过载”、“宕机”、“宕机重试”
  • 队列具有以下状态:“正常”、“过载”、“宕机”
  • 如果并非所有后端都处于“宕机”或“宕机重试”状态,则保持/进入“正常”状态
  • 如果处于“正常”状态且所有后端都处于“宕机”或“宕机重试”状态,则进入“过载”状态并开始一个短超时
  • 如果处于“过载”状态且过载超时已达到,则进入“宕机”状态
  • 当处于“宕机”状态且所有后端都“宕机”时,则对所有请求返回“503 Service Unavailable”
  • “过载”的后端会在短暂超时(例如 3 秒)后或当来自该后端的另一个请求完成后再次尝试(切换到“正常”状态)。
  • “宕机”的后端会在短暂超时(例如 1 秒)后再次尝试(切换到“宕机重试”状态)。
  • 队列有上限,超出后返回“503 Service Unavailable”
  • 请求有查找后端的超时限制,超出后返回“504 Gateway Timeout”

stbuehler大约 11 年前更新 · 4 次修订