Как работает global.asax в ферме серверов?

Я не понимаю, как файл global.asax будет работать в ферме серверов. Каждый сервер имеет свой собственный экземпляр или это общий экземпляр.

Например, в моем global.asax в событии Application_Start я инициализирую одноэлементный объект, который собирает статистику и обновляет таблицу базы данных, содержащую статистику. Что из следующего происходит?

Сценарий первый

  • Сервер 1 -> (Stat = 10) -> Обновляет базу данных с 10
  • Сервер 2 -> (Stat = 8) -> Обновляет базу данных с 8
  • Сервер 3 -> (Stat = 25) -> Обновляет базу данных с 25
  • Сервер 4 -> (Stat = 5) -> Обновляет базу данных с 5

В первом примере каждый сервер обновляет базу данных своей собственной коллекцией.

Сценарий Два

  • Сервер 1 -> (Stat = 10) -> Обновляет базу данных с 10
  • Сервер 2 -> (Stat = 10) -> Обновляет базу данных с 10
  • Сервер 3 -> (Stat = 10) -> Обновляет базу данных с 10
  • Сервер 4 -> (Stat = 10) -> Обновляет базу данных с 10

В приведенном выше примере серверы имеют доступ к одной и той же коллекции. Это возможно?

2 ответа

Решение

Серверы не знают друг друга, поэтому файл global.asax запускается отдельно для каждого процесса и сервера. Это верно даже в том случае, если вы настроили IIS для разрешения нескольких рабочих процессов на одном сайте и на одном компьютере. Каждый рабочий процесс будет иметь свой собственный global.asax Application_Start(),

Таким образом, чтобы ответить на ваш вопрос напрямую, Сценарий Один будет более точно моделировать то, что на самом деле происходит в веб-ферме.

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

Другой вариант - использовать сервер состояний ScaleOut (SOSS), который, как я видел, используется в средах высокой доступности.

[Это] запускается на каждом сервере в веб-ферме или на ферме серверов приложений для хранения критически важных данных рабочей нагрузки. Сетка данных в памяти ScaleOut State Server со встроенным распределенным кэшированием в памяти обеспечивает чрезвычайно быстрый доступ к критически важным, но быстро меняющимся данным, а их производительность и емкость растут по мере добавления серверов в ферму. Программное обеспечение автоматически реплицирует сохраненные данные между серверами, чтобы критические данные не терялись при сбое сервера, и оно поддерживает масштабируемый, высокодоступный доступ, который не может дублировать автономный сервер базы данных (или даже отказоустойчивый кластер базы данных). Вы также можете использовать версию ScaleOut State Server для Windows для прозрачного сохранения и получения состояния сеанса ASP.NET.

Другие вопросы по тегам