2010-12-28 2 views
4

Это очень широкий вопрос, но, надеюсь, я могу получить полезные советы. В настоящее время у меня есть приложение ASP.NET, которое работает на одном сервере. Теперь мне нужно масштабировать, чтобы удовлетворить растущие нагрузки клиентов. Поэтому мой план состоит в том, чтобы:Масштабирование приложения ASP.NET

1) Масштабировать ASP.NET и веб-компонент на пять серверов.

2) Переместите базу данных на ферму.

Я не верю, что у меня будет проблема с базой данных, так как это всего лишь один IP-адрес в отношении приложения. Тем не менее, теперь я беспокоюсь о ASP.NET и веб-уровне. Некоторые вопросы, я уже обеспокоен:

  • Является простая модель для реализации только балансировок нагрузки, которая будет откуп запросы к каждому из пяти серверов в циклическом режиме?

  • Есть ли проблемы с HTTPS и SSL-соединениями, теперь, когда они могут завершаться на разных физических серверах каждый раз, когда делается запрос? (например, производительность?)

  • Есть ли какая-либо озабоченность в отношении обслуживания сеанса (входа в систему) через файлы cookie? Я думаю, что нет, но не могу объяснить, почему ... ;-)

  • Есть ли проблемы с самими данными сеанса (хранимая сторона сервера)? Очевидно, мне нужно будет реплицировать состояние сеанса между серверами или каким-то образом заставить запрос перейти только на один сервер. В любом случае, я вижу здесь проблему ...

ответ

3

Как отмечает Дэвид, большая часть этого вопроса действительно больше административных вещей, и может быть полезны на ServerFault. Ссылка, которую он публикует, имеет хорошую информацию, чтобы справиться.

Для ваших вопросов Session: вам нужно посмотреть либо службу состояния сеанса (поставляется с IIS как отдельная служба, поддерживающая общее состояние между несколькими серверами), и/или сохранение состояния сеанса asp.net в SQL база данных. Я уверен, что оба варианта вы можете найти по ссылке Дэвида Страттона.

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

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

Балансировка нагрузки и обработка SSL-соединений могут выиграть от ситуации с обратным прокси-сервером; где прокси обрабатывает все входящие соединения, но все, что он делает, - это шифрование и балансировка фактической загрузки запроса на веб-серверы. (Эти вопросы более на конец администрации, конечно, но ...)


Cookies не будет проблем, если все веб-серверы рекламируете себя как тот же веб-сайт (через заголовки узлов , и т.д). Каждый сервер с радостью принимает файлы cookie, установленные любым другим сервером, используя одно и то же имя домена, не зная и не заботясь о том, какой сервер его отправил; Он основан на имени хоста сервера, к которому подключается веб-браузер, когда он получает значение cookie.

2

Это довольно широкий вопрос и сложно ответить на форуме в целом. Я даже не уверен, что вопрос здесь, или если он должен быть на сервере server.com. Однако ....

Microsoft предлагает множество рекомендаций по этому вопросу. Первый результат для «масштабирования приложений asp.net» от BING подходит именно к этому.

http://msdn.microsoft.com/en-us/magazine/cc500561.aspx

+0

+1 для хорошей ссылки и отмечая, что большая часть этой темы действительно выходит за рамки разработчика. –

0

Я видел некоторые проблемы, связанные с сессиями round robin http/https. Раньше мы использовали в сессиях процесса и сообщали балансирам нагрузки, чтобы сделать сеансы липкими. (Я думаю, что для этого они используют cookie).

Это позволило нам избежать сеансов SQL, но это означало, что при переключении с http на https наши F5-боксы не смогли сохранить липкость. Мы перешли на сеансы SQL.

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

1

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

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

Если вы использовали автоматическое увеличение целых чисел для ваших основных ключей (что большинство людей делает), то вы в основном вывернуты из ворот. Есть несколько способов временно смягчить это, но даже те, которые потребуют много догадок и имеют высокий потенциал столкновения. Одно смягчение включает в себя установку начального значения на каждом сервере на достаточно большое число, чтобы уменьшить вероятность столкновения ... Это, как правило, будет работать некоторое время.

Конечно, вы должны выяснить, как разделить пользователей на серверах ...

Я считаю, что эта область не должна быть отмел легко и почти всегда труднее, чем просто масштабирование «вверх «сервер базы данных, поставив его на большее оборудование.

Если вы намеренно создали модель данных с ролью нескольких мастеров, тогда любезно игнорируйте. ;)

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

Принимая во внимание БД и сетевой трафик, и их целью было уменьшить объем трафика и сетевой трафик, тогда вы поймете, как они больше не покупают вас.

+0

, если вы не используете данные сеанса, я могу настоятельно рекомендовать сервер кеширования, такой как Varnish, который позволит вам широкомасштабно сканировать часть стоимости размещения дополнительных реальных веб-серверов. –

0

База данных сеансов на сервере SQL может быть легко масштабирована с небольшим кодом & изменений конфигурации. Вы можете вставлять сеансы asp.net в базу данных сеанса и независимо от того, какой веб-сервер в вашей ферме обслуживает этот запрос, сопоставление состояния сервера sql на основе сеанса работает безупречно.Вероятно, это один из лучших способов масштабирования состояния сеанса ASP.NET с использованием SQL-сервера. Для получения дополнительной информации прочитайте ссылку True Scaleout model for session state

Смежные вопросы