寻找HTTP负载共享的消息总线

mze*_*ler 6 middleware load-balancing http

我有一个HTTP应用程序,独立的工作人员表现良好.问题是有时他们需要清除和重建他们的缓存,所以他们停止响应长达30秒.

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

所以我的看法是这样的:是不是存在某种消息总线解决方案,其中所有的http请求都排队等待,让工作人员能够在他们能够处理消息时处理消息?

或者 - 或者 - 负载均衡器,可以考虑到工人有时无法响应.

稍后补充:我知道一个策略可能是工作人员可以使用管理协议在负载均衡器忙时通知负载均衡器,但是这个解决方案看起来很糟糕,我担心会有一些边缘情况会导致虚假错误.

Dre*_*wch 5

如果您使用Amazon Web Services Load Balancer,您可以获得所需的结果.您可以将Elastic Load Balancer(ELB)背后的EC2实例标记为不健康,同时执行此缓存清除和重建.

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

  1. 将实例标记为不健康.在运行状况检查失败后,负载均衡器将意识到运行状况不佳(运行状况检查的时间和阈值可从AWS Web Console配置).
  2. 运行缓存清除并重建
  3. 将实例标记为健康.负载均衡器将对实例运行运行状况检查,并且只有在运行状况良好后才开始发送流量以进行所需的健康运行状况检查(同样,此阈值通过ELB运行状况配置定义)


kan*_*kan 2

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