负载均衡器粘性会话和非常老的Web服务

3
通过硬件负载均衡器,你可以配置粘性会话,以确保相同的会话始终进入同一台服务器。但是这对 WebServices 也适用吗(而不仅仅是 Web 服务器)?例如,我有一个 WebServices 托管在负载均衡器后面。来自不同本地客户端(而不是浏览器客户端)的 Webservice 调用是否总是进入同一个 Webservice 服务器?这些是非常老式的 WebServices——使用 RPC/Encoding——原生客户端程序使用 Axis 1.4 作为客户端存根。
3个回答

1
不同的本地客户端(而非浏览器客户端)发起的Webservice调用应该都能够发送到同一个Webservice服务器。为了维持会话黏性,大多数负载均衡在向客户端响应时将服务器标识符注入cookie中(请注意,cookie不是浏览器功能,而是HTTP功能,由this specification定义),并且需要由Axis 1.4使用的HTTP客户端支持。建议您分析负载均衡的工作原理,并根据此更改客户端需求。如果您的负载平衡使用基于cookie的方法,this answer可能会对您有用。希望这可以帮助您。

0

如果您能保持应用程序无状态,那么它在性能和可扩展性方面都很好。

无状态的好处:

  • 可扩展性。您可以拥有尽可能多的服务器而不必共享用户会话。每个服务器都可以处理请求(例如通过轮询进行负载平衡)。

  • 节省服务器资源。我们不需要在服务器端分配内存(再次提到可扩展性)。

  • 无需在服务器重新启动后恢复。

会话粘滞可能很难正确实现。例如,如果您的Web服务器运行在多核机器上,并且有几个进程处理Web流量,则需要一种方法来同时粘滞到特定的机器和该机器上的单个进程。因此,请确保您的系统在粘滞性无法正常工作的情况下能够良好降级。

您可以在这里找到有关讨论:Sticky and NON-Sticky sessions

粘性会话的优缺点: 粘性会话/会话亲和负载平衡策略的优缺点?

现在来回答你的问题:

来自不同本地客户端(而非浏览器客户端)的Web服务调用是否总是发送到同一Web服务服务器?

在粘性会话中是的。

这些是非常老式的Web服务-使用RPC /编码-本地客户端程序使用Axis 1.4作为客户端存根。

您需要负载均衡器/服务器的会话配置,它可以处理任何旧型或新型应用程序。

这也适用于Web服务(而不是Web服务器)吗?

不是,这需要在服务器级别进行配置。


这完全没有回答我的问题。 - user93353
这个方案适用于既有基于Web服务器-浏览器客户端的程序,也适用于原生客户端- Web服务程序吗? - user93353
“Session configuration you need load balancer” 这句话是什么意思? - user93353
你需要负载均衡器来配置路由,在 Web 服务代码层面上,你无法配置粘性会话和轮询。 - vaquar khan
如前所述,负载均衡器已配置粘性会话。我的问题是,负载均衡器如何知道webservice调用的会话?我可以理解负载均衡器找出web服务器调用的会话,但它如何找出webservice调用中的会话呢? - user93353

0
只要您的本地客户端正确管理会话,即为每个请求设置正确的HTTP标头,它就可以正常工作。
通常,粘性会话由负载均衡器通过修改会话cookie以添加服务器标识来管理。 HA-proxy示例 您的负载均衡器必须有专门的文档。

什么是会话cookie?正如问题中所指出的,我不是在谈论由负载均衡器平衡的网站 - 而是一个Web服务。您提供的链接根本没有涉及到Web服务。 - user93353
设置会话标头。Web服务使用与其他请求相同的通道(http)。会话通常由浏览器使用cookie进行管理,在您的情况下,如果您的客户端(即axis)无法处理它,则可能需要自己设置标头。 - Gab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接