我们正在努力解决使用 Windows 身份验证的 ASP.NET MVC 网站的性能问题。
当用户进行身份验证时,首次向网站发出请求时响应时间非常慢。此外,每次从浏览器发送授权标头时,响应时间都会增加很多秒。执行的文件和 CSS 和 JS 等静态内容都会发生同样的问题。
只有具有特定角色的用户才能访问该应用程序,我们现在计划允许所有经过身份验证的用户访问静态文件,看看是否有帮助。
使用的身份验证方法是 NTLM。
我们应该如何进一步查明为什么身份验证会大幅降低性能?
答案1
这个问题很难弄清楚。经过一段时间的调查,我们发现这个问题是偶尔出现的,并不是一直存在的。
我们曾经nltest /dclist:<domain_name>
获取过客户环境中所有域控制器的完整列表,发现他们有 13 个域控制器。通过使用nltest /dsgetdc:<domain_name
>,我们可以看到,每当服务器连接到主域控制器 (PDC) 时,由于 DC 上的流量/负载较高,身份验证就会很慢。每当应用程序使用其他十二个域控制器之一时,网站就会正常运行。
我们可以通过针对特定 DC 执行 LDAP 查找来重现该问题,因为应用程序正在执行大量 LDAP 查找,并且对 PDC 之外的 DC 进行硬编码可能会有所帮助,但会导致单点故障场景。
解决方案是指定一个单独的站点,其中包含两个 DC,用于为上述应用程序和其他应用程序提供服务