SSD Nodes Learn 8GB RAM — $66/рік
Посібники Matt ConnorВід Matt Connor

Що таке SSD VPS і чим флеш-сховище краще

SSD VPS використовує флеш-пам’ять замість механічних дисків. Дізнайтеся, як це впливає на IOPS і затримку, та які 3 питання поставити перед купівлею.

Що таке 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 докладно це пояснює.

Локальне флеш-сховище чи мережеве сховище?

Під одним і тим самим терміном продають два дуже різні варіанти.

Локальне сховище означає, що флеш-накопичувачі встановлені на тому самому фізичному хості, що й ваш VPS. Запит проходить через PCIe у межах однієї машини та одразу повертається. Завдяки цьому затримка становить десятки мікросекунд.

Мережеве сховище означає, що ваш віртуальний диск розміщений в окремому кластері сховища, часто на базі Ceph або SAN (storage area network), і кожна операція читання та запису проходить мережею. Провайдери зазвичай називають це "хмарним блочним сховищем" або "еластичними томами". Флеш-пам’ять є справжньою. Мережевий обмін також є реальним, і він додається до кожної операції. Тому затримка становить сотні мікросекунд або кілька мілісекунд, а не десятки мікросекунд.

Жоден із варіантів не є неправильним. Мережеве сховище не втрачає доступність у разі відмови хоста, оскільки дані ніколи не зберігалися на цьому хості. Провайдер може запустити ваш сервер на іншому обладнанні, і диск буде доступний разом із ним. Локальний NVMe працює швидше, але прив’язаний до однієї фізичної машини. Тому відмова обладнання означає відновлення з резервної копії. Запитайте, який варіант використовує тарифний план. Майже ніхто цього не робить.

Як відчувається різниця на реальному сервері

Робота сервера здебільшого складається з невеликих довільних операцій читання та запису, а не з довгих послідовних передавань. Тому показник MB/s у рекламному описі — найменш корисне число на сторінці.

  • Фіксація транзакцій бази даних. База даних, яка гарантує збереження даних, викликає fsync під час фіксації транзакції, а потім чекає, доки накопичувач підтвердить фактичний запис даних. На жорсткому диску це очікування триває мілісекунди, тому невелика база даних обмежується кількома сотнями фіксацій за секунду. На flash-накопичувачі те саме очікування займає частку мілісекунди. Саме тут розрив найбільший, незалежно від того, чи використовується PostgreSQL, MySQL або SQLite як виробнича база даних.
  • Встановлення пакетів. apt install розпаковує тисячі невеликих файлів і в процесі синхронізує їх із диском. Майже жодна з цих операцій не є послідовною, тому їхня швидкість обмежена показником IOPS.
  • Завантаження образів контейнерів. docker pull отримує стиснені шари через мережу, а потім розпаковує їх у тисячі невеликих файлів. Завантаження обмежене пропускною здатністю мережі. Розпакування обмежене швидкістю диска, і на повільному томі саме його завершення доводиться чекати.
  • Завантаження та перезавантаження. Під час запуску зчитуються ядро та initramfs, а потім сотні невеликих unit-файлів і спільних бібліотек, розташованих у різних місцях тому.

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

Чому «хмарний хостинг на SSD» на сторінці з тарифами майже нічого не означає

Це слово описує лише тип носія. Воно нічого не говорить про інтерфейс, із яким працює диск, і про те, чи встановлений цей диск у тому самому сервері, що й ваш сервер. Також воно нічого не говорить про максимальні показники, доступні вашому тарифу.

Саме максимальні показники мають найбільше значення, але їх найрідше вказують у рекламі. Провайдери обмежують IOPS і пропускну здатність для кожного тому, оскільки один хост обслуговує багатьох клієнтів, а необмежений сусідній ресурс може позбавити інших клієнтів доступної продуктивності. Обмеження на рівні кількох тисяч 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 мій вебсайт швидшим?

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

Як перевірити, чи справді мій VPS використовує SSD-сховище?

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

Чи мережеве SSD-сховище гірше за локальне NVMe?

Воно повільніше для кожної операції та має інший характер відмов. Мережева затримка додається до кожного читання й запису, тому затримка вища, навіть якщо обидва варіанти використовують флеш-пам’ять. Водночас дані не зберігаються на одному фізичному хості. Тому відмова хоста не виводить том з ладу, а створення знімків і жива міграція для постачальника простіші. Вибирайте локальну флеш-пам’ять для бази даних, чутливої до затримки. Вибирайте мережеве сховище, якщо збереження тому важливіше за мікросекунди.

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