Уйти в облако. Кому противопоказан облачный сервер

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

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

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

Виртуализация обычно представлена в 2 типах — виртуальные сервера и контейнеры. Виртуальные сервера позволяют использовать любую ОС, любое ядро. В случае с виртуализацией контейнером ядро общее для всех контейнеров.

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

Из этого следует несколько выводов:

  • Максимальные ресурсы виртуальной машиной = ресурсы 1 физического сервера. Если вы используете сервер с 32 cpu, набором ОЗУ и быстрыми дисками в быстром raid контроллере — в облаках вы, получите меньше ресурсов.
  • Виртуализация всегда отнимает часть ресурсов.Если сервер не занят вами полностью, на вашу виртуальную машину влияют соседи. Хорошая система управления виртуальными машинами за этим следит, но сбои и неприятности могут быть всегда.
  • Вас могут обделить. Виртуализация не позволяет контролировать весь сервер. Когда случаются необъяснимые скачки нагрузки, задержки в работе дисковой подсистемы это знак того, что система управления виртуальными машинами поделила ресурсы несправедливо, вас обделили. Такое бывает и без “оверселлинга”, когда продают ресурсов больше, чем имеют. Оверселлинг — это когда на физический сервер с 32 потоками “селят” не 8 машин по 4 ядра, а 9-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. Если не упрется в дисковую подсистему, например.

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