在负载平衡环境中:来自给定组件的两个后续调用到达同一服务器的可能性有多大?
我来解释一下:如果组件 A 调用组件 B,然后失败,并且组件 A 重新尝试调用组件 B,那么同一台机器访问组件 B 的可能性有多大?
让我们假设软件是使用事务编写的,并且上述场景都将在单个会话中发生。即所谓的组件 A,在第二次调用组件 B 后仍在等待回复。
此外,我们假设对所有组件的所有调用都通过负载平衡服务进行,并且集群中的所有机器都安装了所有组件。
实际上,我希望第二次调用尝试不同的机器,而不是重试同一台机器。我是否必须自己进行手动负载平衡?(请说不!!!;-)
任何帮助、指导和反馈都将不胜感激。
谢谢
答案1
这个问题的答案完全取决于你的负载平衡机制。
从最基本的基于 Windows 的软件负载平衡(通过大量选项)到可高度配置的功能(例如 Zeus 的 ZXTM 或 Cisco 的 ACE),在功能上存在巨大差距。
在任何高端解决方案中,您所要求的都非常简单,如果不知道您喜欢的解决方案是什么,我无法回答。
答案2
我们成功使用 Cisco CSM(ACE 的第一代)将自定义套接字调用负载平衡到专用后端数据库服务器(当时运行自定义 C 套接字)。以前,前端 Web 服务器必须超时并自行重试不同的套接字,但在部署到 CSM 后,我们实际上看到平均请求时间有所减少,因为 CSM 消除了所有超时。
在大多数负载平衡硬件上,第二次调用“到另一台机器”相当容易配置。通常你甚至可以根据后端服务器的响应配置“故障”。
答案3
这实际上取决于您的负载平衡由什么执行以及它的可配置性。例如,如果您选择使用使用 LVS 的 Linux 机器作为负载平衡器,则可以在多种负载平衡方法中进行选择,包括循环(听起来就是您想要的)、源地址哈希等。
大多数其他负载平衡解决方案也具有类似的功能,因此无论您如何配置它都可以工作。