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

milvus-logo
LFAI
  • Home
  • Blog
  • Оптимизация передачи данных: Milvus внедряет систему обмена сообщениями NATS

Оптимизация передачи данных: Milvus внедряет систему обмена сообщениями NATS

  • Engineering
November 24, 2023
Zhen Ye

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

Понимание роли очередей сообщений в Milvus

В облачной нативной архитектуре Milvus очередь сообщений, или Log Broker, имеет ключевое значение. Это основа, обеспечивающая постоянные потоки данных, синхронизацию, уведомления о событиях и целостность данных при восстановлении системы. Традиционно RocksMQ был самым простым выбором в режиме Milvus Standalone, особенно по сравнению с Pulsar и Kafka, но его ограничения становились очевидными при работе с большими объемами данных и сложными сценариями.

В Milvus 2.3 представлен NATS, одноузловая реализация MQ, пересматривающая способы управления потоками данных. В отличие от своих предшественников, NATS освобождает пользователей Milvus от ограничений производительности, обеспечивая бесперебойную работу со значительными объемами данных.

Что такое NATS?

NATS - это технология соединения распределенных систем, реализованная на языке Go. Она поддерживает различные режимы связи между системами, такие как Request-Reply и Publish-Subscribe, обеспечивает сохранение данных с помощью JetStream и предлагает распределенные возможности с помощью встроенного RAFT. Для более подробного ознакомления с NATS вы можете обратиться к официальному сайту NATS.

В автономном режиме Milvus 2.3 NATS, JetStream и PubSub обеспечивают Milvus надежными возможностями MQ.

Включение NATS

Milvus 2.3 предлагает новый параметр управления, mq.type, который позволяет пользователям указывать тип MQ, который они хотят использовать. Чтобы включить NATS, установите mq.type=natsmq. Если после запуска экземпляров Milvus вы увидите журналы, похожие на приведенные ниже, значит, вы успешно включили NATS в качестве очереди сообщений.

[INFO] [dependency/factory.go:83] ["try to init mq"] [standalone=true] [mqType=natsmq]

Настройка NATS для Milvus

Параметры настройки NATS включают в себя указание порта прослушивания, каталога хранения JetStream, максимального размера полезной нагрузки и таймаута инициализации. Тонкая настройка этих параметров обеспечивает оптимальную производительность и надежность.

natsmq:
server: # server side configuration for natsmq.
port: 4222 # 4222 by default, Port for nats server listening.
storeDir: /var/lib/milvus/nats # /var/lib/milvus/nats by default, directory to use for JetStream storage of nats.
maxFileStore: 17179869184 # (B) 16GB by default, Maximum size of the 'file' storage.
maxPayload: 8388608 # (B) 8MB by default, Maximum number of bytes in a message payload.
maxPending: 67108864 # (B) 64MB by default, Maximum number of bytes buffered for a connection Applies to client connections.
initializeTimeout: 4000 # (ms) 4s by default, waiting for initialization of natsmq finished.
monitor:
trace: false # false by default, If true enable protocol trace log messages.
debug: false # false by default, If true enable debug log messages.
logTime: true # true by default, If set to false, log without timestamps.
logFile: /tmp/milvus/logs/nats.log # /tmp/milvus/logs/nats.log by default, Log file path relative to .. of milvus binary if use relative path.
logSizeLimit: 536870912 # (B) 512MB by default, Size in bytes after the log file rolls over to a new one.
retention:
maxAge: 4320 # (min) 3 days by default, Maximum age of any message in the P-channel.
maxBytes: # (B) None by default, How many bytes the single P-channel may contain. Removing oldest messages if the P-channel exceeds this size.
maxMsgs: # None by default, How many message the single P-channel may contain. Removing oldest messages if the P-channel exceeds this limit.

Примечание:

  • Вы должны указать server.port для прослушивания сервера NATS. Если возникнет конфликт портов, Milvus не сможет запуститься. Установите server.port=-1 для случайного выбора порта.

  • storeDir указывает каталог для хранения JetStream. Мы рекомендуем хранить каталог на высокопроизводительном твердотельном диске (SSD) для повышения пропускной способности Milvus при чтении/записи.

  • maxFileStore устанавливает верхний предел размера хранилища JetStream. Превышение этого предела приведет к невозможности дальнейшей записи данных.

  • maxPayload ограничивает размер отдельного сообщения. Во избежание отказов в записи следует держать его выше 5 МБ.

  • initializeTimeoutуправляет таймаутом запуска сервера NATS.

  • monitor настраивает независимые журналы NATS.

  • retention управляет механизмом сохранения сообщений NATS.

Для получения дополнительной информации обратитесь к официальной документации NATS.

Переход с RocksMQ на NATS

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

  1. Перед началом миграции остановите все операции записи в Milvus.

  2. Выполните операцию FlushALL в Milvus и дождитесь ее завершения. Этот шаг гарантирует, что все ожидающие данные будут удалены и система будет готова к выключению.

  3. Измените конфигурационный файл Milvus, установив значение mq.type=natsmq и настроив соответствующие опции в разделе natsmq.

  4. Запустите Milvus 2.3.

  5. Создайте резервную копию и очистите исходные данные, хранящиеся в каталоге rocksmq.path. (Необязательно)

NATS против RocksMQ: сравнение производительности

Тестирование производительности Pub/Sub

  • Платформа для тестирования: Чип M1 Pro / Память: 16 ГБ

  • Сценарий тестирования: Многократная подписка и публикация случайных пакетов данных в тему до получения последнего опубликованного результата.

  • Результаты:

    • Для небольших пакетов данных (< 64 кб) RocksMQ превосходит NATS по объему памяти, процессору и скорости отклика.

    • Для больших пакетов данных (> 64 кб) NATS превосходит RocksMQ, предлагая гораздо более быстрое время отклика.

Тип тестаMQколичество операцийстоимость одной операцииСтоимость памятиОбщее время процессораСтоимость хранения
5MB*100 Pub/SubNATS501.650328186 с/оп4,29 ГБ85.5825G
5MB*100 Pub/SubRocksMQ502.475595131 с/оп1,18 ГБ81.4219G
1MB*500 Pub/SubNATS502.248722593 с/оп2.60 ГБ96.5025G
1MB*500 Pub/SubRocksMQ502.554614279 с/оп614,9 МБ80.1919G
64KB*10000 Pub/SubNATS502.133345262 с/оп3.29 ГБ97.5931G
64KB*10000 Pub/SubRocksMQ503.253778195 с/оп331,2 МБ134.624G
1KB*50000 Pub/SubNATS502.629391004 с/оп635,1 МБ179.672.6G
1KB*50000 Pub/SubRocksMQ500.897638581 с/оп232,3 МБ60.42521M

Таблица 1: Результаты тестирования производительности Pub/Sub

Интеграционное тестирование Milvus

Размер данных: 100M

Результат: В ходе всестороннего тестирования с набором данных в 100 миллионов векторов NATS продемонстрировала более низкую задержку поиска векторов и запросов.

МетрикиRocksMQ (мс)NATS (мс)
Средняя задержка поиска векторов23.5520.17
Количество запросов на векторный поиск в секунду (RPS)2.953.07
Средняя задержка запроса7.26.74
Количество запросов в секунду (RPS)1.471.54

Таблица 2: Результаты интеграционного тестирования Milvus с набором данных 100m

Набор данных: <100M

Результат: Для наборов данных меньше 100 М, NATS и RocksMQ показывают схожую производительность.

Выводы: Расширение возможностей Milvus с помощью обмена сообщениями NATS

Интеграция NATS в Milvus знаменует собой значительный шаг в области обработки данных. Если вы занимаетесь аналитикой в реальном времени, приложениями машинного обучения или другими работами, требующими больших объемов данных, NATS обеспечит вашим проектам эффективность, надежность и скорость. По мере развития ландшафта данных наличие в Milvus такой надежной системы обмена сообщениями, как NATS, обеспечивает бесперебойную, надежную и высокопроизводительную передачу данных.

Like the article? Spread the word

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