6

我有一个 HTTP 应用程序,其中包含运行良好的独立工作者。问题是有时他们需要清除和重建缓存,因此他们停止响应长达 30 秒。

我研究了许多负载均衡器,但似乎都没有解决这个问题。我已经尝试过 Perlbal 和一些 Apache 模块(如 fcgid),它们很乐意向忙于重建缓存的工作人员发送请求。

所以我的看法是这样的:难道没有某种消息总线解决方案,所有的http请求都排队,让工作人员在他们有能力的时候处理消息吗?

或者 - 或者 - 一个负载均衡器,它可以考虑到工作人员有时无法响应。

稍后添加:我知道一种策略可能是工作人员可以在忙碌时使用管理协议来通知负载均衡器,但是该解决方案似乎很笨拙,我担心会出现一些导致虚假错误的边缘情况。

4

2 回答 2

5

如果您使用 Amazon Web Services 负载均衡器,您可以获得您想要的结果。您可以在 Elastic Load Balancer (ELB) 后面的 EC2 实例执行此缓存清除和重建时将其标记为运行状况不佳。

我要做的是为每个实例创建一个额外的端点,例如调用rebuild_cache。因此,如果您的 ELB 后面有 5 个实例,您可以编写一个脚本来命中每个单独的实例(而不是通过负载均衡器)rebuild_cache端点上的每个单独的实例(而不是通过负载均衡器)。这个端点会做 3 件事:

  1. 将实例标记为不正常。负载均衡器将在健康检查失败后意识到它不健康(健康检查的时间和阈值可从 AWS Web 控制台配置)。
  2. 运行缓存清除并重建
  3. 将实例标记为健康。负载均衡器将对实例运行运行状况检查,并且只有在达到所需数量的运行状况检查后才开始向其发送流量(同样,此阈值通过 ELB 运行状况配置定义)
于 2013-04-03T01:39:55.707 回答
2

我在这里看到了两种策略:在一段时间内让一个工人离线,所以平衡器会放弃它;逆向控制 - 工作人员从平衡器中提取任务,而不是平衡器将任务推送给工作人员。第二种策略很容易使用消息队列。

于 2013-03-28T21:34:19.977 回答