Rate this post

Мы уже говорили об оптимизации Вашего проекта «Оптимизация сервера и сайта». Сегодня пришло время поговорить о масштабировании.  Что такое масштабирование? Это  повышение качества работы проекта за счет увеличения производительности ресурсов.nnМасштабирование бывает вертикальное, когда увеличивают мощность ресурса, или горизонтальное, когда увеличивают количество ресурсов. Второй вариант кроме общего прироста производительности, обеспечивает избыточность, что повышает отказоустойчивость.nnО масштабировании, как и в принципе о развитии проекта стоит подумать заранее. Даже если сейчас у вас все работает хорошо, завтра может оказаться не так. И тогда у вас останется достаточно мало времени на принятие верного решения.  Как же к этому подготовиться?nnНе лишним будет иметь систему мониторинга серверов вашего проекта и информацию за определенный период, чтобы определить некоторые тренды дальнейшего использования ресурсов. Контролировать нужно как минимум:n

    n

  1. Доступность сервера
  2. Занятые аппаратные ресурсы (CPU, Memory, Disk Usage, Network Usage)
  3. Ошибки работы систем

nТакже есть утилиты, позволяющие искусственно создавать нагрузку на веб-ресурс. Например, ab и siege.nnнагрузочное тестированиеnnнагрузочное тестирование сайтаЗадавая различные параметры, основным из которых является количество запросов, можно определить, сколько может выдержать ваша текущая конфигурация аппаратной составляющей проекта. Среди результатов стоит обратить внимание на показатели количества запросов в секунду и время отклика страницы. Эти цифры крайне важны  для комфортной работы с ресурсом.n

Что же делать, если Ваш проект вдруг перестал справляться с нагрузкой и Вы не знаете в чем проблема?

    n

  1. Выполнить какую-то очевидную оптимизацию, для того чтобы снизить остроту ситуации.
  2. Настроить систему мониторинга (если Вы еще этого не сделали)
  3. Найти узкое место
  4. Выполнить масштабирование, для устранения ключа проблемы, обнаруженного в п.3

nПомимо анализа результатов мониторинга необходимо оценить факторы, которые мониторинг может не учитывать, такие как, например, причина нагрузки:n

    n

  1. «Вы заказали новый рекламный проект, и он начал приносить свои плоды?»
  2. «Сейчас время новогодних распродаж?»
  3. «Вы объявили об акции или другом выгодном предложении?»
  4. «Вы опубликовали горячую новость или интересный контент?»

nИтак, вы нашли причину. Что же делать дальше?nnНа этом этапе важно понимать подход бизнеса. Есть два варианта:n

    n

  1. Чтобы работало хорошо.
  2. Чтобы работало недорого.

nКонечно же это крайности. Но вы должны быть готовы к тому, что такой выбор перед Вами встанет.nnДалее. Несмотря на то, что Вы уже проводили оптимизации текущей архитектуры,  проанализируйте еще раз возможности оптимизации. Вполне может быть, что-то было упущено или поменялись  условия, и существующую проблему все же можно решить путем оптимизации. Нет? А если добавить аппаратных ресурсов ?nnЕсли Вы пока что «ютитесь» на одном сервере, но приняли решение о горизонтальном  масштабировании, Вы можете рассмотреть стандартные варианты, и в зависимости от Вашего узкого места выбрать сове решение.nnСхема 1. Увеличение количества серверов приложения.nnбалансировщик нагрузкиnnВместо одного сервера нужно настроить несколько.  Для распараллеливания нагрузки поставить балансировщик. При использовании этой схемы нужно быть уверенным, что Ваше приложение поддерживает работу на нескольких серверах и не будет проблем с использованием памяти, кэша.nnСхема 2. Увеличение количества балансировщиков.nnНужна, когда Вы уперлись в недостаток ресурсов балансировщика. Смело можете ставить несколько и использовать DNS Round Robin для распараллеливания запросов.nnСхема 3. Снятие нагрузки с базы данных.nnПоможет использование нескольких копий баз данных. Для поддержки актуального состояния всех баз используется репликация. Есть несколько видов репликации мастер-мастер, мастер-слэйв. Обычно операций чтения значительно больше чем операций записи (однако, это не всегда так), поэтому запись на мастер, а чтение со слэйвов в большом количестве случаев решат проблему. Кроме этого на слэйвах можно незаметно для пользователя делать тяжелые вычисления и бекапы.nnраспределение нагрузки на БД репликация данныхnnО том, чтобы масштабировать Ваше решение было проще, нужно беспокоиться еще на этапе планирования архитектуры приложения. Чем меньше связанности компонентов, тем проще масштабирование.  Есть разные подходы к разбиению приложения на части:n

    n

  1. Технически. Когда выносят на отдельный сервер обособленные сервисы.
  2. Логически. Когда выносят на отдельный сервер обособленные функциональные узлы.

nОднако помните, что разбиение и абстракция могут оказаться дороже. Придется держать постоянную команду разработчиков, хорошо разбирающихся в структуре приложения, поскольку фриласнеру с улицы будет достаточно трудно быстро разобраться в нестандартной архитектуре.nnВ качестве вывода можно сказать, что универсального решения нет и не будет. Нужно каждый раз наблюдать, анализировать и думать. Чужие решения практически всегда будут неверные, поскольку были рассчитаны на другое оборудование и другое решение.n

Проектирование и реализация маштабирования архитектуры, обращайтесь [email protected]