Облачный сервер: кому польза, кому вред

Популярность облачных сервисов и виртуализации растет. Часть IT-бизнесменов уверена: если перенести сервис в облако, он будет автоматически масштабироваться, решая все проблемы с нагрузкой. Это не всегда так.

Облачный сервер — это самый обычный сервер, часть ресурсов которого вам сдают в аренду.

Хорошие облачные сервисы используют мощные сервера, с быстрыми дисковыми подсистемами, сетью. Но это обычные хорошие сервера.

Виртуализация имеет 2 основных типа — виртуальные сервера и контейнеры. В первом случае вы можете использовать любую ОС, любое ядро. Во втором — ядро общее для всех контейнеров. Хорошая система управления виртуальными машинами в облаке умеет увеличивать или уменьшать количество ресурсов, выделяемых виртуальной машине. Какие-то из изменений требуют перезагрузки (потому что ОС на виртуальной машине не все умеет менять на лету), какие-то нет.
Так же хорошая система умеет мигрировать виртуальные машины с одного сервера на другой с околонулевым даунтаймом. Но даже при “живой” миграции виртуальная машина в момент переноса машина подтормаживает, идет задержка.

Из этого всего следуют простые правила:

  • Максимум ресурсов, получаемых виртуальной машиной — ресурсы 1 физического сервера. Если вы используете сервер с 32 cpu, набором ОЗУ и быстрыми дисками в быстром raid контроллере — в облаках вы однозначно получите меньше ресурсов.
  • Использование виртуализации всегда отнимает часть ресурсов.Если вы не заняли сервер целиком, на вашу виртуальную машину влияют соседи. Хорошая система управления виртуальными машинами за этим пытается следить, но всегда бывают нюансы.
  • Вас могут обделить. При виртуализации, вы не контролируете сервер целиком. Когда случаются необъяснимые скачки нагрузки, задержки в работе дисковой подсистемы это значит, что система управления виртуальными машинами поделила ресурсы несправедливо, вас обделили. Такое бывает и без “оверселлинга”, когда продают ресурсов больше, чем имеют. Например, на физический сервер с 32 потоками “селят” не 8 машин по 4 ядра, а 9-10-12. Большинство клиентов не занимают CPU полностью и проблемы возникают редко. Но когда они случаются, сервис перераспределяет виртуалки по серверам, чтобы уравновесить нагрузку. Возникающие в этот момент проблемы с работой сайтов, расположенных на серверах, списываются на форс-мажор.
  • Облако ВСЕГДА в 2-3 раза ДОРОЖЕ чем выделенный сервер.
облачный сервер
облачный сервер может быть вам полезен, а может лишь навредить

Облачный сервис полезен, если

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

Облачный сервис вредит, если:

  • Ваше приложение активно утилизирует диски. Проще говоря, вы упираетесь по производительности в дисковую подсистему. В этом случае используйте более быстрые диски и меняйте тип raid массива. В облаке будет только хуже.
  • Ваше приложение упирается в производительность одного ядра процессора или число ядер.
    Тут есть нюанс. У процессора есть ядра (и потоки). Они работают на определенной частоте. Типичные значения для Intel Xeon — 3.5ГГц, 3.2ГГц, 2.3ГГц итд. Предположим, что у вас есть веб страница на php. Запрос на эту страницу приводит к исполнению php, соединению с базой данных, выполнению SQL запроса, получению результатов, генерации самой страницы и отдаче ее клиенту. SQL запрос выполняется одним потоком процессора. PHP — тоже. То есть, от частоты процессора зависит скорость генерации страницы. Разница между 3.5ГГц и 2.3ГГц составляет от единиц миллисекунд до нескольких десятков миллисекунд. Для ряда задач это не важно, но для некоторых — имеет значение.Помните об этом, выбирая процессор для работы приложения.
    Количество потоков, наоборот, не влияет на генерацию отдельно взятой страницы. Но от количества потоков зависит число запросов, которое вы можете обработать одновременно. Если ваше приложение обрабатывает 20 запросов в секунду на одном ядре, то на 8 ядрах оно сможет обработать примерно 160 запросов в секунду, а на 32х — 640. Если не упрется в дисковую подсистему, например.

Вывод: если вашему сайту не хватает выделенного сервера — ищите более мощный или оптимизируйте имеющийся. Переход в облако не решит ваших проблем, а только добавит новых.