Назад | Перейти на главную страницу

Повышение производительности приложений на Amazon AWS

У меня есть клиент с приложением MVC v1 (.NET), работающим на микро-экземпляре. В этом случае у меня запущены .NET, IIS 7.5 и MS SQL Server 2008 для обработки приложения. Клиент сообщил, что обработка каждого запроса занимает около 10 секунд. Даже загрузка начальной страницы входа занимает примерно столько же времени, затем вход в систему занимает столько же времени и т. Д.

Спецификации текущего запущенного экземпляра следующие:

Проблема в доступности памяти? или это вычислительная мощность?

Предвижу два варианта:

  1. Сменить на большой экземпляр
  2. Настройте двухуровневую архитектуру с двумя микро-экземплярами

Что из этого повысит производительность приложения?

Заранее спасибо.

Запуск всего этого на этом экземпляре определенно вызовет некоторые проблемы. Будет ли работать лучше «маленький» или «2 микро» экземпляра - это вопрос экономической эффективности.

Чтобы выяснить, в чем заключается ваше узкое место, вы должны запустить монитор производительности из Панели управления -> Администрирование -> Монитор производительности и посмотреть, какой ресурс ограничен - скорее всего, это память.

Насколько я помню, «маленькие» экземпляры не станут рентабельными, если вы не хотите превысить три постоянных микро-экземпляра.

Я бы не ожидал ввода-вывода, поскольку микро-экземпляр работает только на EBS, что очень быстро. Говорят, что хранилище экземпляров работает медленнее, чем EBS. Но проверьте счетчики производительности, как предлагается в другом ответе.

Я бы действительно ожидал RAM, так как 615 МБ - это немного для 64-битной системы. Более того, если ваша машина начнет менять местами, с вас будет взиматься плата за дополнительные запросы ввода-вывода для EBS, что еще больше усугубит ситуацию с экономической точки зрения.

Наконец, помните, что у микроэкземпляра есть прерывистый ЦП, и он может достигать 2 ЭБУ за очень короткие периоды, при этом в среднем работать с гораздо меньшей скоростью. Я видел несколько тестов, которые указывали на то, что при более длительном запуске микро-экземпляр имел примерно половину скорости стандартного малого. Но я ожидаю, что это сильно зависит от того, насколько загружены соседние серверы.

Итак, на вопрос «Что из этого даст приложению лучшую производительность?» Думаю, однозначного ответа нет, он всегда будет зависеть от конкретного приложения - проверьте. Попробуйте оба варианта, а затем решите. При почасовой оплате инстансов такой тест не будет стоить дорого.

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

Люди забывают, что эти машины работают в виртуализированных средах. Между вашей виртуальной машиной и доступом к физическому диску существует посредник. Чем меньше у брокера возможностей добавить микросекунду здесь и микросекунду там, тем выше будет ваша производительность. Вполне возможно, что ваше приложение может отлично работать на физическом хосте, но как только вы переместите его на эту виртуализированную модель, у вас возникнут проблемы с производительностью. Эффективность беспорядочного использования хоста маскировала любую неэффективность в разработке приложений и запросов. Обнаружение этих недостатков при переходе к виртуальной модели, особенно такой, в которой виртуализирована вся ваша система баз данных, происходит довольно часто.

Вы получите дополнительные финансовые выгоды от оптимизации запросов и нормализации базы данных. AWS - это универсальная вычислительная среда. Вы платите за каждый доступ к ресурсу. Чем реже вам нужно будет обращаться к диску, тем больше вы будете экономить каждый месяц.

Я бы также рассмотрел вопрос о физическом хостинге для вашего экземпляра SQL Server, если базу данных нельзя изменить / нормализовать или добавить индексы. Это исправит вашу модель затрат для вашего экземпляра базы данных и повысит производительность, потому что теперь у вас будет доступ к одному выделенному хосту для вашей БД. Скорее всего, вам придется заплатить за вход / выход байтов между AWS и поставщиком физического хостинга для вашей БД. У вас могут быть другие варианты с поставщиками, которые предоставляют как виртуальный, так и физический хостинг, например Rackspace, где вы не столкнетесь с байтами в / из облака провайдера.

Вы ничего не упоминаете о подсистеме ввода-вывода, которая, возможно, не помогает, но из того, что вы говорите, я бы предположил, что это проблема памяти, поскольку 615 МБ НАМНОГО ниже минимальных рекомендуемых требований к памяти для этого программного стека. Вы должны увидеть это только по самой базовой статистике диспетчера задач. Исправьте это, а затем посмотрите на ввод-вывод, поскольку они обычно довольно плохи и на экземплярах VPS / VM низкого уровня.