我在25服务器webfarm上运行了一个asp.net(4.5.1)Web应用程序。该应用程序主要是带有几个webforms的webapi。它是单页应用程序的后端。
我们的应用程序会进行大量的出站后端休息调用。我们使用HttpClient。大约6个月前,我们发现了使用HttpClient和SSL端点(HTTPS)的性能问题。在高负荷下,我们看到失去了连接。事实证明,我们在每个请求的使用中创建了一个新的HttpClient。这适用于HTTP,但是当我们切换到使用HTTPS进行调用时,我们遇到了性能问题。为了解决这个问题,我们将HttpClient设置为静态,以便重用它。我们推测,延迟和丢失的连接是由每次调用重新建立SSL连接引起的。通过使其静态,我们使用了一些维护SSL连接的内部.Net功能。
最后,在这次改变之后,我们通过这样做减少了我们的响应时间,一切似乎都没问题。不再失去联系。
....直到前几天我们发现了一个问题。
我们称之为服务之一就是维护停机。在停机期间,他们重定向到维护页面。我们的HttpClient正在跟踪重定向,所以我们结束了生成错误,因为我们期待json,而不是维护html页面。这是预料到的。
问题是维护完成后,其他服务上的重定向被删除了。我们的25台服务器中有两台继续打到重定向页面而不是它们本应打的页面。
我只能假设这是由于使用静态HttpClient,因为当我们的应用程序池最终被回收(每天早上安排)时,问题就消失了。
有没有人对此有任何想法或想法?我错过了什么吗?你认为这是由静态HttpClient引起的吗?您能想出任何方法来降低再次发生这种情况的风险吗?