Оптимизация передачи данных: Milvus внедряет систему обмена сообщениями NATS
В запутанном гобелене обработки данных бесперебойная связь - это нить, связывающая операции воедино. 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.
Перед началом миграции остановите все операции записи в Milvus.
Выполните операцию
FlushALL
в Milvus и дождитесь ее завершения. Этот шаг гарантирует, что все ожидающие данные будут удалены и система будет готова к выключению.Измените конфигурационный файл Milvus, установив значение
mq.type=natsmq
и настроив соответствующие опции в разделеnatsmq
.Запустите Milvus 2.3.
Создайте резервную копию и очистите исходные данные, хранящиеся в каталоге
rocksmq.path
. (Необязательно)
NATS против RocksMQ: сравнение производительности
Тестирование производительности Pub/Sub
Платформа для тестирования: Чип M1 Pro / Память: 16 ГБ
Сценарий тестирования: Многократная подписка и публикация случайных пакетов данных в тему до получения последнего опубликованного результата.
Результаты:
Для небольших пакетов данных (< 64 кб) RocksMQ превосходит NATS по объему памяти, процессору и скорости отклика.
Для больших пакетов данных (> 64 кб) NATS превосходит RocksMQ, предлагая гораздо более быстрое время отклика.
Тип теста | MQ | количество операций | стоимость одной операции | Стоимость памяти | Общее время процессора | Стоимость хранения |
---|---|---|---|---|---|---|
5MB*100 Pub/Sub | NATS | 50 | 1.650328186 с/оп | 4,29 ГБ | 85.58 | 25G |
5MB*100 Pub/Sub | RocksMQ | 50 | 2.475595131 с/оп | 1,18 ГБ | 81.42 | 19G |
1MB*500 Pub/Sub | NATS | 50 | 2.248722593 с/оп | 2.60 ГБ | 96.50 | 25G |
1MB*500 Pub/Sub | RocksMQ | 50 | 2.554614279 с/оп | 614,9 МБ | 80.19 | 19G |
64KB*10000 Pub/Sub | NATS | 50 | 2.133345262 с/оп | 3.29 ГБ | 97.59 | 31G |
64KB*10000 Pub/Sub | RocksMQ | 50 | 3.253778195 с/оп | 331,2 МБ | 134.6 | 24G |
1KB*50000 Pub/Sub | NATS | 50 | 2.629391004 с/оп | 635,1 МБ | 179.67 | 2.6G |
1KB*50000 Pub/Sub | RocksMQ | 50 | 0.897638581 с/оп | 232,3 МБ | 60.42 | 521M |
Таблица 1: Результаты тестирования производительности Pub/Sub
Интеграционное тестирование Milvus
Размер данных: 100M
Результат: В ходе всестороннего тестирования с набором данных в 100 миллионов векторов NATS продемонстрировала более низкую задержку поиска векторов и запросов.
Метрики | RocksMQ (мс) | NATS (мс) |
---|---|---|
Средняя задержка поиска векторов | 23.55 | 20.17 |
Количество запросов на векторный поиск в секунду (RPS) | 2.95 | 3.07 |
Средняя задержка запроса | 7.2 | 6.74 |
Количество запросов в секунду (RPS) | 1.47 | 1.54 |
Таблица 2: Результаты интеграционного тестирования Milvus с набором данных 100m
Набор данных: <100M
Результат: Для наборов данных меньше 100 М, NATS и RocksMQ показывают схожую производительность.
Выводы: Расширение возможностей Milvus с помощью обмена сообщениями NATS
Интеграция NATS в Milvus знаменует собой значительный шаг в области обработки данных. Если вы занимаетесь аналитикой в реальном времени, приложениями машинного обучения или другими работами, требующими больших объемов данных, NATS обеспечит вашим проектам эффективность, надежность и скорость. По мере развития ландшафта данных наличие в Milvus такой надежной системы обмена сообщениями, как NATS, обеспечивает бесперебойную, надежную и высокопроизводительную передачу данных.
- Понимание роли очередей сообщений в Milvus
- Что такое NATS?
- Включение NATS
- Настройка NATS для Milvus
- Переход с RocksMQ на NATS
- NATS против RocksMQ: сравнение производительности
- Выводы: Расширение возможностей Milvus с помощью обмена сообщениями NATS
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word