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

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

Часть 1

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

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

Часть 2

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

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

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

1 ответ

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

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

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

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

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

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

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

Другие вопросы по тегам