Valuable insights
1.Масштабирование начинается с виртуализации: Переход от виртуальной машины на ноутбуке к облачным средам требует системного подхода к масштабированию инфраструктуры и ресурсов.
2.Ограничения вертикального роста: Увеличение мощности одного сервера ограничено производительностью одного потока, что вынуждает выносить фоновые задачи в отдельные воркеры.
3.Облачный сервер имеет физические пределы: Среднестатистический облачный сервер ограничен в ядрах CPU, объеме оперативной памяти и количестве дисков, что накладывает ограничения на максимальный размер ВМ.
4.Отказоустойчивость требует горизонтального масштабирования: Для достижения отказоустойчивости необходимо множить количество виртуальных машин, что усложняет синхронизацию состояния между множеством баз данных.
5.Локальные ФС не подходят для кластеров: Локальные файловые системы (XFS, ZFS) плохо синхронизируются между ВМ; целевым решением является распределенное объектное хранилище типа S3.
6.Задержки критически влияют на производительность: Сетевое взаимодействие с соседним сервером в тысячи раз медленнее доступа к L1 кэшу, что диктует необходимость минимизации сетевых обращений.
7.Оптимизация через пакетную обработку: Обработка данных оптом (бачами) снижает влияние высоких сетевых задержек, поскольку задержка по сети платится один раз за блок, а не за каждую сущность.
8.Проблема шумного соседа в многопользовательской среде: Конкуренция за общие ресурсы, включая L1 кэш и пропускную способность сети, возникает даже при наличии запаса ресурсов на гипервизоре.
9.Мультиарендность требует SDN-оркестрации: Изоляция множества клиентов (мультиарендность) достигается за счет оркестраторов программно-определяемых сетей (SDN), балансировщиков и приватных сетей.
10.Кворум необходим для консистентности данных: Для предотвращения ситуации split-brain и обеспечения актуальности данных при отказе узла требуется кворум, состоящий минимум из 2/3 нод.
11.Инфраструктура как скот, а не как питомец: Инфраструктурные компоненты должны управляться автоматизированно, чтобы отказы переживались без ручного вмешательства, что требует унификации и идентификации (UUID).
12.Декларативный подход к развертыванию: Инструменты вроде Terraform позволяют декларативно описывать желаемое состояние инфраструктуры, но часто не обеспечивают свойство самолечения (self-healing).
От виртуальной машины на ноутбуке к облакам
Продолжается обсуждение темы виртуализации и контейнеров, целью которого является переход от использования виртуальной машины на локальном ноутбуке непосредственно к облачным решениям. Спикер имеет многолетний опыт работы в облачной сфере и в настоящее время занимается развитием собственного стартапа, фокусирующегося на инфраструктурных решениях, включая программируемые хранилища и сети, с акцентом на разработку в среде открытого исходного кода (open source).
Начало стартапа и фокус на Open Source
Большинство стартапов, включая упомянутый проект, начинаются с разработки на личном оборудовании, например, на ноутбуке. Однако для достижения масштабов крупного конгломерата такое решение становится недостаточным. Отличительной особенностью деятельности стартапа является реализация всех решений в формате open source, что обеспечивает прозрачность и возможность использования сообществом.
- Использование ноутбука для кодирования и запуска приложений.
- Необходимость иметь виртуальную машину для запуска кода или баз данных.
- Планирование перехода на тестовые и продуктивные среды для дальнейшего масштабирования.
Ограничения вертикального масштабирования
Когда требуется дальнейший рост, первым наивным шагом является вертикальное масштабирование: замена ноутбука на более мощное оборудование, возможно, размером со стойку, называемое мейнфреймом. Однако производительность одного потока не масштабируется должным образом. Это означает, что даже при увеличении ресурсов системы, узким местом остается обработка задач одним потоком.
Вынос фоновых задач и лимиты сервера
Для обхода ограничений одного потока длительные операции выносятся в отдельные фоновые потоки, такие как генерация кэша или выполнение джабов воркерами. При получении запроса к API система быстро отдает готовый результат или предлагает клиенту прийти позже. Тем не менее, физические и экономические факторы накладывают жесткие ограничения на размер любого отдельного сервера.
Как бы вы его ни растили, и физика, и экономика она всё-таки даёт нам по рукам, что он конечен.
Анатомия сервера в облачной инфраструктуре
Облако представляет собой набор физических серверов. Среднестатистический сервер в облаке может иметь до 200 ядер (до 400 потоков), особенно при использовании современных процессоров AMD EPYC, которые могут поддерживать несколько сокетов. Оперативная память может достигать 6 ТБ на процессор, а количество локальных дисков (NVME или HDD) ограничено примерно тридцатью, хотя физически можно подключить больше дисковых полок.
Отказоустойчивость и отказ дата-центра
Даже если растянуть виртуальную машину на один гипервизор, используя все его ресурсы (до 300 ядер и 12 ТБ ОЗУ), сохраняется проблема конечных ресурсов (сети, диски) и отсутствие отказоустойчивости. Отказ одного сервера приводит к простою. Более того, крупные провайдеры регулярно сталкиваются с авариями на уровне целых дата-центров, что является нормой, к которой необходимо готовиться.
Горизонтальное масштабирование и хранилище
Следующая задача — горизонтальное масштабирование путем увеличения количества виртуальных машин. Это порождает проблему синхронизации состояния, которое ранее хранилось в одной базе данных. Теперь необходимо синхронизировать множество баз данных для обеспечения отказоустойчивости и масштабирования, что переводит обсуждение к построению хранилища.
Типы дисковых хранилищ в облаках
Существует несколько типов дисков. Локальные диски обеспечивают высокую скорость, но при отказе сервера данные теряются. Сетевые хранилища делятся на нереплицируемые (доступные по сети, но также с единой точкой отказа) и реплицируемые (имеющие копии данных для повышения надежности).
- Локальные диски: высокая скорость, низкая отказоустойчивость.
- Сетевые нереплицируемые диски: доступ по сети, но при отказе хоста диск недоступен.
- Сетевые реплицируемые диски: наличие копий, но все равно привязаны к монопольному доступу ВМ.
Концепция S3 и важность задержек
Целевое хранилище может быть построено на основе HTTP-протокола, фокусируясь на создании, удалении и получении файлов. Это приводит к созданию абстракции, где метаданные хранятся в кластеризованной базе данных, а сами данные — на дисках. Такая модель, известная как Simple Storage Service (S3), является объектным, а не файловым хранилищем, и, что критично, она распределена.
Пирамида задержек в инфраструктуре
Критически важным параметром является задержка (latency). Пирамида задержек показывает, что доступ к L1 кэшу занимает около полунаносекунды (2 млрд операций в секунду). Попадание в L2 кэш или блокировки увеличивают задержку в десятки раз. Оперативная память в 200 раз медленнее L1 кэша. Самое медленное — это сетевое взаимодействие: по одному проводку между серверами задержка составляет 10 000 наносекунд, что в 20 000 раз медленнее L1 кэша.
Оптимизация, уровни хранения и практическое масштабирование
Сетевые задержки сильно влияют на разработку: поштучная обработка данных из сетевой базы данных приводит к многократному начислению задержки. Основная оптимизация заключается в пакетной обработке данных. Многие библиотеки, например, `pyco pg2` на Python, уже реализуют эту оптимизацию под капотом, выбирая тысячи записей сразу, а не по одной.
Классы хранилищ и S3
Хранилища делятся на классы по степени «горячести». Самые быстрые — это in-memory данные. Более теплые — базы данных с персистентностью на диске. S3, будучи распределенным, является самым холодным и медленным, иногда его скорость сравнима со скоростью работы жестких дисков, что ограничивает его до 500 операций в секунду.
К сожалению, S3 из-за того, что он должен быть распределённый, разнесённый, будет сильно медленнее и иногда будет аналогичен жёстким диском.
Практическое масштабирование через сервисы
На практике нагрузка и базы данных разделяются. Базы данных собираются в кластеры для отказоустойчивости. Выделение ВМ отдельно позволяет мыслить о базе данных как о сервисе (DBaaS или PaaS). Управление базами данных как услугой снимает с разработчика необходимость решать проблемы обновления и обслуживания, позволяя использовать те же данные для новых бизнес-сервисов.
Сетевая связность и мультиарендность
После решения вопросов хранения необходимо обеспечить связанность для клиентов. Наивный подход с выдачей публичных IP всем ВМ нежелателен, так как это открывает доступ к приватным компонентам, например, базам данных. В результате появляется концепция приватной сети с приватными адресами (10.0.0.x) для каждой ВМ.
Роль SDN-оркестратора
Ключевым понятием становится мультиарендность — одновременное сосуществование множества клиентов, которые не должны видеть друг друга. Этим управляет оркестратор SDN (Software Defined Network). Он предоставляет базовые строительные блоки, такие как коммутаторы (свитчи), DHCP-серверы, базовые файрволы для ограничения портов и DNS-серверы (публичные и приватные).
- Базовый свитч и DHCP для выдачи адресов.
- Базовый файрвол для ограничения трафика между ВМ.
- Публичный и приватный DNS-серверы для разрешения имен.
- Роутеры для выхода в интернет и балансировщики нагрузки (Load Balancer).
Консистентность данных и кворум
При масштабировании на несколько дата-центров (ЦОД) возникает проблема консистентности данных: в случае отказа одного ЦОД необходимо точно знать, какая информация была актуальной. При наличии одной или двух нод отказ приводит к невозможности работы или ситуации «разделенного мозга» (split brain), когда ноды не могут договориться о состоянии.
Введение кворума для надежности
Самый надежный вариант — это три и более ноды. Мастер-нода не должна отвечать клиенту, пока не реплицирует запрос хотя бы на одну ноду. В идеале для большинства систем требуется кворум, то есть не менее 2/3 от общего числа нод, чтобы принять решение о консистентности. Отказавший элемент, вернувшись, легко догоняет актуальное состояние.
- Третий узел, являющийся точной копией системы (срез ВМ и БД).
- Арбитр (Witness), содержащий только информацию о текущем состоянии (infoflow), а не персистентные данные.
Парадигмы развертывания и автоматизация
Сложность развертывания тысяч виртуальных машин, дисков, балансировщиков и платформенных сервисов (S3, БД) требует автоматизации. Ручное управление тысячами компонентов невозможно. Возникает необходимость в подходе, который абстрагирует разработчика от конкретных деталей инсталляции.
Pets против Cattle
Существуют две парадигмы управления: «питомцы» (Pets) и «скот» (Cattle). «Питомец» — это конкретный сервер, который знают поименно, лелеют и чинят вручную при аварии (например, чистят логи). «Скот» — это безымянные сущности с UUID, управляемые автоматизированно. В случае отказа «скота» система должна автоматически заменять неисправный элемент.
В случае аварии вы должны достичь ситуации, что и аварии переживаются автоматически, что не вы руками идете, что-то опять чините.
Инструменты деплоя и их ограничения
Управление через API является ключевым для автоматизации. Инструменты типа Ansible или Puppet работают императивно, описывая желаемое состояние через инвентарь, который часто статичен. Terraform и аналоги позволяют декларативно задать требования, но они хранят инвентарь централизованно, что создает новую точку отказа. Главный недостаток этих инструментов — отсутствие свойства самолечения (self-healing) и привязка к конкретной инсталляции.
Видение облачной операционной системы
В идеале развертывание должно быть как сервис. Разработчик должен декларативно указывать, какие сервисы ему нужны (например, одна база данных), не заботясь о версии, IP-адресах или паролях. Это должно покрывать полный жизненный цикл: развертывание, обновление и переезд. Также критически важна полная обсервабилити (мониторинг) из коробки, не привязанная к конкретному облаку.
Идеальная кластерная операционная система
Идеальное будущее — это облачная операционная система, где разработчик не думает о том, как байты попадают на диск, как работает сеть или как происходит репликация. Все зависимости должны описываться декларативно. Это позволит быстро бутстрапить новых разработчиков, предоставляя им полную локальную копию системы за минуты, а не часы или дни.
- Легкое масштабирование ресурсов через API.
- Решение проблемы консистентности данных на распределенном уровне.
- Высокую утилизацию железа, несмотря на шумных соседей.
- Полный цикл управления инфраструктурой и сервисами.
Questions
Common questions and answers from the video to help you understand the content better.
Почему вертикальное масштабирование серверов ограничено, и какие задачи выносятся в фоновые потоки?
Вертикальное масштабирование ограничено производительностью одного потока процессора. Задачи, требующие длительного выполнения, такие как генерация кэша или фоновые воркеры, выносятся в отдельные потоки, чтобы не блокировать обработку клиентских запросов.
Каково основное отличие S3-подобного объектного хранилища от традиционных локальных файловых систем с точки зрения кластеризации?
Традиционные файловые системы (XFS, ZFS) являются локальными и плохо синхронизируются между несколькими виртуальными машинами. S3-подобное хранилище является распределенным и объектным, что позволяет множеству ВМ обращаться к данным без монопольного доступа и обеспечивает лучшую отказоустойчивость.
Что такое эффект «шумного соседа» в контексте виртуализации и как он влияет на производительность?
Эффект «шумного соседа» возникает, когда другая виртуальная машина на том же гипервизоре чрезмерно использует общие ресурсы, например, пропускную способность сети или L1 кэш процессора. Это приводит к резкому увеличению задержек для соседних ВМ, так как их данные вытесняются из кэша.
Какое минимальное количество узлов необходимо для обеспечения консистентности данных в кластере и предотвращения split brain?
Для надежного обеспечения консистентности и избежания ситуации разделенного мозга (split brain) необходимо иметь кворум, который в идеале составляет не менее 2/3 от общего числа нод в кластере.
В чем заключается разница между подходами к управлению инфраструктурой «питомец» (Pet) и «скот» (Cattle)?
Подход «питомец» предполагает ручное управление и ремонт конкретного сервера, тогда как подход «скот» рассматривает инфраструктурные единицы как безымянные, заменяемые компоненты (UUID). В случае отказа «скота» система должна автоматически восстанавливать работоспособность без ручного вмешательства.
Почему декларативные инструменты развертывания, такие как Terraform, все еще не решают проблему самолечения инфраструктуры?
Декларативные инструменты хорошо описывают желаемое состояние, но они не обладают свойством самолечения (self-healing). Если что-то выходит из строя внутри ВМ (например, кончается место), инструмент может только пересоздать ВМ, но не диагностировать и чинить внутренние проблемы.
Useful links
These links were generated based on the content of the video to help you deepen your knowledge about the topics discussed.
