Milvus 2.0 Mendefinisikan Ulang Basis Data Vektor
Rasanya baru kemarin ketika kami menuliskan baris kode pertama untuk Milvus pada bulan Oktober 2018. Pada bulan Maret 2021, setelah 19 iterasi yang diuji oleh lebih dari 1.000 pengguna di seluruh dunia, kami meluncurkan Milvus 1.0, rilis resmi pertama kami dengan dukungan jangka panjang. Sebagai basis data vektor sumber terbuka paling populer di dunia, Milvus 1.0 berhasil menyelesaikan beberapa masalah mendasar dalam manajemen vektor, seperti operasi CRUD dan persistensi data. Namun, seiring dengan munculnya skenario dan kebutuhan baru, kami mulai menyadari bahwa masih banyak masalah yang harus diselesaikan. Artikel ini menawarkan rekapitulasi dari pengamatan yang kami lakukan dalam tiga tahun terakhir, tantangan-tantangan yang diharapkan dapat diatasi oleh Milvus 2.0, dan mengapa Milvus 2.0 dianggap sebagai solusi yang lebih baik untuk tantangan-tantangan tersebut. Untuk mengetahui lebih lanjut mengenai apa saja yang ditawarkan oleh Milvus 2.0, silakan lihat Catatan Rilis Milvus 2.0.
Tantangan yang dihadapi Milvus 1.x
Data silo: Milvus 1.0 hanya mampu menangani penyematan vektor yang dihasilkan dari data yang tidak terstruktur, dan hanya memberikan sedikit dukungan untuk kueri skalar. Pemilahan penyimpanan data dalam desainnya menghasilkan data duplikat dan menambah kompleksitas pengembangan aplikasi, dan pencarian hibrida antara data vektor dan skalar tidak memuaskan karena kurangnya pengoptimal terpadu.
Dilema antara ketepatan waktu dan efisiensi: Milvus 1.0 adalah sistem yang hampir mendekati waktu nyata, yang bergantung pada flush reguler atau force flush untuk memastikan visibilitas data. Pendekatan ini menambah kompleksitas dan ketidakpastian dalam pemrosesan data aliran pada sejumlah level. Selain itu, meskipun pendekatan penyisipan batch ini dikatakan dapat meningkatkan efisiensi pemrosesan, namun tetap saja menghabiskan banyak sumber daya. Jadi, diperlukan pendekatan bulkload.
Kurangnya skalabilitas & elastisitas: Milvus 1.0 mengandalkan Mishards, solusi middleware sharding, untuk mencapai skalabilitas, dan penyimpanan yang terhubung ke jaringan (NAS) untuk persistensi data. Arsitektur klasik yang dibangun di atas penyimpanan bersama ini tidak berkontribusi banyak terhadap skalabilitas keseluruhan karena alasan berikut:
- Hanya satu node tulis yang didukung di Mishard dan tidak dapat diskalakan.
- Penskalaan node baca di Mishards diimplementasikan menggunakan perutean berbasis hash yang konsisten. Meskipun hashing yang konsisten mudah diimplementasikan dan membantu memecahkan masalah keseragaman distribusi data, namun tidak cukup fleksibel dalam penjadwalan data dan tidak cukup untuk mengatasi ketidaksesuaian antara ukuran data dan daya komputasi.
- Milvus 1.0 bergantung pada MySQL untuk mengelola metadata, tetapi ukuran kueri dan kumpulan data yang dapat ditangani oleh server MySQL mandiri cukup terbatas.
Ketersediaan yang kurang tinggi: Salah satu pengamatan yang kami lakukan adalah bahwa sebagian besar pengguna Milvus cenderung mengutamakan ketersediaan daripada konsistensi, sementara Milvus 1.x tidak memiliki kapasitas seperti replika dalam memori dan pemulihan bencana, dan tidak cukup memadai dalam hal ketersediaan yang tinggi. Oleh karena itu, kami mengeksplorasi kemungkinan mengorbankan tingkat akurasi tertentu untuk mencapai ketersediaan yang lebih tinggi.
Biaya yang sangat tinggi: Milvus 1.0 bergantung pada NAS untuk persistensi data, yang biayanya biasanya sepuluh kali lipat dari penyimpanan lokal atau penyimpanan objek. Karena pencarian vektor sangat bergantung pada sumber daya komputasi dan memori, biaya tinggi yang ditimbulkannya dapat menjadi rintangan untuk eksplorasi lebih lanjut dalam kumpulan data berskala besar atau skenario bisnis yang kompleks.
Pengalaman pengguna yang tidak intuitif:
- Penerapan terdistribusi yang rumit menimbulkan biaya operasional yang tinggi.
- Antarmuka pengguna grafis (GUI) yang dirancang dengan baik tidak tersedia.
- API yang tidak intuitif telah menjadi penghambat dalam pengembangan aplikasi.
Apakah akan beralih dari tambalan atau memulai dari awal adalah pertanyaan besar. Charles Xie, pendiri Milvus, percaya bahwa, seperti halnya banyak produsen mobil tradisional yang tidak akan pernah bisa mengubah Tesla menjadi lebih maju, Milvus harus menjadi pengubah permainan di bidang pemrosesan data dan analitik yang tidak terstruktur agar bisa berkembang. Keyakinan inilah yang mendorong kami untuk memulai Milvus 2.0, sebuah basis data vektor cloud-native yang telah direformasi.
Pembuatan Milvus 2.0
Prinsip-prinsip desain
Sebagai basis data vektor cloud-native generasi berikutnya, Milvus 2.0 dibangun berdasarkan tiga prinsip berikut:
Cloud-native terlebih dahulu: Kami percaya bahwa hanya arsitektur yang mendukung pemisahan penyimpanan dan komputasi yang dapat menskalakan sesuai permintaan dan memanfaatkan sepenuhnya elastisitas cloud. Kami juga ingin menarik perhatian Anda pada desain layanan mikro Milvus 2.0, yang memiliki fitur pemisahan baca dan tulis, pemisahan data tambahan dan historis, serta pemisahan tugas yang intensif CPU, intensif memori, dan intensif IO. Layanan mikro membantu mengoptimalkan alokasi sumber daya untuk beban kerja heterogen yang selalu berubah.
Log sebagai data: Dalam Milvus 2.0, log broker berfungsi sebagai tulang punggung sistem: Semua operasi penyisipan dan pembaruan data harus melalui log broker, dan node pekerja menjalankan operasi CRUD dengan berlangganan dan mengonsumsi log. Desain ini mengurangi kompleksitas sistem dengan memindahkan fungsi inti seperti persistensi data dan kilas balik ke lapisan penyimpanan, dan log pub-sub membuat sistem menjadi lebih fleksibel dan diposisikan dengan lebih baik untuk penskalaan di masa depan.
Pemrosesan batch dan aliran terpadu: Milvus 2.0 mengimplementasikan arsitektur Lambda terpadu, yang mengintegrasikan pemrosesan data tambahan dan historis. Dibandingkan dengan arsitektur Kappa, Milvus 2.0 memperkenalkan log backfill, yang menyimpan snapshot log dan indeks dalam penyimpanan objek untuk meningkatkan efisiensi pemulihan kegagalan dan kinerja kueri. Untuk memecah data tak terbatas (stream) menjadi jendela-jendela yang terbatas, Milvus menggunakan mekanisme watermark baru, yang memecah data stream menjadi beberapa paket pesan sesuai dengan waktu penulisan atau waktu kejadian, dan mempertahankan garis waktu bagi pengguna untuk melakukan kueri berdasarkan waktu.
2.0 gambar 1.png
Arsitektur sistem
Seperti yang telah disebutkan di atas, desain Milvus 2.0 secara ketat mengikuti prinsip-prinsip pemisahan penyimpanan dan komputasi serta kontrol dan pemisahan bidang data. Sistem ini terbagi menjadi empat lapisan: lapisan akses, layanan koordinator, node pekerja, dan penyimpanan.
Lapisan akses: Antarmuka: Lapisan akses adalah lapisan depan sistem dan titik akhir bagi pengguna. Lapisan ini bertugas meneruskan permintaan dan mengumpulkan hasil.
Layanan koordinator: Layanan koordinator memberikan tugas kepada node pekerja dan berfungsi sebagai otak sistem. Ada empat jenis koordinator: koordinator akar (root coord), koordinator data (data coord), koordinator kueri (query coord), dan koordinator indeks (index coord).
Simpul pekerja: Lengan dan kaki. Node pekerja adalah eksekutor bodoh yang mengikuti instruksi dari layanan koordinator dan merespons permintaan baca/tulis dari lapisan akses. Ada tiga jenis simpul pekerja: simpul data, simpul kueri, dan simpul indeks.
Penyimpanan: Tulang. Penyimpanan memiliki tiga jenis: penyimpanan meta, perantara log, dan penyimpanan objek.
- Diimplementasikan oleh etcd, meta storage digunakan untuk menyimpan metadata seperti koleksi dan pos pemeriksaan untuk layanan koordinator.
- Diimplementasikan oleh Pulsar, log broker digunakan terutama untuk menyimpan log tambahan dan mengimplementasikan pemberitahuan asinkron yang andal.
- Diimplementasikan oleh MinIO atau S3, penyimpanan objek digunakan terutama untuk menyimpan snapshot log dan file indeks.
Berikut ini adalah diagram arsitektur sistem Milvus 2.0: 2.0 image 2.png
Fitur-fitur utama
Biaya untuk menjalankan sebuah database tidak hanya melibatkan konsumsi sumber daya saat runtime, tetapi juga potensi biaya pembelajaran dan biaya operasional dan pemeliharaan. Secara praktis, semakin mudah sebuah database digunakan, semakin besar kemungkinan database tersebut dapat menghemat potensi biaya tersebut. Sejak hari pertama Milvus diluncurkan, kemudahan penggunaan selalu menjadi prioritas utama, dan Milvus 2.0 terbaru memiliki beberapa hal yang dapat ditawarkan untuk mengurangi biaya-biaya tersebut.
Selalu online
Keandalan data dan keberlanjutan layanan adalah persyaratan dasar untuk database, dan strategi kami adalah "gagal murah, gagal kecil, dan sering gagal".
- "Gagal murah" mengacu pada pemisahan penyimpanan dan komputasi, yang membuat penanganan pemulihan kegagalan node menjadi mudah dan dengan biaya rendah.
- "Gagal kecil" mengacu pada strategi "bagi dan taklukkan", yang menyederhanakan kompleksitas desain dengan membuat setiap layanan koordinator hanya menangani sebagian kecil data baca/tulis/inkremental/sejarah.
- "Sering gagal" mengacu pada pengenalan pengujian kekacauan, yang menggunakan injeksi kesalahan dalam lingkungan pengujian untuk mensimulasikan situasi seperti kegagalan perangkat keras dan kegagalan ketergantungan dan mempercepat penemuan bug.
Pencarian hibrida antara data skalar dan vektor
Untuk meningkatkan sinergi antara data terstruktur dan tidak terstruktur, Milvus 2.0 mendukung data skalar dan vektor serta memungkinkan pencarian hibrida di antara keduanya. Pencarian hibrida membantu pengguna menemukan perkiraan tetangga terdekat yang cocok dengan kriteria filter. Saat ini, Milvus mendukung operasi relasional seperti SAMA dengan, LEBIH BESAR DARI, dan KURANG DARI, serta operasi logika seperti NOT, AND, OR, dan IN.
Konsistensi yang dapat disetel
Sebagai basis data terdistribusi yang mematuhi teorema PACELC, Milvus 2.0 harus mengorbankan konsistensi dan ketersediaan & latensi. Dalam sebagian besar skenario, terlalu menekankan konsistensi data dalam produksi dapat berlebihan karena membiarkan sebagian kecil data tidak terlihat hanya berdampak kecil pada pemanggilan secara keseluruhan, tetapi secara signifikan dapat meningkatkan kinerja kueri. Namun, kami percaya bahwa tingkat konsistensi, seperti strong, bounded staleness, dan session, memiliki penerapannya masing-masing yang unik. Oleh karena itu, Milvus mendukung konsistensi yang dapat disetel pada tingkat permintaan. Mengambil pengujian sebagai contoh, pengguna mungkin memerlukan konsistensi yang kuat untuk memastikan hasil pengujian benar-benar benar.
Perjalanan waktu
Insinyur data sering kali perlu melakukan rollback data untuk memperbaiki data kotor dan bug kode. Database tradisional biasanya mengimplementasikan rollback data melalui snapshot atau bahkan pelatihan ulang data. Hal ini dapat menimbulkan biaya overhead dan pemeliharaan yang berlebihan. Milvus mempertahankan garis waktu untuk semua operasi penyisipan dan penghapusan data, dan pengguna dapat menentukan stempel waktu dalam kueri untuk mengambil tampilan data pada titik waktu tertentu. Dengan perjalanan waktu, Milvus juga dapat mengimplementasikan pencadangan data yang ringan atau kloning data.
ORM Python SDK
Pemetaan relasional objek (ORM) memungkinkan pengguna untuk lebih fokus pada model bisnis tingkat atas daripada model data yang mendasarinya, sehingga memudahkan pengembang untuk mengelola hubungan antara koleksi, bidang, dan program. Untuk menutup kesenjangan antara proof of concept (PoC) untuk algoritme AI dan penerapan produksi, kami merekayasa API PyMilvus ORM, yang dapat bekerja dengan pustaka tertanam, penerapan mandiri, klaster terdistribusi, atau bahkan layanan cloud. Dengan seperangkat API yang terpadu, kami memberikan pengalaman pengguna yang konsisten kepada pengguna dan mengurangi biaya migrasi atau adaptasi kode.
2.0 gambar 3.png
Alat-alat pendukung
- Milvus Insight adalah antarmuka pengguna grafis Milvus yang menawarkan fungsionalitas praktis seperti manajemen status cluster, manajemen meta, dan kueri data. Kode sumber Milvus Insight juga akan menjadi sumber terbuka sebagai proyek independen. Kami mencari lebih banyak kontributor untuk bergabung dalam upaya ini.
- Pengalaman out-of-box (OOBE), penerapan yang lebih cepat: Milvus 2.0 dapat digunakan dengan menggunakan helm atau docker-compose.
- Milvus 2.0 menggunakan Prometheus, basis data deret waktu sumber terbuka, untuk menyimpan kinerja dan memantau data, dan Grafana, sebuah platform pengamatan terbuka, untuk visualisasi metrik.
Melihat ke masa depan
Dalam retrospeksi, kami percaya bahwa arsitektur sistem yang didasarkan pada aplikasi big data + AI terlalu rumit. Prioritas utama komunitas Milvus adalah membuat Milvus lebih mudah digunakan. Ke depannya, proyek Milvus akan fokus pada area berikut:
DB untuk AI: Selain fungsi dasar CRUD, Milvus, sebagai sistem basis data, perlu memiliki pengoptimal kueri yang lebih cerdas, kemampuan kueri data yang lebih kuat, dan fungsi manajemen data yang lebih komprehensif. Pekerjaan kami untuk tahap berikutnya akan berfokus pada fungsi bahasa manipulasi data (DML) dan tipe data yang belum tersedia di Milvus 2.0, termasuk menambahkan operasi hapus dan perbarui dan mendukung tipe data string.
AI untuk DB: Penyetelan kenop parameter seperti jenis indeks, konfigurasi sistem, beban kerja pengguna, dan jenis perangkat keras mempersulit penggunaan Milvus dan harus dihindari sebisa mungkin. Kami telah mulai menganalisis beban sistem dan mengumpulkan frekuensi akses data, dan berencana untuk memperkenalkan penyetelan otomatis di masa depan untuk mengurangi biaya pembelajaran.
Optimalisasi biaya: Tantangan terbesar untuk pengambilan vektor adalah kebutuhan untuk memproses kumpulan data berskala besar dalam jangka waktu yang terbatas. Hal ini membutuhkan CPU dan memori yang intensif. Memperkenalkan akselerasi perangkat keras heterogen GPU dan FPGA pada lapisan fisik dapat sangat mengurangi overhead CPU. Kami juga mengembangkan algoritma pengindeksan ANN hibrida pada disk dan dalam memori untuk mewujudkan kueri berkinerja tinggi pada kumpulan data yang sangat besar dengan memori yang terbatas. Terlebih lagi, kami sedang mengevaluasi kinerja algoritme pengindeksan vektor sumber terbuka yang ada seperti ScaNN dan NGT.
Kemudahan penggunaan: Milvus terus meningkatkan kegunaannya dengan menyediakan alat manajemen klaster, SDK dalam berbagai bahasa, alat penerapan, alat operasional, dan banyak lagi.
Untuk mengetahui lebih lanjut tentang rencana rilis Milvus, lihat Peta Jalan Milvus.
Terima kasih kepada semua kontributor komunitas Milvus, yang tanpa mereka Milvus 2.0 tidak akan mungkin terwujud. Jangan ragu untuk mengirimkan masalah atau menyumbangkan kode Anda ke komunitas Milvus!
Tentang penulis
Xiaofan Luan sekarang bekerja di Zilliz sebagai Direktur Teknik yang mengelola R&D proyek Milvus. Dia memiliki pengalaman kerja 7 tahun yang berfokus pada pembangunan sistem basis data/penyimpanan. Setelah lulus dari Cornell University, ia bekerja di Oracle, HEDVIG, dan Alibaba Cloud secara berurutan.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word