SSD Nodes Learn 8GB RAM — $66/год
Руководства Matt ConnorАвтор: Matt Connor

Что такое SSD VPS и чем он лучше HDD

SSD VPS использует флеш-память вместо HDD: это дает больше IOPS и меньшую задержку. Узнайте, что проверить у провайдера перед покупкой.

Что такое SSD VPS?

SSD VPS — это виртуальный частный сервер, дисковое хранилище которого использует флеш-память вместо вращающегося жесткого диска. SSD означает solid state drive — накопитель на основе микросхем NAND flash без движущихся частей. VPS означает virtual private server — изолированный ресурс физического хост-компьютера, на котором работает собственная операционная система и который предоставляется вам как отдельный сервер. В сочетании эти два понятия означают следующее: когда сервер считывает блок данных, механическим компонентам не нужно предварительно перемещаться.

Это полное определение. Далее рассматривается то, что остается за пределами этого обозначения, поскольку слова «SSD hosting» на странице с тарифами мало говорят о системе хранения данных.

Если вы еще выясняете, чем VPS отличается от обычной виртуальной машины, сначала прочитайте о различиях между VPS, VM и VPC.

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

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

Причина заключается в механических различиях. Жесткий диск хранит данные на вращающихся пластинах и считывает их головкой на подвижном рычаге. Чтобы обратиться к блоку в другой области пластины, рычаг должен выполнить позиционирование, а затем диск должен повернуться так, чтобы нужный сектор оказался под головкой. При скорости 7200 оборотов в минуту половина оборота в среднем занимает около 4 ms, а позиционирование добавляет еще несколько миллисекунд. Во flash-памяти нет рычага и пластины, поэтому чтение представляет собой электрический поиск и завершается за десятки микросекунд.

ChartRandom 4k read, published device class specifications rather than VPS measurements
The data behind this chart
[
  {
    "device": "7200 rpm hard disk",
    "random_read_iops": "125",
    "read_latency_ms": 8
  },
  {
    "device": "SATA SSD",
    "random_read_iops": "90,000",
    "read_latency_ms": 0.15
  },
  {
    "device": "NVMe SSD",
    "random_read_iops": "600,000",
    "read_latency_ms": 0.08
  }
]

Жесткий диск со скоростью 7200 rpm рассчитан примерно на 125 случайных операций чтения блоков размером 4k в секунду, а результат одной такой операции возвращается примерно через 8 ms. Для NVMe-накопителя заявлено около 600,000 таких операций при задержке около 0.08 ms на операцию. Для SATA SSD этот показатель составляет около 90,000. Воспринимайте эти значения как порядки величин, а не как процентное улучшение.

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

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

SSD, NVMe, SATA и PCIe: четыре термина для разных уровней

Покупатели путают эти термины, потому что каждый из них описывает отдельную часть системы.

  • SSD — это тип носителя. Данные хранятся на микросхемах NAND flash, а не на магнитных пластинах.
  • SATA — это интерфейс, разработанный во времена механических дисков. Его максимальная скорость составляет 6 Gbit/s, что соответствует примерно 550 MB/s фактической пропускной способности. Очередь команд поддерживает 32 незавершённые команды.
  • NVMe (non-volatile memory express) — это протокол, разработанный специально для flash-памяти. Он поддерживает множество очередей, каждая из которых может содержать тысячи команд. Поэтому несколько ядер CPU могут одновременно обращаться к накопителю, не используя одну общую узкую очередь.
  • PCIe (peripheral component interconnect express) — это шина, по которой работает NVMe. Используются те же линии, к которым подключается видеокарта.

Таким образом, SATA SSD и NVMe SSD хранят данные во flash-памяти. Они отличаются интерфейсом, с которым работают. SATA SSD намного быстрее любого жёсткого диска, но очередь из 32 команд ограничивает объём параллельной работы. Именно параллельные операции особенно эффективны для flash-памяти. Какой вариант стоит выбрать, зависит от вашей рабочей нагрузки. В материале выбор между NVMe и SATA SSD этот вопрос подробно разобран.

Локальное flash-хранилище или сетевое хранилище?

Под одним и тем же названием продаются два принципиально разных варианта.

Локальное хранилище означает, что flash-накопители находятся внутри того же физического хоста, что и ваш VPS. Запрос проходит по PCIe внутри одной машины и сразу возвращается. Поэтому задержка составляет десятки микросекунд.

Сетевое хранилище означает, что ваш виртуальный диск находится в отдельном кластере хранения, обычно на Ceph или SAN (storage area network), и каждая операция чтения или записи проходит по сети. Провайдеры обычно называют это "cloud block storage" или "elastic volumes". Flash-накопители действительно используются. Но сетевой обмен также реален и добавляется к каждой операции. Поэтому задержка составляет сотни микросекунд или несколько миллисекунд, а не десятки микросекунд.

Ни один вариант нельзя считать неправильным. Сетевое хранилище сохраняет работоспособность после отказа хоста, поскольку данные никогда не находились на этом хосте. Провайдер может запустить ваш сервер на другом оборудовании, а диск будет доступен ему там. Локальный NVMe работает быстрее, но привязан к одной физической машине. Поэтому отказ оборудования означает восстановление из резервной копии. Уточните, какой вариант используется в тарифе. Почти никто этого не делает.

Какова разница на реальном сервере

Серверная нагрузка в основном состоит из небольших случайных операций чтения и записи, а не из длительных последовательных передач. Поэтому показатель MB/s в рекламном описании — наименее полезное число на странице.

  • Фиксация транзакций базы данных. База данных, которая гарантирует сохранность данных, вызывает fsync при фиксации транзакции, а затем ждет подтверждения от накопителя, что данные действительно сохранены. На жестком диске это ожидание занимает миллисекунды, поэтому небольшая база данных ограничена несколькими сотнями фиксаций в секунду. На флеш-накопителе это же ожидание занимает доли миллисекунды. Именно здесь разрыв наиболее велик, независимо от того, используете ли вы PostgreSQL, MySQL или SQLite в качестве рабочей базы данных.
  • Установка пакетов. apt install распаковывает тысячи небольших файлов и по мере работы синхронизирует их с диском. Почти ни одна из этих операций не является последовательной, поэтому производительность ограничена показателем IOPS.
  • Загрузка образов контейнеров. docker pull получает сжатые слои по сети, а затем распаковывает их в тысячи небольших файлов. Загрузка ограничена пропускной способностью сети. Распаковка ограничена производительностью диска, и на медленном томе именно ее завершения приходится ждать.
  • Загрузка и перезагрузка. При запуске система читает ядро и initramfs, а затем сотни небольших файлов модулей и общих библиотек, распределенных по тому.

Ни одна из этих операций не является большим последовательным чтением. Том, который передает данные со скоростью 500 MB/s, но обрабатывает только 3,000 IOPS, все равно будет работать медленно во время docker compose pull, поскольку ожидание рассчитывается для каждого файла, а не для каждого мегабайта.

Почему надпись «SSD cloud hosting» на странице с тарифами почти ничего не сообщает

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

Именно этот предел важнее всего, но о нем реже всего сообщают. Провайдеры ограничивают IOPS и пропускную способность каждого тома, поскольку один хост обслуживает многих клиентов, а сосед без ограничений может забрать ресурсы остальных. Ограничение в несколько тысяч IOPS для оборудования, способного выполнять сотни тысяч операций, является обычным и допустимым. В описании тарифа оно обычно не указано. Два тарифа могут содержать слово «SSD», хотя один использует локальный NVMe без ограничения на каждый том, а другой — общий том кластера с ограничением 3,000 IOPS.

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

Как проверить, что именно предоставил вам VPS

Из гостевой системы можно увидеть только то, что сообщает гипервизор.

lsblk -d -o NAME,ROTA,MODEL,SIZE
cat /sys/block/vda/queue/rotational

Замените vda именем устройства lsblk, указанным для вашего диска. Файл ROTA и значение rotational читают 0, если ядру сообщили, что устройство не является вращающимся, и 1, если ему сообщили обратное. Виртуальный диск получает этот признак из данных, которые предоставляет гипервизор. Поэтому он описывает виртуальное устройство, а не физическое оборудование под ним. Значение MODEL обычно отсутствует для диска virtio, например vda, или содержит универсальную строку, например QEMU HARDDISK, для эмулируемого контроллера SATA. Гостевые системы не должны видеть массив хоста, и они его не видят.

Поэтому считайте этот признак подсказкой и измерьте остальные параметры. Запустите тест случайного доступа к блокам размером 4k с помощью fio для файла на томе. Используйте глубину очереди, которую действительно применяет ваше приложение. Выполняйте тест достаточно долго, чтобы израсходовать весь доступный burst credit. В статье Как правильно тестировать VPS приведены команды fio и распространённые ошибки, из-за которых результаты выглядят лучше реальных.

Три вопроса, которые следует задать провайдеру перед покупкой

  1. Хранилище размещено локально на гипервизоре или подключено по сети? Ответ определяет минимальную задержку и показывает, что произойдет с данными при отказе физического хоста. Провайдер, который отвечает на этот вопрос прямо, понимает особенности такой конфигурации.
  2. Каково ограничение IOPS для моего тома? Запросите конкретное число. «Без ограничений» и «корпоративный уровень» — это не числа. Если ограничения действительно нет, спросите, что помешает соседнему клиенту на том же хосте занять весь массив во время резервного копирования.
  3. Это ограничение действует постоянно или допускает кратковременное превышение? Если допускается превышение, спросите базовый уровень и продолжительность такого режима. Именно с базовым уровнем будет работать ваша ночная задача, поэтому планировать следует исходя из него.

Изнашивается ли flash и касается ли это вас?

Ячейки flash поддерживают ограниченное число циклов записи. Поэтому для накопителей указывают ресурс в TBW (terabytes written) или DWPD (drive writes per day). Накопитель равномерно распределяет записи между ячейками. Этот процесс называется выравниванием износа. Накопитель также резервирует свободные блоки для замены вышедших из строя ячеек. На VPS износ является проблемой провайдера. Провайдер отслеживает счетчики SMART на собственных накопителях и заменяет оборудование до исчерпания заявленного ресурса. Ваша проблема появилась раньше flash. Накопитель не является резервной копией. Избыточность на уровне тома также не является резервной копией, поскольку она с такой же точностью копирует удаление, как и данные.

На самом деле вы выбираете стоимость гигабайта. Стоимость flash за гигабайт выше, чем у вращающихся дисков. Поэтому тариф с SSD обычно предлагает меньшую емкость, чем тариф с жестким диском по той же цене. Если вам нужно много места для медиафайлов или архивов, оставьте быстрый том небольшим, а основной объем разместите в более дешевом хранилище. Это также правильная схема для хранения резервных копий вне сервера. Чтобы понять, как хранилище входит в общую стоимость, ознакомьтесь с разбором составляющих счета в материале сколько на самом деле стоит VPS.

FAQ

SSD VPS — это то же самое, что и NVMe VPS?

Каждый NVMe VPS является SSD VPS, поскольку накопители NVMe используют флеш-память. Обратное неверно. Тариф с обозначением «SSD» может использовать SATA SSD. Это флеш-накопитель с интерфейсом, разработанным для механических дисков, с очередью из 32 команд и предельной скоростью около 550 MB/s. Оба варианта значительно быстрее жесткого диска. Если разница между ними важна для вашей рабочей нагрузки, уточните у провайдера, какой накопитель используется в тарифе, вместо того чтобы судить об этом по названию тарифа.

Ускоряет ли SSD VPS работу моего сайта?

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

Как проверить, действительно ли мой VPS использует SSD-накопитель?

Изнутри гостевой системы нельзя проверить физическое оборудование. lsblk -d -o NAME,ROTA показывает характеристики виртуального устройства, но это значение задает гипервизор, поэтому 0 является лишь косвенным признаком, а не доказательством. Практическая проверка — измерение: запустите fio со случайной нагрузкой чтения блоками 4k на несколько минут и проверьте указанную задержку. Случайное чтение с задержкой в единицы миллисекунд указывает на диски с вращающимися пластинами или перегруженный сетевой том. Задержка в десятки микросекунд указывает на локальную флеш-память.

Сетевое SSD-хранилище хуже локального NVMe?

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

#vps#ssd#nvme#storage#hosting-basics