我有一个HTTP应用程序,其中包含运行良好的独立工作程序。问题是有时他们需要清除和重建他们的缓存,所以他们停止响应长达30秒。
我已经研究了许多负载均衡器,但它们似乎都没有解决这个问题。我尝试过Perlbal和一些Apache模块(比如fcgid),他们很乐意向忙于重建缓存的工作人员发送请求。
所以我的看法是这样的:是不是有某种消息总线解决方案,其中所有的http请求都排队等待,让工作人员能够处理消息时能够处理消息?
或 - 或者 - 负载均衡器可以考虑到工作人员有时无法响应。
稍后添加:我知道一个策略可能是工作人员可以使用管理协议在负载均衡器忙碌时通知负载均衡器,但是这个解决方案看起来很糟糕,我担心会有是一些导致虚假错误的边缘情况。
答案 0 :(得分:5)
如果您使用Amazon Web Services Load Balancer,您可以获得所需的结果。您可以将Elastic Load Balancer(ELB)背后的EC2实例标记为不健康,同时执行此缓存清除和重建。
我要做的是为每个实例创建一个额外的端点,例如rebuild_cache
。因此,如果ELB后面有5个实例,则可以创建一个脚本来命中rebuild_cache
端点上的每个单独实例(而不是通过负载均衡器)。这个端点可以做三件事:
答案 1 :(得分:2)
我在这里看到两种策略:让工人离线这段时间,所以平衡器会放弃它;逆控制 - 工作人员从平衡器中提取任务,而不是平衡器将任务推送给工人。第二个策略很容易使用Message Queue。