Распределяем нагрузку в зависимости от URL

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Имеем ASP.NET web приложение. Проблема в том, что приложение может выполнять как "обычные" запросы так и тяжелые запросы построения отчетов. Все запросы по умолчанию выполняются в одном Application Pool. И в случае обработки запросов на построение отчетов страдает производительность.

Задача: вынести построение отчетов в отдельный Application Pool на отдельный домен. Допустим основной сайт расположен на домене main.domain.xyz. Нам требуется все GET запросы содержащие в URL /Reports/Run обрабатывать на другом домене reports.domain.xyz.

Аутентификация

По умолчанию в нашем случае настройка следующая

<authentication mode="Forms">
 <forms loginUrl="~/Account/Login" timeout="2880" name="AUTH" />
</authentication>

Меняем на

<authentication mode="Forms">
 <forms loginUrl="~/Account/Login" timeout="2880" name="AUTHUNIQ" enableCrossAppRedirects="true" cookieSameSite="None" domain="domain.xyz"/>  
</authentication>

То есть сделали имя cookie уникальным и распространили на все поддомены нашего домена.

Machine Key

Чтобы аутентификация была валидна на обоих сайтах нужен одинаковый Machine Key. Удобнее всего настроить через IIS Manager. Заходим в раздел Machine Key и убираем галочки "Automatically generate at runtime". Получившиеся ключи должны быть одинаковы на обоих сайтах.

Редирект

В web.config

        <rewrite>
            <rules>
                <rule name="Reports" patternSyntax="Wildcard" stopProcessing="true">
                    <match url="*Reports/Run*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="reports.domain.xyz" negate="true" />
                    </conditions>
                    <action type="Redirect" url="https://reports.domain.xyz/{R:0}" />
                </rule>
            </rules>
        </rewrite>

Итого

Все тяжелые запросы вынесли в отдельный сайт. Который может быть расположен на отдельных ресурсах. Пользователь больше не может создать большую нагрузку на основном сайте путем выполнения тяжелых запросов на построение отчетов. Способ не универсальный, подойдет не для любого приложения.

Источник: https://habr.com/ru/post/573746/


Интересные статьи

Интересные статьи

Субботний вечер омрачен скандалом - сайт не работает, провайдер негодяй, админы - не специалисты, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битри...
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.
Этот пост будет из серии, об инструментах безопасности, которые доступны в Битриксе сразу «из коробки». Перечислю их все, скажу какой инструмент в какой редакции Битрикса доступен, кратко и не очень р...
От скорости сайта зависит многое: количество отказов, брошенных корзин. Согласно исследованию Google, большинство посетителей не ждёт загрузки больше 3 секунд и уходит к конкурентам. Бывает, что сайт ...