Експрес-огляд продуктивності PostgreSQL 10.5 в новітніх хмарних сервісах Яндекс.Хмари
Буквально днями Яндекс відкрив доступ для beta-користувачів до свого нового сервісу — Яндекс.Хмара. Так вийшло, що ця подія співпала з необхідністю вибору хмарної платформи для одного з наших внутрішніх проектів і я вирішив протестувати продуктивність рішень Яндекса.
Для тесту я взяв PostgreSQL і старий добрий pgbench. Вибір СУБД упав тому що було цікаво перевірити та порівняти продуктивність не тільки віртуальних машин, то і managed database сервісів.
Disclaimer: автор не є ні професійним адміністратором, ні DBA, ні фахівцем по налаштуванню хмарних рішень. Тестування проводилося виключно в особистих цілях і не претендує на об’єктивність, тому прошу сприймати статтю «as is». Всередині не буде якогось глибокого аналізу, але буде експрес-порівняння з Selectel VPC (на різних дисках) і різними конфігураціями AWS EC2/RDS щодо продуктивності і вартості рішень. Можливо, це заощадить комусь трохи часу.
Подробиці Yandex.Cloud vs Selectel VPC vs AWS під катом.
Структура сервісів Яндекс.Хмари
Структура ресурсів Яндекс.Хмари звичайна для такого роду сервісів:
Квоти ресурсів (глобальні)
Каталог (проект)
— Compute Cloud (віртуальні машини і диски)
— Managed Databases (кластери баз даних, можна запускати бази Clickhouse, MongoDB і PostgreSQL)
— Object Storage (хмарне сховище)
— Virtual Private Cloud (хмарні мережі)
— API
Детально описувати інтерфейс не бачу сенсу, тим більше, що документація знаходиться у вільному доступі і з неї багато і так зрозуміло.
Порівнювані конфігурації
Для всіх віртуальних инстансов в тесті були виділені наступні ресурси:
vCPU: 8 cores
RAM: 32 Gb
Disk: SSD (конкретний клас — див. досліджувані инстансы).
OS: CentOS 7 minimal
Для managed database-сервісів запитувалася максимально близька конфігурація (у Яндекса і AWS як раз є конфігурації з 8CPU/32RAM).
Протестована версія Postgres — 10.5. На виртуалки він ставився з пакету postgresql10-server
, а на managed-кластерах вибиралася ця версія зі списку.
Методика тестування
- На чисту ОС встановлювалися пакети
postgresql10-server
іpostgresql10
- Инициализировалась БД для бенчмарка з параметрами:
pgbench -i -s 100
- Три рази прогонялся бенчмарк з параметрами:
pgbench -з 10 -T 60
- Утиліта
pgbench
запускалася на тій же віртуальній машині, де встановлена СУБД, а для managed-кластерів — на віртуальній машині в тому ж хмарі. - У таблицю результатів заносився кращий результат з трьох.
Результати тестування
Всі результати експрес-тесту однією таблицею (графіки нижче):
Resource TPS Price
AWS EC2 m5.2xlarge | 2822 | 343 |
AWS EC2 m5d.2xlarge | 2752 | 403 |
AWS EC2 t3.2xlarge | 2636 | 290 |
AWS EC2 t2.2xlarge | 2259 | 320 |
AWS EC2 m4.2xlarge | 2187 | 358 |
Selectel VPC (fast SSD) | 1524 | 186 |
Yandex Compute Cloud Instance | 1309 | 155 |
Yandex Cloud Managed Database | 1226 | 234 |
AWS RDS db.m4.2xlarge (3000 IOPS) | 1200 | 1007 |
AWS RDS db.t2.2xlarge (3000 IOPS) | 1127 | 862 |
AWS RDS db.t2.2xlarge (1000 IOPS) | 970 | 625 |
AWS RDS db.m4.2xlarge (1000 IOPS) | 885 | 769 |
Selectel VPC (universal SSD) | 247 | 164 |
У колонці Price представлена розрахункова ціна вартості досліджуваного рішення в місяць в USD, включаючи сховище на 100Gb. Для Amazon RDS, який тарифікується по годинах, вартість години множилася на 720. Ціни для розрахунку взяті з наступних джерел:
— для Yandex Cloud Managed Database
— для Yandex Compute Cloud Instance
— для Selectel VPC Instance
Результати тестування у вигляді графіка:
Висновки
Висновки, загалом-то, досить очевидні: universal SSD у Селектела для цілей розміщення СУБД краще не брати 🙂
Ну а якщо серйозно, то мені було цікаво порівняти в першу чергу Selectel і Yandex. Як виявилося, обидва рішення йдуть практично ніздря в ніздрю як по продуктивності, так і по вартості. Причому вартість приємно здивувала: ціни на досліджувані конфігурації виявилися цілком доступними.
Використовувати аналогічну за параметрами конфігурацію в хмарі AWS очікувано дорожче (хоча я очікував більшої різниці в ціні), але от по продуктивності наздогнати AWS EC2 не зміг жоден з російських провайдерів. Виняток — не зрозумілий мені RDS, яким не допомагає навіть додавання provisioned IOPS — працює він все одно повільно, а варто при цьому дуже і дуже дорого.
Ще пару слів про Яндекс: взагалі, появи такого сервісу я чекав від них давно, очевидно було, що це лише питання часу. Поки ще видно, що він недосконалий (сподіваюся, це відноситься тільки до веб-морді, а не до інфраструктури в цілому), тому як всередині ще багато багів і глюків. Довелося щільно поспілкуватися з тех. підтримкою, щоб зрозуміти, що це баг чи це я щось не розумію. Але, я впевнений, все це швидко відлагодять і на російському ринку IaaS з’явиться ще одна гідна альтернатива.