🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 2.0 Переосмысление векторной базы данных

Milvus 2.0 Переосмысление векторной базы данных

  • Engineering
August 01, 2021
Xiaofan Luan

Когда в октябре 2018 года мы написали первую строчку кода для Milvus, это было как будто вчера. В марте 2021 года, после 19 итераций, протестированных 1 000+ пользователями по всему миру, мы запустили Milvus 1.0, наш первый официальный релиз с долгосрочной поддержкой. Будучи самой популярной в мире векторной базой данных с открытым исходным кодом, Milvus 1.0 удалось решить некоторые фундаментальные проблемы в управлении векторами, такие как CRUD-операции и сохранение данных. Однако по мере появления новых сценариев и требований мы начали понимать, что нам предстоит решить еще очень много вопросов. В этой статье мы расскажем о наблюдениях, сделанных нами за последние три года, о проблемах, которые Milvus 2.0 должен решить, и о том, почему Milvus 2.0 считается лучшим решением этих проблем. Чтобы узнать больше о том, что предлагает Milvus 2.0, ознакомьтесь с информацией о выпуске Milvus 2.0.

Проблемы, с которыми сталкивается Milvus 1.x

Силовое разделение данных: Milvus 1.0 способен работать только с векторными вкраплениями, полученными из неструктурированных данных, и практически не поддерживает скалярные запросы. Разделение хранилищ данных в его конструкции приводит к дублированию данных и увеличивает сложность разработки приложений, а гибридный поиск между векторными и скалярными данными неудовлетворителен из-за отсутствия единого оптимизатора.

Дилемма между своевременностью и эффективностью: Milvus 1.0 - это система, работающая практически в реальном времени, которая полагается на регулярный или принудительный флэш для обеспечения видимости данных. Такой подход увеличивает сложность и неопределенность обработки потоковых данных на нескольких уровнях. Кроме того, хотя утверждается, что такой подход к пакетной вставке повышает эффективность обработки, он все равно потребляет много ресурсов. Поэтому необходим подход, основанный на массовой загрузке.

Недостаточная масштабируемость и эластичность: Milvus 1.0 опирается на Mishards, промежуточное решение для шардинга, для достижения масштабируемости, и сетевое хранилище (NAS) для хранения данных. Эта классическая архитектура, построенная на основе общего хранилища, не вносит большого вклада в общую масштабируемость по следующим причинам:

  1. В Mishards поддерживается только один узел записи, который невозможно масштабировать.
  2. Масштабирование узлов чтения в Mishards реализовано с помощью последовательной маршрутизации на основе хэша. Хотя последовательное хэширование легко реализовать и оно помогает решить проблему равномерного распределения данных, оно недостаточно гибко в планировании данных и не позволяет решить проблему несоответствия между размером данных и вычислительной мощностью.
  3. Milvus 1.0 полагается на MySQL для управления метаданными, но объем запросов и наборов данных, с которыми способен справиться отдельный сервер MySQL, довольно ограничен.

Отсутствие высокой доступности: По нашим наблюдениям, большинство пользователей Milvus отдают предпочтение доступности, а не согласованности, однако Milvus 1.x не обладает такими возможностями, как репликация в памяти и аварийное восстановление, и не вполне соответствует требованиям к высокой доступности. Поэтому мы изучаем возможность пожертвовать определенной степенью точности для достижения более высокой доступности.

Непомерно высокие затраты: Milvus 1.0 полагается на NAS для хранения данных, стоимость которых обычно в десять раз выше, чем локальных или объектных хранилищ. Поскольку векторный поиск в значительной степени зависит от вычислительных ресурсов и памяти, высокая стоимость может стать препятствием для дальнейшей работы с крупными массивами данных или сложными бизнес-сценариями.

Неинтуитивный пользовательский опыт:

  1. Сложное распределенное развертывание влечет за собой высокие эксплуатационные расходы.
  2. Хорошо продуманный графический интерфейс пользователя (GUI) недоступен.
  3. Неинтуитивно понятные API стали тормозить разработку приложений.

Стоит ли переходить с патча на патч или начинать с нуля - большой вопрос. Чарльз Кси, отец Milvus, считает, что, подобно тому, как многие традиционные автопроизводители не смогли сделать Tesla прогрессивной, Milvus должна стать игроком в области обработки неструктурированных данных и аналитики, чтобы преуспеть. Именно эта убежденность подтолкнула нас к запуску Milvus 2.0, рефакторинговой облачной векторной базы данных.

Создание Milvus 2.0

Принципы проектирования

Milvus 2.0 - наша облачная нативная векторная база данных нового поколения, построенная на следующих трех принципах:

Облако - прежде всего: Мы считаем, что только архитектуры, поддерживающие разделение хранения и вычислений, могут масштабироваться по требованию и использовать все преимущества эластичности облака. Мы также хотели бы обратить ваше внимание на микросервисный дизайн Milvus 2.0, который предусматривает разделение чтения и записи, разделение инкрементных и исторических данных, а также разделение задач, требующих больших затрат процессора, памяти и ввода-вывода. Микросервисы помогают оптимизировать распределение ресурсов для постоянно меняющейся гетерогенной рабочей нагрузки.

Журналы как данные: В Milvus 2.0 брокер журналов служит основой системы: Все операции по вставке и обновлению данных должны проходить через брокер журналов, а рабочие узлы выполняют операции CRUD, подписываясь на журналы и потребляя их. Такая конструкция снижает сложность системы за счет переноса основных функций, таких как персистентность данных и флэшбэк, на уровень хранения, а log pub-sub делает систему еще более гибкой и лучше приспособленной для будущего масштабирования.

Унифицированная пакетная и потоковая обработка: В Milvus 2.0 реализована унифицированная архитектура Lambda, которая объединяет обработку инкрементных и исторических данных. По сравнению с архитектурой Kappa, в Milvus 2.0 реализована функция log backfill, которая сохраняет снимки журналов и индексы в объектном хранилище для повышения эффективности восстановления после сбоев и производительности запросов. Чтобы разбить неограниченные (потоковые) данные на ограниченные окна, Milvus использует новый механизм водяных знаков, который нарезает потоковые данные на несколько пакетов сообщений по времени записи или события и сохраняет временную шкалу для запросов пользователей по времени.

2.0 image 1.png 2.0 изображение 1.png

Архитектура системы

Как уже упоминалось выше, дизайн Milvus 2.0 строго следует принципам разделения хранилищ и вычислений, а также плоскости управления и плоскости данных. Система состоит из четырех уровней: уровень доступа, служба координаторов, рабочие узлы и хранилище.

Уровень доступа: Интерфейс: Уровень доступа - это передний уровень системы и конечная точка для пользователей. Он отвечает за пересылку запросов и сбор результатов.

Служба координаторов: Служба координаторов распределяет задания между рабочими узлами и выполняет функции "мозга" системы. Существует четыре типа координаторов: корневой координатор (root coord), координатор данных (data coord), координатор запросов (query coord) и координатор индексов (index coord).

Рабочие узлы: Руки и ноги. Рабочие узлы - это немые исполнители, которые выполняют указания службы координаторов и отвечают на запросы чтения/записи, поступающие с уровня доступа. Существует три типа рабочих узлов: узлы данных, узлы запросов и узлы индексов.

Хранилище: Кости. Хранилища бывают трех типов: метахранилище, брокер журналов и хранилище объектов.

  • Метахранилище, реализованное в etcd, используется для хранения метаданных, таких как коллекция и контрольная точка для службы координатора.
  • Лог-брокер, реализованный в Pulsar, используется в основном для хранения инкрементных журналов и реализации надежных асинхронных уведомлений.
  • Объектное хранилище, реализованное на MinIO или S3, используется в основном для хранения снимков журналов и индексных файлов.

Ниже приведена схема системной архитектуры Milvus 2.0: 2.0 image 2.png2.0 image 2.png

Ключевые особенности

Затраты на эксплуатацию базы данных включают в себя не только потребление ресурсов во время выполнения, но и потенциальные затраты на обучение, а также затраты на эксплуатацию и обслуживание. С практической точки зрения, чем удобнее база данных для пользователя, тем больше вероятность того, что она сэкономит эти потенциальные расходы. С самого первого дня существования Milvus простота использования всегда была на первом месте в нашем списке, и последняя версия Milvus 2.0 предлагает довольно много возможностей для снижения таких затрат.

Всегда онлайн

Надежность данных и устойчивость сервиса - основные требования к базе данных, и наша стратегия - "отказывать дешево, отказывать мало и отказывать часто".

  • Под "дешевым отказом" подразумевается разделение систем хранения и вычислений, что делает восстановление после сбоев узлов простым и недорогим.
  • "Fail small" означает стратегию "разделяй и властвуй", которая упрощает проектирование за счет того, что каждый сервис-координатор обрабатывает лишь небольшую часть данных, предназначенных для чтения/записи/инкрементальных/исторических данных.
  • "Fail often" означает внедрение хаос-тестирования, которое использует внедрение ошибок в среду тестирования для моделирования таких ситуаций, как аппаратные сбои и сбои зависимостей, и ускоряет обнаружение ошибок.

Гибридный поиск между скалярными и векторными данными

Чтобы использовать синергию между структурированными и неструктурированными данными, Milvus 2.0 поддерживает скалярные и векторные данные и обеспечивает гибридный поиск между ними. Гибридный поиск помогает пользователям находить приблизительных ближайших соседей, которые соответствуют критериям фильтра. В настоящее время Milvus поддерживает реляционные операции, такие как EQUAL, GREATER THAN и LESS THAN, и логические операции, такие как NOT, AND, OR и IN.

Настраиваемая согласованность

Будучи распределенной базой данных, подчиняющейся теореме PACELC, Milvus 2.0 приходится искать компромисс между согласованностью, доступностью и задержкой. В большинстве сценариев чрезмерное внимание к согласованности данных в производстве может оказаться излишним, так как разрешение небольшой части данных быть невидимыми мало влияет на общий отзыв, но может значительно повысить производительность запросов. Тем не менее мы считаем, что такие уровни согласованности, как сильная, ограниченная и сессионная, имеют свое уникальное применение. Поэтому Milvus поддерживает настраиваемую согласованность на уровне запросов. Например, при тестировании пользователям может потребоваться сильная согласованность, чтобы гарантировать абсолютную корректность результатов тестирования.

Путешествие во времени

Инженерам по обработке данных часто приходится делать откат данных, чтобы исправить грязные данные и ошибки в коде. Традиционные базы данных обычно реализуют откат данных через моментальные снимки или даже переобучение данных. Это может привести к излишним накладным расходам и затратам на обслуживание. Milvus сохраняет временную шкалу для всех операций вставки и удаления данных, и пользователи могут указать временную метку в запросе, чтобы получить представление данных в определенный момент времени. Благодаря перемещению во времени Milvus также может реализовать легкое резервное копирование или клонирование данных.

ORM Python SDK

Объектно-реляционное отображение (ORM) позволяет пользователям сосредоточиться на бизнес-модели верхнего уровня, а не на базовой модели данных, облегчая разработчикам управление отношениями между коллекциями, полями и программами. Чтобы сократить разрыв между доказательством концепции (PoC) алгоритмов ИИ и их внедрением в производство, мы разработали API PyMilvus ORM, которые могут работать со встроенной библиотекой, автономным развертыванием, распределенным кластером или даже облачным сервисом. Благодаря унифицированному набору API мы обеспечиваем пользователям единообразный пользовательский опыт и снижаем затраты на миграцию или адаптацию кода.

2.0 image 3.png 2.0 изображение 3.png

Вспомогательные инструменты

  • Milvus Insight - это графический пользовательский интерфейс Milvus, предлагающий такие практические функции, как управление состоянием кластера, управление метаданных и запрос данных. Исходный код Milvus Insight также будет открыт как независимый проект. Мы ищем новых участников для участия в этом проекте.
  • Опыт работы "из коробки" (OOBE), более быстрое развертывание: Milvus 2.0 можно развернуть с помощью helm или docker-compose.
  • Milvus 2.0 использует Prometheus, базу данных временных рядов с открытым исходным кодом, для хранения данных о производительности и мониторинге, и Grafana, открытую платформу наблюдаемости, для визуализации метрик.

Взгляд в будущее

Оглядываясь назад, мы считаем, что архитектура системы, основанной на больших данных + применении искусственного интеллекта, слишком сложна. Главным приоритетом сообщества Milvus всегда было сделать Milvus проще в использовании. В дальнейшем проект Milvus будет сосредоточен на следующих направлениях:

БД для ИИ: помимо базовых функций CRUD, Milvus как система баз данных должна обладать более умным оптимизатором запросов, более мощными возможностями запросов к данным и более полными функциями управления данными. Наша работа на следующем этапе будет сосредоточена на функциях языка манипулирования данными (DML) и типах данных, которые еще не доступны в Milvus 2.0, включая добавление операций удаления и обновления и поддержку строковых типов данных.

ИИ для БД: ручная настройка таких параметров, как типы индексов, конфигурация системы, пользовательская нагрузка и типы оборудования, усложняет использование Milvus, и ее следует избегать по мере возможности. Мы проанализировали нагрузку на систему и частоту доступа к данным, а в будущем планируем внедрить автонастройку, чтобы снизить затраты на обучение.

Оптимизация затрат: Самой большой проблемой векторного поиска является необходимость обрабатывать огромные массивы данных за ограниченный промежуток времени. Это требует как больших затрат процессора, так и памяти. Внедрение гетерогенного аппаратного ускорения GPU и FPGA на физическом уровне может значительно снизить нагрузку на CPU. Мы также разрабатываем гибридные алгоритмы индексирования ANN на диске и в памяти для реализации высокопроизводительных запросов к массивным наборам данных с ограниченным объемом памяти. Кроме того, мы оцениваем производительность существующих алгоритмов векторного индексирования с открытым исходным кодом, таких как ScaNN и NGT.

Простота использования: Milvus постоянно улучшает удобство использования, предоставляя инструменты управления кластером, SDK на разных языках, инструменты развертывания, инструменты эксплуатации и многое другое.

Чтобы узнать больше о планах выпуска Milvus, ознакомьтесь с дорожной картой Milvus.

Благодарим всех участников сообщества Milvus, без которых Milvus 2.0 был бы невозможен. Не стесняйтесь подавать заявки или вносить свой код в сообщество Milvus!


Об авторе

Сяофань Луань сейчас работает в Zilliz в качестве директора по инженерным вопросам, управляя R&D проекта Milvus. Он имеет 7-летний опыт работы, сосредоточенный на создании систем баз данных и хранения данных. После окончания Корнельского университета он последовательно работал в Oracle, HEDVIG и Alibaba Cloud.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Продолжить чтение