RE:NODE

Ресурсы13 мин чтения

VPS, VDS или выделенный сервер: что означают эти слова

Одно - маркетинговое слово, другое - обещание насчёт CPU, третье - физическая машина. Как понять, что именно вы покупаете, и как проверить это потом.

0 прочтений

Три слова, продающихся по трём ценам, и лишь у одного из них есть определение, с которым все согласны. Выделенный сервер - это физическая машина, на которой больше никого нет. VPS - это виртуальная машина на общей физической. VDS - это VPS, продавец которого хочет, чтобы вы знали: доля CPU не переподписана, - что иногда действительно техническое отличие, а иногда просто новое название. Полезный вопрос никогда не звучит как «что из трёх мне нужно», он звучит как «что именно гарантировано и можно ли проверить это, когда машина заработает». Эта статья отвечает на оба вопроса, включая команды, которые показывают, что вы на самом деле купили.

Три слова и какое из них маркетинг#

VPS расшифровывается как virtual private server. Это виртуальная машина: доля физического хоста с собственной операционной системой, собственным IP-адресом и root-доступом внутри. Слово ничего не говорит о том, как эта доля нарезана. VPS на 1 GB у одного провайдера и VPS на 1 GB у другого могут отличаться по реальной производительности втрое, и оба описания будут верны.

VDS расшифровывается как virtual dedicated server. Индустрия использует его для VPS, где ресурсы не делятся: ваши vCPU закреплены или зарезервированы, а не оспариваются, память не переподписана, а выделение диска настоящее. Органа, который следил бы за этим, нет, и в этом вся проблема. Одни провайдеры используют VDS точно; другие - как синоним VPS с более высокой ценой. Слово - это утверждение, а не спецификация, и утверждение стоит ровно столько, сколько стоит то, что рядом с ним: названная модель CPU, заявленное число vCPU и ответ на вопрос «вы делаете overcommit».

Выделенный сервер - это вся физическая машина целиком. Один арендатор, один комплект железа, и никакого гипервизора между вами и CPU, если вы не поставите его сами. Это единственное из трёх слов с однозначным смыслом, и цена это отражает.

Честная иерархия - не VPS, затем VDS, затем выделенный сервер. Она такая: какая часть физической машины вам гарантирована и какая часть окружающей работы лежит на вас. Эти два вопроса почти независимы, и поэтому неудачно выбранный выделенный сервер может работать хуже удачно выбранного VDS за те же деньги.

Что на самом деле делает гипервизор#

Под маркетингом скрываются по-настоящему разные технологии, и разница проявляется в том, что вы можете делать.

Полная виртуализация (KVM, VMware, Hyper-V, Xen HVM). Гость получает эмулируемую машину и запускает собственное ядро. Вы можете загружать модули ядра, запускать Docker, задавать свои значения sysctl, использовать любой дистрибутив, подключать swap-файл и запускать версию ядра, отличную от хостовой. Сегодня почти всегда «VPS» означает именно это, и именно это вам нужно, если нет особой причины для другого.

Контейнерная виртуализация (OpenVZ, LXC, Virtuozzo). Гость делит ядро с хостом. Это дешевле запускать и плотнее, а значит, дешевле продавать, но менять параметры ядра нельзя, часть настроек sysctl доступна только для чтения, swap ведёт себя странно, а некоторые нагрузки - всё, что требует модулей ядра, некоторые конфигурации VPN, порой Docker - не работают или работают плохо. Учёт памяти тоже свободнее, из-за чего VPS в контейнере может «не хватать памяти», тогда как free -m говорит обратное. OpenVZ поблёк, но с дешёвого края рынка не исчез.

Прикладные контейнеры (Docker, а значит, и игровой хостинг на основе Pterodactyl). Это уже другое, и вовсе не VPS. Одно дерево процессов на контейнер, память и CPU ограничены контрольными группами ядра, собственного ядра нет, root на хосте тоже нет. Именно это представляет собой управляемый тариф для игры или приложения, и его как следует сравнивают в статье VDS или игровая панель.

Bare metal. Гипервизора нет. Каждый такт и каждый байт пропускной способности памяти - ваши, включая те, что вы не используете.

Узнать, на чём вы находитесь, можно одной командой:

bash
$ systemd-detect-virtkvm$ systemd-detect-virt --containernone

kvm, vmware, microsoft или xen означают полную виртуализацию. lxc, openvz или docker означают, что вы делите ядро. none означает bare metal либо гипервизор, который хорошо прячется.

«Выделенные ресурсы» - это три разных обещания#

Когда на странице написано «выделенные ресурсы», может иметься в виду любое из трёх, и их стоит разделять, потому что обычно людей волнует только одно.

Выделенная память. Ваш объём RAM обеспечен настоящей памятью и не переподписан. Это распространено, дёшево и редко оказывается тем, что ломается.

Выделенный CPU. Ваши vCPU не делятся с другими арендаторами. На общем VPS восемь арендаторов по два vCPU могут сидеть на хосте с восемью потоками; когда заняты все, ждут все. На настоящем тарифе с выделенным CPU соответствие ближе к одному vCPU на аппаратный поток, и на вашем никто другой не планируется. Именно это обещание должны нести буквы VDS, и именно оно сильнее всего влияет на игровой сервер, потому что игровой сервер - это работа одного потока, которая должна закончиться вовремя.

Выделенные диск и сеть. Встречается гораздо реже, чем кажется. Диски NVMe почти всегда общие для всех гостей через один контроллер, а внешний канал общий по определению. Хорошие провайдеры реально предлагают здесь ограничение глубины очереди или IOPS на гостя, чтобы один шумный арендатор не мог задушить остальных.

Измеримое следствие общего CPU - steal time: доля времени, когда ваш vCPU был готов работать, а гипервизор отдал физическое ядро кому-то другому. Он виден как столбец st в vmstat и значение %st в top:

bash
$ vmstat 1 5procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 1  0      0 612344  84120 917640    0    0     3    14  201  388  9  2 88  0  1

Менее 1% - нормально и неизбежно. Устойчивые 5% и больше на тарифе, проданном как выделенный CPU, означают, что это не он. Это число, которое можно сфотографировать и приложить к тикету, а это больше, чем можно сказать про «мне кажется, тормозит».

В статье общий CPU и шумные соседи подробнее о том, что гарантирует доля и чего не гарантирует.

Физическая машина и во что она обходится на самом деле#

Выделенный сервер убирает гипервизор и соседей. Работу он не убирает никакую.

Что вы реально получаете:

  • Весь CPU, включая кэш. На виртуализированном хосте соседи вытесняют ваши данные из общего кэша L3, независимо от того, используют ли они время CPU, которое вам обещано. Это невидимо в любом бенчмарке, измеряющем пропускную способность, и очень заметно в нагрузках, чувствительных к задержке.
  • Предсказуемость. 99-й перцентиль чего угодно лучше на машине, которой никто другой не касается. Для игрового сервера именно 99-й перцентиль замечают игроки.
  • Выбор железа. Конкретные диски, конкретный RAID, больше памяти, чем предлагает любой тариф VPS, иногда GPU.
  • Никакого overcommit, никогда. Не потому, что провайдер пообещал, а потому, что переподписывать некому.

Чего это стоит помимо месячной суммы:

  • Время выдачи. Bare metal монтируют в стойку, ставят образ и передают. Это часы или дни, а не минуты, и то же самое касается замены, когда умирает диск.
  • Вся работа системного администратора. То же, что и на VDS, только теперь о железе тоже приходится думать вам. Состояние RAID, прошивки, IPMI, настройка BIOS, сбросившаяся после отключения питания.
  • Простаивающие мощности, за которые вы заплатили. Выделенная машина рассчитана на ваш пик. Всё, что выше вашего среднего, - деньги, потраченные на готовность.
  • Единая точка отказа. Одна машина - это одна машина. ВМ часто можно за минуты перенести на другой хост. Умершую материнскую плату - нет.

Правило, которое выдерживает проверку: берите bare metal, когда вы действительно собираетесь использовать большую его часть или когда 99-й перцентиль и есть ваш продукт. Ниже этого хорошо описанный VDS - то же железо, где за части, которые не ваше дело, отвечает кто-то другой.

Собственная линейка RE:NODE на странице выделенных серверов - это VDS, а не bare metal, и страница говорит, на какой машине он работает: Intel i9-9900K, NVMe везде, на пуле ZFS, в Германии. Это важнее ярлыка категории. i9-9900K - это восьмиядерный шестнадцатипоточный процессор с высокой частотой одного ядра, то есть именно такой формы CPU, какой нужен игровому серверу или небольшой базе данных, и поэтому тарифы останавливаются на шести vCPU: шесть потоков из шестнадцати - доля, которую можно держать честной. В отличие от управляемых тарифов, которые создаются, когда проходит платёж, и обычно работают в течение минуты, VDS готовится вручную и передаётся в течение 24 часов.

Как читать спецификацию, не попавшись#

Одни и те же шесть строк решают почти любое сравнение, а в большинстве описаний есть ответы лишь на две.

Что написано на страницеО чём спрашивать на самом деле
«4 vCPU»Четыре потока какого CPU, и делятся ли они?
«Выделенный CPU»Закреплённые ядра или вес планировщика?
«NVMe SSD»Какой лимит IOPS или очереди на гостя, и есть ли RAID?
«8 GB RAM»Переподписана ли память на хосте?
«Безлимит»Какая скорость порта и какая политика fair use?
«Защита от DDoS»Всегда включена или по триггеру, и что она отбрасывает?

Конкретный пример того, почему важна первая строка: четыре vCPU на восьмиядерном настольном процессоре 2018 года с бустом 5,0 GHz обгонят четыре vCPU на шестидесятичетырёхъядерном серверном процессоре с частотой 2,2 GHz почти для любого игрового сервера, потому что игровому серверу нужно, чтобы один поток вовремя закончил tick, а остальные шестьдесят ему безразличны. Для сборочной фермы или веб-сервера, обрабатывающего много независимых запросов, те же две машины меняются местами полностью. Число vCPU без названия модели нельзя ни с чем сравнить.

Вторая строка стоит одного уточняющего вопроса в тикете перед покупкой, потому что ответы различаются: закреплённые ядра означают, что конкретные аппаратные потоки ваши; вес планировщика означает, что вы получаете больший кусок при конкуренции, а это другое и более слабое обещание.

Что подходит для какой нагрузки#

НагрузкаПравильный ответПочему
Один-два игровых сервераУправляемый тарифНужна часть машины и никакой работы
Шесть и больше небольших сервисовVDSПамять объединяется между ними, и одна ОС обслуживает всех
ПО, которое никто не продаёт как продуктVDSRoot и собственное ядро - это и есть смысл
Загруженная база с настоящим IOVDS или bare metalКонкуренция за IO - то, от чего вы уходите
Собственная панель игрового хостингаVDS, от 16 GBПанель, Wings, Docker и база - ещё до первых игроков
Постоянно высокий CPU весь деньBare metalНа общей инфраструктуре вы сами становитесь шумным соседом
Критична задержка на 99-м перцентилеBare metalНет гипервизора, посторонние не вытесняют кэш
Всё, что вы не будете обслуживатьУправляемый тарифСамый дешёвый час - тот, который не пришлось потратить

Закономерность в этой таблице такая: виртуализация почти никогда не бывает решающим фактором. Решает то, сколько отдельных вещей вы запускаете, насколько они неравномерны по нагрузке и хотите ли вы, чтобы операционная система была вашей ответственностью. В статье сколько стоит игровой сервер то же решение рассмотрено со стороны денег, а несколько игровых серверов на одном VDS - практический вариант второй строки.

Проверяем, что вы на самом деле получили#

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

bash
$ systemd-detect-virt            # kvm, lxc, openvz, docker or none$ lscpu | head -20               # model name, sockets, cores, MHz$ nproc                          # threads visible to you$ free -m                        # real memory, and whether swap exists$ df -h /                        # disk actually available$ uname -r                       # your kernel, or the host's

Самая важная из них - lscpu. Она печатает название модели, благодаря чему «4 vCPU» становится сопоставимым, а строка Hypervisor vendor подтверждает то, что сказал systemd-detect-virt. Если название модели пустое или общее на тарифе, проданном как выделенный CPU, спросите почему.

Затем измеряйте, а не верьте. Скорость одного ядра - число, которое предсказывает поведение игрового сервера, и sysbench даёт грубый, но сопоставимый результат за десять секунд:

bash
$ apt install sysbench fio$ sysbench cpu --threads=1 --time=10 run | grep "events per second"$ sysbench cpu --threads=$(nproc) --time=10 run | grep "events per second"

Запустите однопоточный тест три раза в разное время суток. Если результаты расходятся более чем на 10%, вы делите машину с кем-то занятым. Для диска подходит небольшой тест случайной записи, потому что он соответствует тому, что реально делают сохранение мира или коммит базы данных:

bash
$ fio --name=randwrite --ioengine=libaio --direct=1 --rw=randwrite \      --bs=4k --size=1G --numjobs=1 --runtime=30 --group_reporting

Смотрите на IOPS и на задержку 99-го перцентиля, а не на среднее. В статье что на самом деле меняет NVMe объяснено, какие операции это число определяет, а каких вообще не касается.

Наконец, понаблюдайте за steal time неделю, выводя vmstat 60 в файл, или просто поглядывайте на top в часы пик. На тарифе с контейнерной виртуализацией steal time всегда будет нулевым, потому что троттлинг учитывается иначе; проверяйте контрольную группу:

bash
$ cat /sys/fs/cgroup/cpu.statusage_usec 184203311nr_periods 291844nr_throttled 0throttled_usec 0

Растущий nr_throttled означает, что вы упираетесь в собственный лимит CPU, то есть это проблема размера, а не соседей, и решение - большая доля или меньше работы. Метод, как выбрать между ними, описан в статье CPU или RAM: что сдерживает ваш сервер.

Когда вы убедились в том, что купили, потратьте следующие полчаса на первый час на новом VDS: пользователь без root, ключи SSH, файрвол с запретом по умолчанию и автоматические обновления. Новую машину с парольной аутентификацией сканеры находят в течение нескольких часов после появления её адреса, и это не преувеличение.

FAQ#

VDS - это просто другое название VPS?

Иногда. Задуманное различие в том, что VDS не переподписывает CPU и память, так что ваша доля действительно ваша. Ничто не обеспечивает соблюдение этого слова, поэтому считайте его утверждением, которое нужно проверить: спросите модель CPU, спросите, закреплены ли ядра, затем неделю измеряйте steal time сами.

Нужен ли мне выделенный сервер для игрового сервера?

Почти никогда. Одному игровому серверу нужен один поток симуляции и несколько гигабайт памяти, то есть малая доля любой современной машины. Bare metal оправдан, когда вы запускаете много серверов одновременно, когда вам нужен каждый такт быстрого ядра на 99-м перцентиле или когда вы занимаетесь перепродажей.

Сколько vCPU мне нужно?

Меньше, чем вы думаете, и более быстрых. Большинство игровых серверов, большинство небольших веб-приложений и большинство баз данных под настоящей нагрузкой ограничены тем, насколько быстро один поток заканчивает свою работу. Два vCPU с высокой частотой обгоняют восемь медленных для такой формы нагрузки. Добавляйте ядра, когда запускаете несколько независимых вещей, а не для того, чтобы ускорить одну.

Можно ли запустить Docker на любом VPS?

На KVM, VMware, Hyper-V или Xen - да. На контейнерной виртуализации, такой как OpenVZ или LXC, это варьируется от неудобного до невозможного, потому что ядро вам не принадлежит. Запустите systemd-detect-virt перед покупкой всего, где Docker входит в план, а если не уверены, отдавайте предпочтение полной виртуализации.

Что происходит, когда на VDS кончается память?

OOM killer ядра выбирает процесс и завершает его, обычно самый большой, а это обычно то, что вам дорого. Предупреждения нет, а следы остаются в dmesg. Управляемые контейнеры ведут себя иначе: контейнер останавливается на своём лимите и запускается заново с чистого листа, а не уходит в swap.

Отличается ли железо у VPS и VDS?

Обычно нет. Одни и те же машины часто обслуживают оба варианта, а разница в том, сколько гостей на них размещено и закреплён ли CPU. Именно поэтому модель CPU и политика overcommit стоят больше, чем название продукта на странице.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000