В мире корпоративной ИТ-инфраструктуры уже много лет существует дискуссия. На одном полюсе — проверенная временем классическая трёхуровневая архитектура (серверы, сеть, внешняя СХД). На другом — гиперконвергентная инфраструктура (HCI), которая объединяет все компоненты в единую программно-определяемую систему. Выбор между ними — это не просто вопрос "что новее", а стратегическое решение, влияющее на управляемость, масштабируемость, отказоустойчивость и совокупную стоимость владения.

В чём различие?
Классическая модель: раздельные компоненты
Традиционная виртуальная инфраструктура строится по принципу "лучший компонент в каждой категории". Серверы – это вычисление. На них все для вычислений. СХД — для надежного хранения информации, а также максимально быстрой записи и чтения. Сетевое оборудование — для передачи информации с минимальными задержками и с максимальной полосой пропускания. Это три независимых уровня: compute (серверы), storage (внешняя СХД) и network (коммутаторы). Каждый элемент по отдельности делает свою функцию максимально хорошо.
Такой подход предполагает, что Compute ноды не хранят данные — вся информация находится на внешней СХД, доступной по сети. Это делает серверы stateless: любой узел может взять на себя нагрузку отказавшего, так как данные хранятся централизованно.
Результат – ваши виртуальные машины защищены с помощью механизмов автоматического рестарта виртуальных машин от аппаратных сбоев, а от потери данных они защищены ровно в той степени, которую может предоставить СХД (ведь в конце-концов виртуальная машина – это файлы на диске). Ну а СХД защищает информацию как на уровне дублирования аппаратных компонент (несколько контроллеров, RAID, етс.), так и с помощью механизмов репликации.
В результате, если у вас получается грамотно собрать все компоненты, у вас получается система, которая позволяет из каждого компонента выжать максимум.
HCI: единый программно-определяемый комплекс
Гиперконвергентная инфраструктура объединяет вычисления, хранилище и сеть в единую систему, работающую на стандартных x86-серверах. Локальные диски каждого сервера объединяются в общий пул хранения с помощью программно-определяемого слоя, а данные реплицируются между узлами для обеспечения отказоустойчивости.
Ключевое отличие: в HCI узлы – stateful, то есть каждый сервер одновременно является и вычислительным ресурсом, и частью распределённой системы хранения. А это значит, что во-первых, требуется обеспечить достаточную скорость записи и чтения, а также требуется как-то защищать эти локальные данные.
В результате HCI системы обрастают «ньюансами». Во-первых, требуется быстрая система ввода-вывода. Тут нельзя экономить на NVMe дисках и контроллерах. Кроме того, ПО HCI имеет гораздо больший overhead (количество ресурсов, которое тратится на обеспечение виртуализации, и которые нельзя отдать виртуальным машинам). Overhead этот нужен для того, чтобы во-первых, оптимизировать чтение-запись, а во-вторых для обеспечения защиты данных.
Защита данных в HCI обычно обеспечивается хитрым механизмом репликации – когда данные, записанные на один хост, сразу же реплицируются на другой. Иногда и не раз. С одной стороны это дает защиту от аппаратного сбоя любого из хостов. С другой — места для хранения требуется в 2-3-4 (смотря какой у вас уровень паранойи) раза. Пропускной способности ваших коммутаторов тоже требуется больше, ведь вы копируете все, что пишете тоже 2-3-4 раза. Это, кстати, причина, по которой почти любой, кто строит HCI в России должен ментально приготовиться к переходу с 10G на 25G как минимум.
Все это вместе делает хосты и сопутствующую инфраструктуру для HCI радикально дороже. С другой стороны вам больше не нужна СХД. Впрочем, как не трудно заметить, все зависит от размеров инфраструктуры. Потому что сначала HCI дешевле классики, потом, если она растет, она становится гораздо дороже, а потом… опять дешевле! Но об этом позже.
Кстати, бонус! Вся HCI инфраструктура управляется через единую панель, и вы можете уволить своего Storage админа (шутка... почти...).
Pro и Contrа HCI решений
Аспект |
Преимущества HCI |
Недостатки HCI |
Управление и администрирование |
Единая панель управления. Вся инфраструктура (вычисления, сеть, диски) управляется из одного интерфейса. Узких специалистов надо меньше. |
Единая точка отказа в управлении. К сожалению довольно часты ситуации, когда отказ одного софтового компонента ведет к отказу всего кластера и даже потере данных. Кроме того, программная компонента сложна и требует очень высокой квалификации персонала и очень хорошей технической поддержки |
Скорость развертывания |
«Из коробки» за часы. Разворачивается как единый комплекс. Не требует долгой инженерной интеграции серверов и СХД разных вендоров. |
Предъявляет очень высокие требования к хостам. Даже минимальная конфигурация может быть очень дорогой |
Масштабирование |
Линейное. С каждым новым хостом растет и Capacity, и Performance. Само масштабирование может производиться в очень широких пределах – до сотен хостов. Это основное преимущество HCI систем перед классическими. Потому что классические системы расширяемы настолько, насколько расширяемы СХД – пока вы наращиваете полки, это дешево. Но однажды придется купить дополнительные контроллеры, а это очень большие инвестиции. Кроме того, именно контроллеры часто становятся бутылочными горлышками влияющими на производительность СХД. HCI лишены этих недостатков. |
Минимальная конфигурация – 4 хоста. Легкого старта на потестировать может не получиться. Особенно если важна производительность. |
Отказоустойчивость |
Встроенная самовосстанавливаемость. Репликация и автомиграция ВМ при сбое узла. |
Программные компоненты сложны и могут являются точками отказа. Особенно при обновлениях. |
Производительность |
Локальность данных. ВМ работает с дисками своего же узла по локальной шине (без задержек сети SAN). Бутылочные горлышки отсутствуют – каждый хост пишет данные локально и передает данные самостоятельно. Нет единого «бутылочного горлышка». |
Нестабильность при неравномерных нагрузках - если одна ВМ на узле нагружает диск, страдают все ВМ на этом же узле. бОльшая уязвимость к мисконфигурациям – даже небольшие задержки в сети генерируют большие проблемы на ВМ. Расход ресурсов на репликацию. Чтобы обеспечить надежность, нужно держать «лишние» копии данных (обычно 2–3). Повышенная нагрузка на сеть. |
Стоимость (CAPEX) |
Ниже порог входа. Покупаются стандартные x86-серверы. Нет дорогой внешней СХД с специализированными контроллерами. |
Высокая стоимость на каждого конкретного хоста. Необходимость апгрейда сети. |
Эксплуатация (OPEX) |
Экономия на специалистах. Один администратор управляет кластером. Меньше времени на диагностику «на стыке» разных систем. |
Сложный апгрейд ПО. Сложное ПО. Высокий риск, что баги в ПО приведут к серьезным проблемам. Большая зависимость от качественной поддержки вендора |
Специфические нагрузки (БД, 1С, OLTP) |
— (нет прямого преимущества) |
Уступает выделенной СХД. Для высоконагруженных транзакционных БД с жесткими требованиями к задержкам (латентности) внешняя СХД с NVMe и выделенными контроллерами часто стабильнее и быстрее HCI. |
Что выбрать?
Когда выбирать HCI
Инфраструктура строится с нуля или требует существенного обновления. HCI позволяет быстро развернуть современную платформу без многомесячных интеграционных работ.
Важна скорость масштабирования. Для быстрорастущего бизнеса или проектов с неясными требованиями к ресурсам —узлы добавляются по мере необходимости. Идеально для Cloud-провайдеров!
Когда выбирать классическую схему с СХД
Высоконагруженные базы данных и специфические рабочие нагрузки. Для транзакционных баз данных с жёсткими требованиями к задержкам выделенная СХД может обеспечить более предсказуемую производительность.
Необходимость независимого масштабирования хранилища и вычислений. Если вам требуется добавить только ёмкость без увеличения вычислительных мощностей — классическая архитектура позволяет это сделать
Существующие крупные инвестиции в СХД. Если у вас уже есть дорогостоящая СХД и вы не готовы к замене — нет смысла отказываться от работающей. инфраструктуры.
Специфические требования к управлению данными. Некоторые задачи требуют особых функций, которые есть только у конкретных СХД-вендоров. Например кластера с использованием SCSI примитивов.
Заключение
HCI и классическая архитектура с внешней СХД — это не "плохое" против "хорошего", а разные инструменты для разных задач. Для большинства современных корпоративных нагрузок, особенно при строительстве инфраструктуры с нуля, HCI предлагает лучшее соотношение простоты управления, надёжности и совокупной стоимости владения. Однако классическая трёхуровневая архитектура сохраняет преимущества в специализированных сценариях с экстремальными требованиями к производительности или в среде со сложившейся инфраструктурой и накопленной экспертизой.
Рынок активно движется в сторону HCI, но в каждом конкретном случае необходимо точно понимать все сильные и слабые стороны обоих вариантов.
say_TT_plz
Тут не раскрыта тема RDMA и в целом гиперконвергентные хранилища как класс.
Но да, выбор небольшой, DPDK или rdma-core. Огромные требования к ПО как к клиенту, так и хранилищу.
Я к тому, что за отказ от привязки к железу, мы должны заплатить огромной стоимостью софта. Но в целом, современное железо способно выжать больше, чем классические СХД. При этом обеспечить масштабируемость и гибкость.
Даже если учитывать, что техногиганты пошли в сторону дорогих проприетарных решений и специфичных асиков. Можно сделать тоже самое на обычном серверном железе, Mellanox и без проприетарных либ и коммутаторов. И я сейчас не про Ceph.
Но парадокс в том, что всем такое решение нужно, но те кто мог бы сделать, уже завязались на асики. А остальные пошли в сторону универсальности, где скоростью и не пахнет. Особенно от этого страдают ИИ фабрики.
Я грешным делом даже попытался хотя бы на уровне архитектуры представить такое решение, посчитать на TLA, прикинуть стек. По факту выходит, что там без kernel bypass, RDMA(DPDK или rdma-core) там не вырулить. А чтобы обойти или приблизится по скорости к проприетарным решениям, там придется использовать Rust + assembly. Причем использовать максимум новых инструкций которые приехали в zen 4 и 5. Использовать возможности сетевой карты хранить карту распределения блоков(там с кучей обходных маневров), писать данные через AMD Cache Allocation сразу в L3 кэш процессора.
Выделять отдельные ядра под обработку пакетов, с условием так называемого numa=4. Когда мы ставим сразу 4 сетевые карты на каждую из шин, чтобы не мучать шину Infinity fabric. И обеспечить работу так, чтобы путь чтения/записи блоков шел мимо этой шины. Как если бы сервер был чем-то вроде 4 отдельных серверов, объединенных одной шиной. То есть данные идут сразу в L3 кэш, потом в hugepage(своего ядра), оттуда уже контроллер NVME с помощью SPDK забирает к себе блоки из Hugepage. При чем тот контроллер, который на одной шине с сетевой картой.
Конечно эти танцы применительно только к AMD Epyc, но будем честными. Они дешевле и они хороши. Нужно только подстроиться под них, в том числе на уровне расчета того же Рида Соломона на ассемблере чисто под архитектуру Zen.
Извиняюсь за этот поток сознания, просто тема для меня болезненная. И это еще без описания Contol Plane. Потому что это отдельный ад для системного программирования.
vesper-bot
это вы как-то глубоко очень копнули, эта статья написана на два или три уровня выше этой проблематики. Хотя мне интересно, каждый ли вендор HCI может в принципе внедрить в своём решении поддержку RDMA - был небольшой опыт с Nutanix (2015-2017), у него control plane вынесен на ВМ, которая локально раздавала nfs-mount для гипера и обеспечения репликации хранимых данных (и кучи остального), а сетевой стек был поднят на OpenVSwitch на самом хосте (из-за чего тамошние ВМ не могли принимать мультикаст, отчего полный переезд оказался отменен) - если я правильно понимаю принципы, RDMA в такой конфигурации недоступен для управляющей ВМ.
Xelld
Интересно, почему? Эксплуатировал Nutanix и никогда не видел такой проблемы. Да и в обычном Linux KVM с OVS - тоже.
vesper-bot
На тот момент в гипере Nutanix не было поддержки multicast, официально, в документации прописано было даже. Сейчас не смотрел, может запилили.