我有一个带有两个实例的 Azure Web 角色。两个实例都“准备就绪”——运行正常。
在我的桌面上,我有四个相同程序的实例同时运行并使用 HTTP 请求访问 Web 角色 URL。然而,根据日志,所有请求都仅分派到实例 0。我需要将请求分派到两个实例以测试并发操作。
为什么请求没有分派到第二个实例,我如何让它们在那里分派?
我有一个带有两个实例的 Azure Web 角色。两个实例都“准备就绪”——运行正常。
在我的桌面上,我有四个相同程序的实例同时运行并使用 HTTP 请求访问 Web 角色 URL。然而,根据日志,所有请求都仅分派到实例 0。我需要将请求分派到两个实例以测试并发操作。
为什么请求没有分派到第二个实例,我如何让它们在那里分派?
这可能来自负载均衡器优化请求路由,因为所有请求都来自同一个 IP。虽然看起来很像,但 Azure 中的 LB 并不是真正的愚蠢循环。
如果您只是没想到这一点,但服务器正在处理负载,那么您就可以了。您甚至可以关闭第二个实例,直到您的指标显示服务器正忙(为您节省资金)。
如果您需要能够从同一个 IP 进行负载平衡,那么我可能会考虑使用队列。尽管这对于 Web 请求来说是不寻常的(与某些后端处理相比)。
看起来这种行为是由于 IIS“保持活动状态”(<system.webServer><httpProtocol allowKeepAlive="true">
。因为“保持活动状态”一旦客户端由实例提供服务,它就会被该实例卡住。
禁用“保持活动”会删除它,并且请求现在或多或少随机地到达所有实例。MSDN 表示禁用“保持活动”可能会降低性能,但为了测试并发操作,它会没问题。