我目前正在研究大规模应用程序优化和扩展,通过我的研究,我已经掌握了使用DNS Round Robin进行大规模扩展的标准方法,以便在负载均衡器之间分配负载,使用负载平衡来划分流量像Nginx这样的Web服务器,它再次使用负载平衡技术来划分应用程序服务器池上的流量,直到您点击数据库为止。
这很好地适用于负载平衡器自身达到极限的点。据我所知,这就是通常用事件队列和工作人员代替负载均衡器的地方。工作人员从一个或多个队列中选择作业,他们完成工作并将结果放入传出队列中。其他工作人员获取这些结果,处理它们并将结果放入另一个传出队列等等,直到最终格式化数据(JSON,HTML等)将被发送到客户端。
这是我现在有点困惑的地方。当一个人走到这些长度,从前到后,再到前面,一直有一个超级可扩展的非阻塞架构,如何采取最后一步并实际将数据传递给用户?用户连接到例如服务器A,而服务器B上的工作人员可能是完成数据处理的工作人员,因为它在服务器A之前有空闲时间。服务器B如何在不等待服务器A获得业余时间的情况下获得对客户端的响应?
我希望这是有道理的。如果没有,请随时询问后续行动。
谢谢!
答案 0 :(得分:1)
不确定你的意思
在典型的Web环境中,客户端已连接或连接到 特定服务器,比如服务器A
通常,在负载均衡器后面仍然有几个Web服务器来处理高容量,当用户浏览站点时,请求可以发送到任何Web服务器,除非您专门配置负载均衡器以发送每个用户会话向同一服务器请求,这不是从可伸缩性角度来看的最佳选择。所以让我们考虑一个例子:
您有两个网络服务器: Web1 和 Web2
两个工作人员服务: Worker1 和 Worker2
两个队列: Q1 用于传入请求, Q2 用于结果。
当用户点击按钮保存某些更改时,请求会重定向到,请说 Web1 。 Web1 将请求置于 Q1 ,并将OK状态发送回客户端。然后,任何工作人员从队列中提取请求,处理它并将结果放入 Q2 。然后,其中一个网络服务器,让它说 Web2 ,从 Q2 中提取结果并将其发送给客户端。
我认为很明显,两个Web服务器都可以访问结果队列,并可以将请求发送回客户端。据我所知,您想知道最后一步是如何实现的,即结果如何发送给客户端。有很多方法可以做到:
我不会描述每个选项,因为它超出了问题的范围,但您可以谷歌了解有关该主题的更多信息。但是,为了清楚说明,让我们从客户端角度考虑使用Long轮询的相同示例。
当用户点击按钮时,会显示进度微调器并将请求发送到后端。然后快速响应请求成功排队。然后我们做一个轮询请求,可以发送到任何Web服务器。由于我们对结果感兴趣,因此仍然显示微调器。然后,只要在后端处理请求,轮询请求就会返回结果,我们现在可以删除微调器并可能显示一条消息。
请注意,所描述的参议院只是许多可能的,但我希望它能为你提供一个很好的解释,说明在这种情况下的工作原理。