![](https://habrastorage.org/webt/gy/hq/-u/gyhq-uanngcacd7hzyglo32rc7o.jpeg)
Когда речь заходит о выборе инфраструктуры, возникает классический вопрос: использовать готовый сервис в облаке или собрать свой на выделенных серверах. На первый взгляд, все просто: облако — это про скорость и удобство, а выделенные серверы — про мощность и производительность. Но все не так просто.
Облако — это не монолит, а набор кубиков (сервисов), из которых можно собирать решения под любые задачи — в том числе под очень требовательные к производительности. В этой статье мы проверим, насколько вариативно облако, сравним плюсы и минусы двух принципиально разных подходов к инфраструктуре и посмотрим на новый «кубик» в экосистеме Selectel — DBaaS на выделенном сервере. Разберемся, как он появился, зачем нужен и как сочетает производительность выделенного сервера с удобством облака. Готовы? Я Гришин Александр продакт менеджер облачных баз данных и объектного хранилища в Selectel, и сегодня я предлагаю собрать это облачное «LEGO» вместе!
Используйте навигацию, если не хотите читать текст полностью:
→ Облако — это LEGO для взрослых
→ Готовые базы данных в облаке
→ Выделенные серверы
→ Облачная СУБД на выделенном сервере
Облако — это LEGO для взрослых
Наши клиенты в облаке обычно решают две базовые задачи: хранение данных и вычисления. Давайте упрощенно посмотрим, сколькими способами можно хранить данные в Selectel. На выбор у нас имеется:
- семь типов виртуальных машин: Standard, CPU, Memory Line, GPU, Shared, HighFreq, SGX;
- четыре типа дисков: локальный SSD NVMe, сетевой HDD базовый, сетевой SSD универсальный, сетевой SSD быстрый;
- три типа файловых хранилищ: базовое, универсальное, быстрое;
- четыре типа объектного хранилища: S3, OpenStack Swift, стандартное, холодное;
- три типа СХД: шаренный LUN, выделенное аппаратное устройство, ленточная СХД;
- семь типов готовых облачных СУБД;
- выделенные серверы (можно же хранить данные просто на сервере).
Итого: 29 способов хранить данные.
Теперь рассмотрим варианты реализации вычислений:
- снова те же семь типов виртуальных машин,
- два типа кластеров Kubernetes: обычный и отказоустойчивый,
- четыре типа воркер-нод в каждом кластере Kubernetes,
- снова выделенные серверы.
И вот у нас 16 способов организовать вычисления на сервере.
Оценим, сколько есть способов решить какую-нибудь тривиальную задачу. Скажем, нам нужно развернуть простой сайт, используя один способ хранения и один способ вычисления в облаке. Посчитаем количество сочетаний «кубиков». Кажется, пока все просто:
29 х 16 = 464 сочетания.
При этом мы всегда можем пойти по скользкой дорожке — отказаться от набора элементов и реализовать все на одном «кубике». Например, использовать только одну виртуальную машину для всего или реализовать статический сайт вообще без вычислений, используя только функциональность объектного S3-хранилища.
Это расширяет наш набор до 481 сочетания. Только задумайтесь 481 способ решения тривиальной задачи в духе «сделайте мне простой сайт».
Рассмотрим что-нибудь посложнее — распилим монолит. Допустим, мы хотим из огромного старого сервиса сделать что-то красивое и современное, состоящее из пяти микросервисов. Выбираем пять независимых способов хранения и пять способов вычислений. В этот раз не будем считать за сочетания возможность объединить compute и storage. Предположим, в нашем ТЗ явно прописано, что они должны быть разнесены.
Возьмем базовую формулу комбинаторики, чтобы оценить, сколькими способами можно выбрать пять вариантов из 29 с условием, что они могут повторяться (мы же можем для всех пяти микросервисов использовать один и тот же тип СУБД):
![](https://habrastorage.org/getpro/habr//post_images/8c8/c88/962/8c8c8896231fece18ce35b0ee2b9fccf.png)
Мы получаем 237 336 способов хранения информации.
Оценим, сколько есть способов выбрать пять «кубиков», отвечающих за вычисления:
![](https://habrastorage.org/getpro/habr//post_images/9ec/061/089/9ec0610898f1e36f8bf2b454a9922350.png)
Получается, у нас есть 15 504 способа выбрать пять вариантов из 16 с условием, что они могут повторяться.
Неплохо. Это означает, что есть больше 3,6 млрд вариантов решения нашей тривиальной задачи в облаке.
237 336 х 15 504 = 3 683 831 424 способа сложить «кубики».
Стоит учесть, что представленная мною оценка осознанно упрощена и исключает некоторые базовые элементы инфраструктуры: регионы, пулы, автономные сегменты облака, варианты реализации сетевой связанности, балансировщики, глобальные и облачные роутеры, CDN, DNS, кэш, очереди и шины данных, мониторинг, логирование, резервное копирование и другие сервисы Selectel. Добавим их и получим уже десятки миллиардов сочетаний. Каждый раз, когда я осознаю эту вариативность облака, я в первую очередь вспоминаю конструктор LEGO.
И при всем этом на самом деле у нас всего два принципиальных подхода к инфраструктуре:
- использовать готовые сервисы в облаке;
- собирать и настраивать все самостоятельно на выделенном сервере.
Давайте пройдемся по их плюсам и минусам, а затем перейдем к объединению двух подходов в одно решение — облачной базе данных на выделенном сервере.
![](https://habrastorage.org/webt/iy/ap/nn/iyapnnbbh7wcpqs3q71allkcsai.png)
Готовые базы данных в облаке
Облачный сервис — это набор готовых решений от провайдера, где все уже установлено и настроено для клиента. Буквально бери и пользуйся. В качестве примера рассмотрим интерфейс заказа облачной базы данных (DBaaS):
![](https://habrastorage.org/getpro/habr//post_images/545/fc8/859/545fc8859d32eceb9aa986589f259831.png)
Сервис подразумевает небольшое количество настроек: пользователю нужно подобрать только версию СУБД, количество ядер, объем RAM и диска. Все уже готово к использованию и быстро развернется после пары кликов в интерфейсе.
Плюсы:
- простота и скорость запуска,
- легкость масштабирования,
- простое обслуживание,
- логическая изоляция инфраструктуры,
- оплата только за фактически потребленные ресурсы по модели pay-as-you-go.
Как следствие, клиент получает хороший time-to-market и минимальные расходы на старте.
Минусы:
- нет физической изоляции — одна база данных делит физический хост (а значит, дисковую подсистему, шину, канал и прочее) с другими виртуальными машинами;
- нет возможности кастомизации аппаратной платформы — инфраструктура хостов в облаках гомогенна, так проще обеспечивать абстракцию виртуальных машин от аппаратной составляющей.
Следовательно, клиенту сложнее получить выдающуюся производительность. Даже если вы знаете, что под ваш профиль нагрузки лучше подходит какое-то конкретное оборудование или его настройка, сервис уже собран. Одновременно с вами его используют десятки тысяч других клиентов. Вы можете только взять и использовать его «как есть».
Выделенные серверы
В целом, здесь все наоборот. Полная гибкость и свобода, собрать можно что угодно, но смысл в этом есть только при условии, что вы справитесь с управлением инфраструктурой.
![](https://habrastorage.org/getpro/habr//post_images/60d/bcd/f47/60dbcdf47aaa68df2a3609f03d90d6a8.png)
Все начинается с выбора сервера. Можно взять что-то из того, что есть в наличии, или собрать кастомную конфигурацию. Провайдер предоставит вам предустановленную операционную систему, если она нужна, и доступ к BMC по IPMI. Дальше к работе приступят ваши специалисты: развернут виртуализацию и нужные сервисы хранения, вычисления, мониторинга и резервного копирования.
Плюсы:
- кастомизация аппаратной платформы под конкретную задачу,
- изоляция на физическом уровне (а это, в том числе, плюс для ИБ),
Как следствие, есть возможность получить более высокую производительность.
Минусы:
- вашим специалистам предстоит больше работы — зона ответственности провайдера в такой услуге заканчивается обеспечением питания, охлаждения и охраны вашего сервера;
- минимальный шаг масштабирования — один сервер;
- для эксплуатации нужна сравнительно большая экспертиза и компетенции;
- вы оплачиваете все арендованные ресурсы даже если часть из них простаивает.
В результате time-to-market в таком варианте, как правило, ниже, а расходы и трудозатраты на старте — выше.
Так что же выбрать? Вот тут-то и начинается самое интересное. Мы решили проверить, что получится, если взять облачную услугу и запустить ее на выделенном сервере. Начали с DBaaS и Managed Kubernetes. О Kubernetes расскажут мои коллеги в другой раз, а дальше я сосредоточусь на облачных базах данных.
Облачная СУБД на выделенном сервере
Как выглядит схема классической облачной базы данных как услуги:
![](https://habrastorage.org/getpro/habr//post_images/a89/da6/800/a89da68004c5119f55c3ec9f6b1aa919.png)
DBaaS работает поверх облака. В инфраструктуре есть стандартный хост гомогенной конфигурации, стандартная виртуальная машина, общая на хост дисковая подсистема, сетевые интерфейсы и канал.
В реальности один сервер обслуживает десятки, а то и сотни виртуальных машин. Профиль нагрузки на каждую непредсказуем. На схеме выше одна из ВМ может оказаться СУБД, а все остальные — чем угодно. Они могут появляться, исчезать, масштабироваться и т. д. Подобрать оборудование, идеально настроить ОС, BIOS, гипервизор невозможно. В итоге СУБД вынужденно подстраивается под все облако.
Чтобы решить описанные проблемы, мы пришли к конфигурации DBaaS на выделенном сервере, заточенном под конкретную задачу — обеспечить высокую производительность базы данных.
![](https://habrastorage.org/getpro/habr//post_images/b56/0e2/fee/b560e2fee57cd86ad87d50e45cdf76e5.png)
Здесь мы всегда имеем одну виртуальную машину размером почти с весь выделенный сервер. По сути, весь хост — одна нода кластера СУБД, в которой можно настроить и гипервизор, и ОС, и BIOS. На уровне железа можно подобрать комплектующие, которые наиболее оптимальны для той или иной СУБД. И больше нет конкуренции за общие компоненты системы вроде пропускной способности сети или производительности дисковой подсистемы хоста.
![](https://habrastorage.org/getpro/habr//post_images/590/b0f/9a6/590b0f9a6710daa9b7672ef7b8b2dc41.png)
Другими словами, все уровни инфраструктуры от сокетов процессора и планок RAM до кастомных настроек в KVM служат одной цели — повышению производительности СУБД. Эффективно ли это? В тестах мы получили показатели производительности почти в 10 раз превосходящие стандартный подход DBaaS по таким параметрам, как TPS, IOPS, bandwidth.
Если вам интересно узнать больше о том, как производительность СУБД зависит от железа, рекомендую статьи моих коллег:
В интерфейсе все просто — здесь все тот же конструктор, но вместо выбора конфигурации виртуальной машины можно подобрать выделенный сервер.
![](https://habrastorage.org/getpro/habr//post_images/a28/c33/9d1/a28c339d1f61c7c9d6b5e055e3a9bf98.png)
Приятный бонус к производительности: новая услуга получилась на 40% дешевле, чем классический вариант в облаке. Снизить цену получилось за счет предсказуемости. Клиент арендует сразу весь сервер, который точно будет использоваться для запуска СУБД, поведение и масштабирование которой заранее известно.
А как вам идея запустить облачную услугу на выделенном сервере? Поделитесь мнением или задайте вопросы в комментариях — все обсудим.