Docker使用HTTP 503进行负载均衡

时间:2019-10-03 20:58:39

标签: docker load-balancing swarm

对于一个项目,我想使用GPU创建带有节点/副本的docker群。

由于默认的负载均衡方法是循环(并且根据this link负载均衡发生在TCP层4上),

我想知道是否可以使平衡器知道HTTP 503(服务不可用)的响应吗? 这意味着:如果某个节点/副本的GPU内存不足以处理此请求,因此使用HTTP 503进行响应,则平衡器应将该请求传递到下一轮的下一节点/副本,直到被接受为止(任何响应<500)

可以做到这一点吗?如果没有,是否可以创建类似的行为?

1 个答案:

答案 0 :(得分:1)

您可以尝试将服务定义为global,以使每个节点仅获得一个正在运行的服务。

然后,我们可以使用traefik(或类似的负载均衡器)来配置负载均衡逻辑:

  • 为您的服务配置health check,以监视503错误
  • 您还可以考虑使用weights来更正确地平衡工作负载

还有更多的“复杂”解决方案,例如HAproxykong proxyconsul

您也可以重新考虑您的体系结构,并将其转换为队列,而不是请求/响应。因此,请求将返回一个作业ID,您可以在处理该作业之后稍后再获取结果。

另一种选择是使用您喜欢的语言来实现代理逻辑,以处理503错误以将请求代理到其他节点。

我认为队列逻辑听起来更适合于您所描述的情况(尽管仅仅是)。