操作
负载均衡¶
目标是提供一个在多个后端之间进行负载均衡的通用接口,每个负载均衡器本身就像一个后端。
负载均衡器是一个 action
,它从列表中选择一个后端(并通过 action_enter
执行它);如果后端因特定原因(过载/超时)而失败,负载均衡器
会再次被调用(ActionBackendFail callback
)。
- 后端进程已终止
- 无法启动后端进程
- 后端过载
- connect() 超时
- connect() 重置(无后端监听,即进程已终止)
还有更多问题,例如数据发送后连接断开;但解决此类问题不应是负载均衡器的工作。
上述问题可分为两类- 超时/过载
- 后端宕机
进程终止后重新启动等派生问题应在其他地方处理。
由于负载均衡器可以像其他 action 一样堆叠,在“actions-tree”中的一个路径中,最多只有一个负载均衡器应具有积压队列。
处理积压队列的一些想法- 后端具有以下状态:“正常”、“过载”、“宕机”、“宕机重试”
- 队列具有以下状态:“正常”、“过载”、“宕机”
- 如果并非所有后端都处于“宕机”或“宕机重试”状态,则保持/进入“正常”状态
- 如果处于“正常”状态且所有后端都处于“宕机”或“宕机重试”状态,则进入“过载”状态并开始一个短超时
- 如果处于“过载”状态且过载超时已达到,则进入“宕机”状态
- 当处于“宕机”状态且所有后端都“宕机”时,则对所有请求返回“503 Service Unavailable”
- “过载”的后端会在短暂超时(例如 3 秒)后或当来自该后端的另一个请求完成后再次尝试(切换到“正常”状态)。
- “宕机”的后端会在短暂超时(例如 1 秒)后再次尝试(切换到“宕机重试”状态)。
- 队列有上限,超出后返回“503 Service Unavailable”
- 请求有查找后端的超时限制,超出后返回“504 Gateway Timeout”