Мы боремся с проблемами производительности на сайте ASP.NET MVC, который использует проверку подлинности Windows.
Время отклика очень велико на первый запрос к сайту, когда пользователь аутентифицируется. Кроме того, каждый раз, когда заголовок авторизации отправляется из браузера, время ответа увеличивается на несколько секунд. Та же проблема возникает как для исполняемых файлов, так и для статического содержимого, такого как CSS и JS.
Доступ к приложению ограничен пользователями с определенной ролью, и теперь мы планируем разрешить доступ к статическим файлам всем аутентифицированным пользователям, чтобы посмотреть, поможет ли это.
Используемый метод аутентификации - NTLM.
Как мы должны двигаться дальше, чтобы определить, почему аутентификация резко снижает производительность?
В этом вопросе было довольно сложно разобраться. После проведения исследований в течение некоторого времени мы обнаружили, что это было спорадическим и не всегда присутствующим.
Мы использовали nltest /dclist:<domain_name>
чтобы получить полный список всех контроллеров домена в среде клиентов, оказалось, что у них их 13. Используя nltest /dsgetdc:<domain_name
> мы могли видеть, что всякий раз, когда сервер был подключен к основному контроллеру домена (PDC), аутентификация была медленной из-за высокого трафика / нагрузки на DC. Всякий раз, когда приложение использовало один из других двенадцати контроллеров домена, сайт работал нормально.
Мы могли воспроизвести проблему с выполнением поиска LDAP для определенного контроллера домена. Поскольку приложение выполняло много операций поиска LDAP, а также жесткое кодирование контроллера домена, отличного от PDC, могло помочь в ситуации, но привело бы к сценарию единой точки отказа.
Решение заключалось в том, чтобы выделить отдельный сайт с двумя DC, которые будут обслуживать упомянутое приложение и другие.