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

Как определить, в каком направлении масштабировать веб-приложение

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

Часть 1

А пока давайте рассмотрим небольшой сценарий. Допустим, у вас есть приложение API. он принимает HTTP-запросы и отвечает JSON, независимо от того, построен ли он на Node, Rails, PHP или чем-то еще, это непочтительно. Предполагая, что вы можете оценить все эти факторы в часы просмотра: Количество одновременных пользователей: 100 -> 1000 -> N запросов в минуту на пользователя: 1? 10? 50? размер данных, передаваемых в среднем за запрос: 1Кб? 2 КБ? 5 КБ? 10?

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

Часть 2

На этот раз допустим другой тип приложения. На этот раз это приложение для веб-сокета, которое обрабатывает обмен данными в реальном времени, например чат или уведомление о событиях (события, отправленные из сообщения Q, например Redis или RabbitMQ). Это приложение (из того, что я собираю) будет масштабироваться совершенно по-другому в зависимости от тех же факторов. как часть 1, как вы определяете, в каком направлении двигаться?

В общем и целом

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

На этот вопрос почти невозможно ответить в его нынешней форме, потому что это слишком широкая тема. Чтобы ответить на этот вопрос, требуется целая область инженерии, в которой люди зарабатывают на жизнь полным рабочим днем ​​(включая меня). ИМХО, это частично наука, а частично искусство, и вы найдете множество книг (на каждого моего коллеги), которые посвящены этой теме.

Поэтому я могу дать лишь несколько кратких и общих указаний.

  • Не существует единой формулы для определения наилучшего направления масштабирования. При наличии нескольких приложений с одинаковыми фиксированными и прогнозируемыми метриками способ их масштабирования может быть совершенно другим. На самом деле все зависит от того, где узкие места основаны на (неправильном) поведении приложения.
  • Лучший способ - это проверить и измерить. Убедитесь, что ваше приложение оснащено инструментами, чтобы вы могли тестировать приложение с различными нагрузками и наблюдать / измерять влияние на ВСЕ его ресурсы (сервер, сеть и т. Д.). Вам также нужно будет протестировать масштабирование в разных направлениях.
  • По опыту, большинство проблем с масштабированием веб-приложений даже не решаются (или не должны решаться) за счет увеличения количества оборудования / ресурсов. Чаще всего это код и его недостатки (которые я классифицирую как дефект).

С учетом сказанного, если бы мне пришлось сделать все это и мне нужно было выбрать одно решение для хостинга, то с наибольшей гибкостью и возможностями, как с точки зрения предложения продуктов, так и с точки зрения возможности контролировать расходы, были бы Amazon Web Services (AWS). Это единственный хостинг-провайдер, которого я использовал, который приближается к крупным корпоративным центрам обработки данных и предоставляет большинство функций, которые я искал. Ключевые особенности:

  • Вы можете разместить свое приложение там, чтобы начать бесплатно (или почти бесплатно), используя их бесплатный уровень
  • Вы можете масштабировать по вертикали (увеличивать ЦП и память на одном хосте) с помощью нескольких щелчков мышью и перезагрузки
  • Вы можете масштабироваться по горизонтали (конечно) с большим количеством серверов и других зависимых служб (таких как балансировщики нагрузки)
  • У них есть много других услуг помимо хостинга виртуальных машин (услуга EC2 - лишь одна из их услуг).

У меня нет опыта работы с другими поставщиками IaaS (Rackspace, Microsoft Azure и т. Д.), Поэтому я не могу сравнивать или сравнивать их. Возможно, это поможет вам начать свое исследование.

Раскрытие информации: на момент написания этого ответа я не владею акциями Amazon и не работаю на них =)