Как будет работать статическая переменная в веб-ферме? - PullRequest
3 голосов
/ 21 января 2012

У меня есть статический класс со статическим словарем для отслеживания статистики.Является ли этот подход жизнеспособным в среде с одним и несколькими серверами?

Ответы [ 4 ]

4 голосов
/ 21 января 2012

Нет, статическая переменная в памяти на одном сервере не будет видна или синхронизирована с другими серверами.

Поскольку вы упоминаете «отслеживание статистики», то, что в конечном итоге делают многие фермы серверов с несколькими экземплярами- это постобработка локально собранных данных в сводное представление активности на всех серверах.Каждый сервер на короткое время (несколько минут) накапливает статистику в памяти, а затем записывает данные из памяти в файл журнала в локальной файловой системе.Каждые несколько часов или ежедневно пакетный процесс копирует файлы журналов с каждого сервера в ферме в центральное место и объединяет все записи журнала вместе, чтобы сформировать один набор данных.Одним полезным побочным продуктом этого может быть консолидация активности пользователей на нескольких серверах, если веб-запросы пользователя обслуживаются разными серверами в одной ферме (балансировка нагрузки).

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

Google Sawzall является примером очень крупномасштабной системы распределенной обработки данных.Я полагаю, что Sawzall (или был) используется в Google для обработки журналов доступа к серверу для обнаружения мошеннических шаблонов кликов объявлений.

4 голосов
/ 21 января 2012

Не в многосерверной среде.Если только это не словарь .Net, а тот, который работает с базой данных или каким-либо другим внешним хранилищем.Также в среде с одним сервером вы должны помнить, что Словарь будет очищаться при каждом обновлении IIS.

2 голосов
/ 21 января 2012

Нет, это невозможно в многосерверной среде веб-фермы.

Параметры режима состоянияявляются:

  • InProc режим, который сохраняет состояние сеанса в памяти на веб-сервере. Это режим по умолчанию .

  • StateServer , который сохраняет состояние сеанса в отдельном процессе, называемом службой состояний ASP.NET.Это обеспечивает сохранение состояния сеанса при перезапуске веб-приложения, а также делает состояние сеанса доступным для нескольких веб-серверов в веб-ферме.

  • SQLServer режим сохраняет сеанссостояние в базе данных SQL Server.Это обеспечивает сохранение состояния сеанса при перезапуске веб-приложения, а также делает состояние сеанса доступным для нескольких веб-серверов в веб-ферме.

  • Режим Custom , которыйпозволяет указать пользовательский поставщик хранилища.

  • Выкл. (отключает состояние сеанса)

1 голос
/ 21 января 2012

Обычно это то, для чего вы будете использовать состояние приложения.

...