🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
  • Home
  • Blog
  • Mengoptimalkan Komunikasi Data: Milvus Merangkul Pesan NATS

Mengoptimalkan Komunikasi Data: Milvus Merangkul Pesan NATS

  • Engineering
November 24, 2023
Zhen Ye

Dalam permadani pemrosesan data yang rumit, komunikasi tanpa batas adalah benang merah yang mengikat operasi bersama. Milvus, basis data vektor sumber terbuka yang menjadi pelopor, telah memulai perjalanan transformatif dengan fitur terbarunya: Integrasi pesan NATS. Dalam artikel blog yang komprehensif ini, kami akan mengungkap seluk-beluk integrasi ini, mengeksplorasi fitur-fitur intinya, proses penyiapan, manfaat migrasi, dan bagaimana integrasi ini dibandingkan dengan pendahulunya, RocksMQ.

Memahami peran antrean pesan di Milvus

Dalam arsitektur cloud-native Milvus, antrean pesan, atau Log Broker, memiliki peran yang sangat penting. Ini adalah tulang punggung yang memastikan aliran data yang persisten, sinkronisasi, pemberitahuan peristiwa, dan integritas data selama pemulihan sistem. Secara tradisional, RocksMQ adalah pilihan yang paling mudah dalam mode Milvus Standalone, terutama jika dibandingkan dengan Pulsar dan Kafka, tetapi keterbatasannya menjadi jelas dengan data yang luas dan skenario yang kompleks.

Milvus 2.3 memperkenalkan NATS, sebuah implementasi MQ single-node, yang mendefinisikan ulang cara mengelola aliran data. Tidak seperti pendahulunya, NATS membebaskan pengguna Milvus dari kendala kinerja, memberikan pengalaman yang mulus dalam menangani volume data yang besar.

Apa itu NATS?

NATS adalah teknologi konektivitas sistem terdistribusi yang diimplementasikan di Go. NATS mendukung berbagai mode komunikasi seperti Request-Reply dan Publish-Subscribe di seluruh sistem, menyediakan persistensi data melalui JetStream, dan menawarkan kemampuan terdistribusi melalui RAFT bawaan. Anda dapat merujuk ke situs web resmi NATS untuk pemahaman yang lebih rinci tentang NATS.

Dalam mode Milvus 2.3 Standalone, NATS, JetStream, dan PubSub menyediakan kemampuan MQ yang kuat bagi Milvus.

Mengaktifkan NATS

Milvus 2.3 menawarkan opsi kontrol baru, mq.type, yang memungkinkan pengguna untuk menentukan jenis MQ yang ingin mereka gunakan. Untuk mengaktifkan NATS, setel mq.type=natsmq. Jika Anda melihat log yang mirip dengan log di bawah ini setelah Anda memulai instans Milvus, Anda telah berhasil mengaktifkan NATS sebagai antrean pesan.

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

Mengonfigurasi NATS untuk Milvus

Opsi kustomisasi NATS termasuk menentukan port pendengaran, direktori penyimpanan JetStream, ukuran muatan maksimum, dan batas waktu inisialisasi. Menyempurnakan pengaturan ini akan memastikan kinerja dan keandalan yang optimal.

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.

Catatan:

  • Anda harus menentukan server.port untuk mendengarkan server NATS. Jika terjadi konflik port, Milvus tidak dapat memulai. Atur server.port=-1 untuk memilih port secara acak.

  • storeDir menentukan direktori untuk penyimpanan JetStream. Kami menyarankan untuk menyimpan direktori di solid-state drive (SSD) berkinerja tinggi untuk hasil baca/tulis yang lebih baik dari Milvus.

  • maxFileStore menetapkan batas atas ukuran penyimpanan JetStream. Melebihi batas ini akan mencegah penulisan data lebih lanjut.

  • maxPayload membatasi ukuran pesan individual. Anda harus menjaganya tetap di atas 5MB untuk menghindari penolakan penulisan.

  • initializeTimeoutmengontrol batas waktu pengaktifan server NATS.

  • monitor mengonfigurasi log independen NATS.

  • retention mengontrol mekanisme penyimpanan pesan NATS.

Untuk informasi lebih lanjut, lihat dokumentasi resmi NATS.

Migrasi dari RocksMQ ke NATS

Migrasi dari RocksMQ ke NATS merupakan proses yang mulus yang melibatkan langkah-langkah seperti menghentikan operasi penulisan, pembilasan data, memodifikasi konfigurasi, dan memverifikasi migrasi melalui log Milvus.

  1. Sebelum memulai migrasi, hentikan semua operasi tulis di Milvus.

  2. Jalankan operasi FlushALL pada Milvus dan tunggu hingga selesai. Langkah ini memastikan bahwa semua data yang tertunda telah di-flush dan sistem siap untuk dimatikan.

  3. Ubahlah file konfigurasi Milvus dengan mengatur mq.type=natsmq dan sesuaikan opsi-opsi yang relevan pada bagian natsmq.

  4. Jalankan Milvus 2.3.

  5. Cadangkan dan bersihkan data asli yang tersimpan dalam direktori rocksmq.path. (Opsional)

NATS vs RocksMQ: Adu Performa

Pengujian Performa Pub/Sub

  • Platform Pengujian: Chip / Memori M1 Pro: 16GB

  • Skenario Pengujian: Mengirimkan dan menerbitkan paket data acak ke sebuah topik secara berulang-ulang sampai hasil terakhir yang diterbitkan diterima.

  • Hasil:

    • Untuk paket data yang lebih kecil (< 64kb), RocksMQ mengungguli NATS dalam hal memori, CPU, dan kecepatan respons.

    • Untuk paket data yang lebih besar (> 64kb), NATS mengungguli RocksMQ, menawarkan waktu respons yang jauh lebih cepat.

Jenis PengujianMQjumlah operasibiaya per operasiBiaya memoriTotal Waktu CPUBiaya penyimpanan
5MB * 100 Pub / SubNATS501.650328186 s/op4,29 GB85.5825G
5MB * 100 Pub/SubRocksMQ502.475595131 s/op1,18 GB81.4219G
1MB * 500 Pub/SubNATS502.248722593 s/op2,60 GB96.5025G
1MB * 500 Pub/SubRocksMQ502.554614279 s/op614.9 MB80.1919G
64KB*10000 Pub/SubNATS502.133345262 s/op3,29 GB97.5931G
64KB*10000 Pub/SubRocksMQ503.253778195 s/op331.2 MB134.624G
1KB*50000 Pub/SubNATS502.629391004 s/op635.1 MB179.672.6G
1KB * 50000 Pub/SubRocksMQ500.897638581 s/op232.3 MB60.42521M

Tabel 1: Hasil pengujian kinerja Pub/Sub

Pengujian Integrasi Milvus

Ukuran data: 100M

Hasil: Dalam pengujian ekstensif dengan set data 100 juta vektor, NATS menampilkan pencarian vektor dan latensi kueri yang lebih rendah.

MetrikRocksMQ (ms)NATS (ms)
Latensi pencarian vektor rata-rata23.5520.17
Permintaan pencarian vektor per detik (RPS)2.953.07
Latensi kueri rata-rata7.26.74
Permintaan kueri per detik (RPS)1.471.54

Tabel 2: Hasil pengujian integrasi Milvus dengan dataset 100 juta

Dataset: <100M

Hasil Untuk dataset yang lebih kecil dari 100 juta, NATS dan RocksMQ menunjukkan performa yang serupa.

Kesimpulan: Memberdayakan Milvus dengan pesan NATS

Integrasi NATS dalam Milvus menandai langkah yang signifikan dalam pemrosesan data. Baik untuk mempelajari analitik waktu nyata, aplikasi pembelajaran mesin, atau usaha intensif data apa pun, NATS memberdayakan proyek Anda dengan efisiensi, keandalan, dan kecepatan. Seiring perkembangan lanskap data, memiliki sistem perpesanan yang kuat seperti NATS dalam Milvus memastikan komunikasi data yang lancar, andal, dan berkinerja tinggi.

Like the article? Spread the word

Terus Baca