Количество экземпляров, необходимых для приложения Windows Azure - PullRequest
5 голосов
/ 15 января 2011

Я довольно новичок в Windows Azure и хочу разместить приложение для опроса, которое будет заполнено ок.Одновременно 30 000 пользователей.

Приложение состоит из 1 страницы .aspx, которая будет отправлена ​​клиенту один раз, задает 25 вопросов и в конце подведет итоги.Когда пользователь дал ответ и нажал кнопки «следующий вопрос», данный ответ будет отправлен через обработчик .ashx на сервер.Ответ следующий вопрос и ответы.Заключение отправляется клиенту после полной обратной передачи.Ответ сохраняется в таблице Azure, которая разбита на разделы, так что каждый раздел может содержать до 450 пользователей.

Я хотел бы спросить, может ли кто-то дать приблизительное предположение о том, сколько экземпляров веб-роли нам нужночтобы запустить это приложение.(Если это слишком сложно сказать, с большей вероятностью начнется 5, 50 или 500 экземпляров?)

Какой лучший способ пойти: 20 маленьких экземпляров или 5 больших экземпляров?

Спасибо за вашу помощь!

Ответы [ 3 ]

5 голосов
/ 15 января 2011

Самый очевидный ответ: вам лучше всего протестировать это самостоятельно и посмотреть, как работает ваше приложение. Вы можете легко получить счетчики производительности и другую диагностику из Windows Azure; Например, вы можете подключить Microsoft SCOM (System Center Operations Manager) для мониторинга вашей среды во время тестирования. Site Hammer - это простой инструмент нагрузочного тестирования для Windows Azure (в галерее кодов MSDN).

Помимо этого очень очевидного ответа, я поделюсь некоторыми предположениями: учитывая тип нагрузки, вам, вероятно, лучше иметь более мелкие экземпляры, а не меньшее количество крупных, особенно если у вас уже есть разделы хранилища. Если вы действительно хотите одновременно посещать 30 000 посетителей и дать им ~ 15-секундный интервал между чтением вопросов и публикацией их ответов, вы просматриваете 2000 запросов в секунду. 10 узлов должно быть более чем достаточно для обработки этой нагрузки. Помните, что это просто простая оценка, в которой отсутствует какая-либо форма понимания вашей архитектуры и т. Д. Для этих типов нагрузок кэширование является очень хорошей идеей; это значительно увеличит нагрузку, которую может выдержать каждый узел.

Однако лучший совет, который я могу вам дать, - убедиться, что вы активно отслеживаете. Для раскрутки дополнительных экземпляров требуется менее 30 минут, поэтому, если вы отслеживаете свою среду и / или убедитесь, что вы получаете уведомление, когда она начинает задыхаться, вы можете легко обновить настройки. Помните, что вам нужно обратиться в службу поддержки, чтобы иметь возможность пройти более 20 экземпляров (это ограничение по умолчанию, которое защищает вас от перерасхода).

2 голосов
/ 15 января 2011

Помимо мудрого совета, который дал вам tijmenvdk, ​​позвольте мне добавить свое мнение о размере экземпляра. В общем, выбирайте наименьший размер, который будет поддерживать ваше приложение, а затем уменьшайте масштаб для обработки увеличенного трафика. Таким образом, когда вы уменьшаете масштаб, ваша минимальная вычислительная стоимость остается низкой. Если вы запустили, скажем, пару очень больших экземпляров в качестве базового уровня (поскольку вы всегда хотите, чтобы минимум два экземпляра получали SLA времени безотказной работы), ваши затраты начинаются с 0,12 x 8 x 2 = 1,92 долл. В час, даже в течение низкого время движения. Если вы идете с маленькими экземплярами, вы будете в 0,12 х 1 х 2 = $ 0,24 в час.

Размер каждой виртуальной машины как связанного ЦП, памяти и локального 9-недолговечного) дискового хранилища, поэтому выберите наименьший размер, в котором ваше приложение будет эффективно работать.

При нагрузочном тестировании и тестировании производительности вам также может потребоваться размещение решения, такого как Loadstorm .

0 голосов
/ 26 мая 2011

Насколько одновременны запросы в реальности? Все ли они будут вводить адрес в одно и то же время?

Тем не менее, профилируйте ваше приложение локально, это позволит вам оценить использование процессора, сети и памяти в Azure. Затем, вместо того, чтобы посмотреть, сколько экземпляров вам нужно, посмотрите, как вы можете уменьшить требование! Примените эти советы и снова выполните локальный профиль.

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

Для одностраничного опроса убедитесь, что ваши html, css & js минимизированы, чтобы его можно было кэшировать.

Объедините их, если это возможно, и, чтобы получить действительно масштабируемый файл, поместите статические файлы (css, js & images) в CDN. Все это уменьшает количество запросов, с которыми приходится работать веб-серверу, и, следовательно, уменьшает количество необходимых вам веб-ролей = меньше сети.

Как Ashx возвращает ответ? то есть он отправляет HTML, XML или JSON? лично я получу возвращение JSON, поскольку для этого потребуется меньшая пропускная способность сети и, скорее всего, меньше обработки на стороне сервера = меньше памяти и сети.

Используйте Asyncronous API для доступа к хранилищу Azure (при этом используются порты завершения ввода-вывода, чтобы освободить поток iis для обработки большего количества запросов до тех пор, пока хранилище Azure не вернется = включение процессора для масштабирования)

tijmenvdk уже упоминал об использовании очередей для записи. Меняется ли список вопросов? если нет, кэшируйте их, так что приложение должно считывать данные из хранилища таблиц только один раз при запуске и один раз для каждого клиента для окончательного завершения = экономит сеть и процессор за счет памяти.

Все эти советы в равной степени применимы к обычному веб-приложению, на одном сервере или в среде веб-фермы.

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

...