Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在寻找用于HTTP负载共享的消息总线_Http_Load Balancing_Middleware - Fatal编程技术网

正在寻找用于HTTP负载共享的消息总线

正在寻找用于HTTP负载共享的消息总线,http,load-balancing,middleware,Http,Load Balancing,Middleware,我有一个HTTP应用程序,它具有独立的工作程序,性能良好。问题是,有时他们需要清除和重建缓存,因此他们会停止响应长达30秒 我已经研究了许多负载平衡器,但它们似乎都没有解决这个问题。我试过Perlbal和一些Apache模块(比如fcgid),它们很乐意向忙于重建缓存的工作人员发送请求 所以我的观点是:难道没有某种消息总线解决方案,所有http请求都排队,让工作人员在有能力的时候处理消息吗 或者——或者——一个负载平衡器,它可以考虑工作人员有时无法响应 后来添加:我知道一种策略可能是工作人员在忙

我有一个HTTP应用程序,它具有独立的工作程序,性能良好。问题是,有时他们需要清除和重建缓存,因此他们会停止响应长达30秒

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

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

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


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

我在这里看到两种策略:让工作人员暂时脱机,所以平衡者会放弃它;反向控制-工作者从平衡器中提取任务,而不是平衡器将任务推给工作者。第二种策略很容易使用消息队列。

如果您使用Amazon Web服务负载平衡器,您可以达到预期的效果。当弹性负载平衡器(ELB)执行此缓存清除和重建时,可以将其后面的EC2实例标记为不健康

我要做的是为每个实例创建一个额外的端点,例如称为
rebuild\u cache
。因此,如果ELB后面有5个实例,则可以编写一个脚本来命中
rebuild\u缓存
端点上的每个单独实例(而不是通过负载平衡器)。此端点将执行3项操作:

  • 将实例标记为不健康。在健康检查失败后,负载平衡器将意识到它不健康(健康检查的时间和阈值可从AWS Web控制台配置)
  • 运行缓存清除和重建
  • 将实例标记为健康。负载平衡器将在实例上运行运行状况检查,并且仅在实例达到所需数量的运行状况检查后才开始发送流量(同样,此阈值是通过ELB运行状况配置定义的)

  • 事实上,我刚刚发现了Mongrel2项目,它承诺了与我上面描述的非常相似的东西,但我有点被他们的最新版本(1.8)似乎不稳定的事实所困扰(参见他们的问题#148)他们的主分支没有更新6个月。你可能想考虑改变你的缓存策略,使用一个自动删除的LRU或者别的什么。如果清除/重建导致您在30秒内放弃所有内容,那么您使用它的方式就有很大问题。@Kylar:我同意30秒的时间太长了,但到目前为止,这一部分很难更改。第一种策略似乎不起作用,因为平衡器会尝试将请求传递给工作人员,即使他们处于脱机状态。也许平衡器会很快放弃工作进程,但即使超时只有几秒钟,也将是一个显著的(读取:不可接受)延迟。总线解决方案应该有效。任何人只要能为我指明实现这一目标的现有工作技术的方向,就可以获得奖金。@mzedeler平衡器允许维护工作人员列表,所以只要在缓存重建之前注销工作人员即可。这是我现在决定做的,但闻起来像是糟糕的设计,由于环境的原因,我必须处理一些很难完全缓解的竞争条件,所以我使用(单线程,带有我无法控制的事件循环)。感谢您的反馈。希望我不会奖励你奖金,因为列出具体技术的要求还没有达到。@mzedeler当然,我觉得我没有帮你回答这个问题。我会让奖金系统奖励你一半奖金。我之所以不授予全部奖金,是因为您没有真正指出任何符合问题所述要求的消息传递技术。但除此之外,我感谢你的意见。谢谢,是的,这肯定进入了你文章的“选择”部分。我想我会提供投入,因为我有这个确切的设置,它的工作非常好。