Дезагрегация систем хранения данных и вычислений
Следуя принципу дезагрегации плоскости данных и плоскости управления, Milvus состоит из четырех уровней, которые являются взаимно независимыми с точки зрения масштабируемости и аварийного восстановления.
Уровень доступа
Состоящий из группы прокси-серверов без статического управления, уровень доступа является передним уровнем системы и конечной точкой для пользователей. Он проверяет запросы клиентов и сокращает возвращаемые результаты:
- Прокси сам по себе не имеет статусов. Он обеспечивает единый адрес сервиса, используя компоненты балансировки нагрузки, такие как Nginx, Kubernetes Ingress, NodePort и LVS.
- Поскольку в Milvus используется архитектура массивно-параллельной обработки (MPP), прокси агрегирует и обрабатывает промежуточные результаты, прежде чем вернуть клиенту окончательные результаты.
Служба координатора
Служба-координатор распределяет задачи между рабочими узлами и выполняет функции "мозга" системы. Среди задач, которые он берет на себя, - управление топологией кластера, балансировка нагрузки, генерация временных меток, объявление данных и управление данными.
Существует три типа координаторов: корневой координатор (root coord), координатор данных (data coord) и координатор запросов (query coord).
Корневой координатор (root coord)
Корневой координатор обрабатывает запросы языка определения данных (DDL) и языка управления данными (DCL), такие как создание или удаление коллекций, разделов или индексов, а также управляет выдачей TSO (timestamp Oracle) и временных тикеров.
Координатор запросов (query coord)
Query coord управляет топологией и балансировкой нагрузки для узлов запросов, а также передачей данных из растущих сегментов в закрытые сегменты.
Координатор данных (data coord)
Координатор данных управляет топологией узлов данных и узлов индекса, поддерживает метаданные, запускает операции промывки, уплотнения, создания индекса и другие фоновые операции с данными.
Рабочие узлы
Руки и ноги. Рабочие узлы - это немые исполнители, которые следуют инструкциям службы координатора и выполняют команды языка манипулирования данными (DML), поступающие от прокси. Рабочие узлы не имеют статических данных благодаря разделению хранения и вычислений и могут способствовать масштабированию системы и аварийному восстановлению при развертывании на Kubernetes. Существует три типа рабочих узлов:
Узел запросов
Узел запросов получает инкрементные данные журнала и превращает их в растущие сегменты, подписываясь на брокера журналов, загружает исторические данные из объектного хранилища и выполняет гибридный поиск между векторными и скалярными данными.
Узел данных
Узел данных получает инкрементные данные журнала, подписываясь на брокера журнала, обрабатывает запросы на мутацию, упаковывает данные журнала в снимки журнала и сохраняет их в объектном хранилище.
Индексный узел
Индексный узел создает индексы. Индексные узлы не обязательно должны быть резидентными в памяти и могут быть реализованы с помощью бессерверного фреймворка.
Хранилище
Хранилище - это кость системы, отвечающая за сохранность данных. Оно включает в себя метахранилище, брокер журналов и хранилище объектов.
Метахранилище
Метахранилище хранит снимки метаданных, таких как схема коллекции и контрольные точки потребления сообщений. Хранение метаданных требует чрезвычайно высокой доступности, высокой согласованности и поддержки транзакций, поэтому Milvus выбрал etcd для метахранилища. Milvus также использует etcd для регистрации и проверки работоспособности сервисов.
Объектное хранилище
В объектном хранилище хранятся файлы моментальных снимков журналов, индексные файлы для скалярных и векторных данных, а также промежуточные результаты запросов. Milvus использует MinIO в качестве объектного хранилища и может быть легко развернут на AWS S3 и Azure Blob, двух самых популярных и экономически эффективных сервисах хранения данных в мире. Однако объектное хранилище имеет высокую задержку доступа и тарифицируется по количеству запросов. Чтобы повысить производительность и снизить затраты, Milvus планирует реализовать разделение данных "холодный-горячий" в пуле кэша на базе памяти или SSD.
Брокер журналов
Брокер журналов - это система pub-sub, поддерживающая воспроизведение. Он отвечает за сохранение потоковых данных и уведомление о событиях. Он также обеспечивает целостность инкрементных данных при восстановлении рабочих узлов после сбоев в системе. В кластере Milvus в качестве лог-брокера используется Pulsar; в автономном Milvus в качестве лог-брокера используется RocksDB. Кроме того, лог-брокер можно легко заменить платформами для хранения потоковых данных, такими как Kafka.
Milvus построен на базе лог-брокера и следует принципу "лог как данные", поэтому Milvus не поддерживает физические таблицы, но гарантирует надежность данных за счет персистентности логов и журналов моментальных снимков.
Механизм логирования
Лог-брокер является основой Milvus. Благодаря встроенному механизму pub-sub он отвечает за сохранение данных и их разделение по принципу "чтение-запись". На рисунке выше показано упрощенное изображение механизма, где система разделена на две роли - брокера журналов (для поддержания последовательности журналов) и подписчика журналов. Первый регистрирует все операции, изменяющие состояние коллекции; второй подписывается на последовательность журналов для обновления локальных данных и предоставляет услуги в виде копий, доступных только для чтения. Механизм pub-sub также позволяет расширить систему в плане сбора данных об изменениях (CDC) и глобально-распределенного развертывания.
Что дальше
- Для получения более подробной информации об архитектуре Milvus читайте раздел Основные компоненты.