Стратегии масштабирования для приложений ASP.NET - Проблемы масштабирования
ОГЛАВЛЕНИЕ
Проблемы масштабирования
Как консультанты мы знаем, что когда приложение хорошо работает в тестовой среде и плохо в реальном мире, речь, вероятно, идет о проблеме масштабирования. Обычно единственной разницей между двумя ситуациями является число одновременных пользователей. Если приложение работает плохо все время, то это уже проблема производительности, а не масштабирования.
Для улучшения масштабирования можно применить три возможные стратегии: специализацию, оптимизацию и распределение. Варианты их применения бывают разными, но сами стратегии просты и последовательны.
Задача специализации – разбить приложение на более мелкие части, чтобы выделить проблему. Например, в ее рамках можно обдумать перенос статических файлов ресурсов, такие как файлы изображений, CSS и JS прочь с серверов ASP.NET. Сервер, настроенный под ASP.NET, не слишком хорошо подходит для того, чтобы поставлять эти типы файлов. По этой причине отдельная группа серверов IIS, специально настроенных для поставки файлов ресурсов, может существенно повлиять на масштабируемость используемого приложения.
Если выполняются большие объемы сжатия или шифрования (для SSL), может помочь установка специальных серверов для SSL. Следует знать, что существует даже специализированное оборудование для сжатия и терминации SSL.
Хотя более традиционные стратегии разбиения уровней сервера на составные части могут предложить выделение отдельных серверов для доступа к данным, сложных вычислений и так далее, независимых от собственно создания веб-страниц, лично я предпочитаю иметь пять веб-серверов, которые выполняют весь спектр операций, чем три веб-сервера и два сервера бизнес-объектов. Все эти внепроцессные вызовы между веб-серверами и серверами бизнес-объектов поглощают много ресурсов.
К специализации следует прибегать только ради известного и ожидаемого улучшения. И быстрейшее решение – не всегда лучшее. Целью масшабирования является единообразие производительности. По мере увеличения нагрузки диапазон производительность желательно сужать – будь пользователей двое или тысяча, определенная страница должна отображаться для них за одно и то же время.
Рано или поздно для более эффективного масштабирования будет необходимо оптимизировать код сервера. Практически все аспекты уравнения производительности масштабируются линейно, за исключением времени вычислений на сервере – всегда можно увеличить пропускную способность (и понять, когда это нужно, довольно просто), а время вычислений на клиенте не меняется по мере роста числа клиентов. Другие элементы уравнения производительности также сохраняют свой характер при масштабировании. Но время вычислений на сервере потребует настройки при увеличении числа пользователей.