Cara Menyebarkan Basis Data Vektor Milvus Sumber Terbuka di Amazon EKS
Artikel ini awalnya diterbitkan di situs web AWS dan diterjemahkan, disunting, dan diposting ulang di sini dengan izin.
Gambaran Umum Penyematan Vektor dan Basis Data Vektor
Kemunculan Generative AI (GenAI), khususnya model bahasa besar(LLM), telah secara signifikan meningkatkan minat terhadap basis data vektor, menjadikannya sebagai komponen penting dalam ekosistem GenAI. Hasilnya, database vektor diadopsi dalam berbagai kasus penggunaan yang semakin meningkat.
Laporan IDC memprediksi bahwa pada tahun 2025, lebih dari 80% data bisnis tidak akan terstruktur, yang ada dalam format seperti teks, gambar, audio, dan video. Memahami, memproses, menyimpan, dan melakukan kueri terhadap data tak terstruktur dalam jumlah besar ini dalam skala besar menghadirkan tantangan yang signifikan. Praktik umum dalam GenAI dan deep learning adalah mengubah data tak terstruktur menjadi embedding vektor, menyimpan, dan mengindeksnya dalam basis data vektor seperti Milvus atau Zilliz Cloud (Milvus yang dikelola secara penuh) untuk pencarian kemiripan vektor atau kemiripan semantik.
Tapi apa sebenarnya yang dimaksud dengan penyematan vektor? Sederhananya, vektor adalah representasi numerik dari angka floating-point dalam ruang berdimensi tinggi. Jarak antara dua vektor menunjukkan relevansinya: semakin dekat jaraknya, semakin relevan vektor tersebut satu sama lain, dan sebaliknya. Ini berarti bahwa vektor yang mirip berhubungan dengan data asli yang serupa, yang berbeda dengan kata kunci tradisional atau pencarian yang tepat.
Cara melakukan pencarian kemiripan vektor
Gambar 1: Cara melakukan pencarian kemiripan vektor
Kemampuan untuk menyimpan, mengindeks, dan mencari sematan vektor adalah fungsionalitas inti dari basis data vektor. Saat ini, basis data vektor utama terbagi dalam dua kategori. Kategori pertama memperluas produk database relasional yang sudah ada, seperti Amazon OpenSearch Service dengan plugin KNN dan Amazon RDS untuk PostgreSQL dengan ekstensi pgvector. Kategori kedua terdiri dari produk database vektor khusus, termasuk contoh-contoh terkenal seperti Milvus, Zilliz Cloud (Milvus yang dikelola sepenuhnya), Pinecone, Weaviate, Qdrant, dan Chroma.
Teknik penyematan dan basis data vektor memiliki aplikasi yang luas di berbagai kasus penggunaan yang digerakkan oleh AI, termasuk pencarian kemiripan gambar, deduplikasi dan analisis video, pemrosesan bahasa alami, sistem rekomendasi, iklan yang ditargetkan, pencarian yang dipersonalisasi, layanan pelanggan yang cerdas, dan deteksi penipuan.
Milvus adalah salah satu opsi sumber terbuka yang paling populer di antara banyak database vektor. Artikel ini memperkenalkan Milvus dan membahas praktik penerapan Milvus di AWS EKS.
Apa itu Milvus?
Milvus adalah basis data vektor sumber terbuka yang sangat fleksibel, andal, dan sangat cepat, serta berasal dari cloud. Milvus mendukung pencarian kemiripan vektor dan aplikasi AI serta berupaya membuat database vektor dapat diakses oleh setiap organisasi. Milvus dapat menyimpan, mengindeks, dan mengelola lebih dari satu miliar embedding vektor yang dihasilkan oleh jaringan syaraf tiruan dan model pembelajaran mesin (ML) lainnya.
Milvus dirilis di bawah Lisensi Apache 2.0 sumber terbuka pada bulan Oktober 2019. Saat ini Milvus merupakan proyek pascasarjana di bawah LF AI & Data Foundation. Pada saat blog ini ditulis, Milvus telah mencapai lebih dari 50 juta unduhan pull Docker dan digunakan oleh banyak pelanggan, seperti NVIDIA, AT&T, IBM, eBay, Shopee, dan Walmart.
Fitur Utama Milvus
Sebagai basis data vektor cloud-native, Milvus menawarkan fitur-fitur utama berikut ini:
Performa tinggi dan pencarian milidetik pada kumpulan data vektor berskala miliaran.
Dukungan multi-bahasa dan rantai alat.
Skalabilitas horizontal dan keandalan yang tinggi bahkan saat terjadi gangguan.
Pencarian hibrida, dicapai dengan memasangkan pemfilteran skalar dengan pencarian kemiripan vektor.
Arsitektur Milvus
Milvus mengikuti prinsip memisahkan aliran data dan aliran kontrol. Sistem ini terbagi menjadi empat tingkat, seperti yang ditunjukkan dalam diagram:
Arsitektur Milvus
Gambar 2 Arsitektur Milvus
Lapisan akses: Lapisan akses terdiri dari sekelompok proksi tanpa kewarganegaraan dan berfungsi sebagai lapisan depan sistem dan titik akhir bagi pengguna.
Layanan koordinator: Layanan koordinator memberikan tugas kepada node pekerja.
Node pekerja: Node pekerja adalah eksekutor bodoh yang mengikuti instruksi dari layanan koordinator dan menjalankan perintah DML/DDL yang dipicu oleh pengguna.
Penyimpanan: Penyimpanan bertanggung jawab atas persistensi data. Ini terdiri dari penyimpanan meta, perantara log, dan penyimpanan objek.
Opsi Penerapan Milvus
Milvus mendukung tiga mode berjalan: Milvus Lite, Standalone, dan Terdistribusi.
Milvus Lite adalah pustaka Python yang dapat diimpor ke dalam aplikasi lokal. Sebagai versi ringan dari Milvus, ini sangat ideal untuk pembuatan prototipe cepat di Notebook Jupyter atau berjalan di perangkat pintar dengan sumber daya terbatas.
Milvus Standalone adalahpenerapan server dengan satu mesin. Jika Anda memiliki beban kerja produksi tetapi memilih untuk tidak menggunakan Kubernetes, menjalankan Milvus Standalone di satu mesin dengan memori yang cukup adalah pilihan yang baik.
Milvus Distributed dapat digunakan pada cluster Kubernetes. Ini mendukung dataset yang lebih besar, ketersediaan yang lebih tinggi, dan skalabilitas, dan lebih cocok untuk lingkungan produksi.
Milvus dirancang sejak awal untuk mendukung Kubernetes, dan dapat dengan mudah digunakan di AWS. Kita dapat menggunakan Amazon Elastic Kubernetes Service (Amazon EKS) sebagai Kubernetes terkelola, Amazon S3 sebagai Object Storage, Amazon Managed Streaming untuk Apache Kafka (Amazon MSK) sebagai Message storage, dan Amazon Elastic Load Balancing (Amazon ELB) sebagai Load Balancer untuk membangun klaster database Milvus yang andal dan elastis.
Selanjutnya, kami akan memberikan panduan langkah demi langkah untuk menerapkan cluster Milvus menggunakan EKS dan layanan lainnya.
Menerapkan Milvus di AWS EKS
Prasyarat
Kita akan menggunakan AWS CLI untuk membuat cluster EKS dan menerapkan database Milvus. Prasyarat berikut ini diperlukan:
Instance PC/Mac atau Amazon EC2 dengan AWS CLI terinstal dan dikonfigurasi dengan izin yang sesuai. Alat AWS CLI terinstal secara default jika Anda menggunakan Amazon Linux 2 atau Amazon Linux 2023.
Alat-alat EKS terinstal, termasuk Helm, Kubectl, eksctl, dll.
Sebuah bucket Amazon S3.
Instance MSK Amazon.
Pertimbangan saat membuat MSK
- Versi stabil terbaru dari Milvus (v2.3.13) bergantung pada fitur
autoCreateTopics
milik Kafka. Jadi, ketika membuat MSK, kita perlu menggunakan konfigurasi khusus dan mengubah propertiauto.create.topics.enable
dari defaultfalse
menjaditrue
. Selain itu, untuk meningkatkan throughput pesan dari MSK, disarankan agar nilaimessage.max.bytes
danreplica.fetch.max.bytes
ditingkatkan. Lihat Konfigurasi MSK khusus untuk detailnya.
auto.create.topics.enable=true
message.max.bytes=10485880
replica.fetch.max.bytes=20971760
- Milvus tidak mendukung autentikasi berbasis peran IAM MSK. Jadi, saat membuat MSK, aktifkan opsi
SASL/SCRAM authentication
di konfigurasi keamanan, dan konfigurasikanusername
danpassword
di AWS Secrets Manager. Lihat Otentikasi kredensial masuk dengan AWS Secrets Manager untuk detailnya.
Gambar 3 Pengaturan keamanan mengaktifkan autentikasi SASL SCRAM.png
Gambar 3: Pengaturan keamanan: aktifkan autentikasi SASL/SCRAM
- Kita perlu mengaktifkan akses ke grup keamanan MSK dari grup keamanan atau rentang alamat IP cluster EKS.
Membuat sebuah klaster EKS
Ada banyak cara untuk membuat cluster EKS, seperti melalui konsol, CloudFormation, eksctl, dll. Tulisan ini akan menunjukkan cara membuat cluster EKS menggunakan eksctl.
eksctl
adalah alat bantu baris perintah sederhana untuk membuat dan mengelola klaster Kubernetes di Amazon EKS. Alat ini menyediakan cara tercepat dan termudah untuk membuat klaster baru dengan node untuk Amazon EKS. Lihat situs web eksctl untuk informasi lebih lanjut.
- Pertama, buat berkas
eks_cluster.yaml
dengan cuplikan kode berikut. Ganticluster-name
dengan nama cluster Anda, gantiregion-code
dengan wilayah AWS tempat Anda ingin membuat cluster dan gantiprivate-subnet-idx
dengan subnet privat Anda. Catatan: File konfigurasi ini membuat cluster EKS di VPC yang sudah ada dengan menentukan subnet privat. Jika Anda ingin membuat VPC baru, hapus konfigurasi VPC dan subnet, lalueksctl
akan secara otomatis membuat VPC baru.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: <cluster-name>
region: <region-code>
version: "1.26"
iam:
withOIDC: true
serviceAccounts:
- metadata:
name: aws-load-balancer-controller
namespace: kube-system
wellKnownPolicies:
awsLoadBalancerController: true
- metadata:
name: milvus-s3-access-sa
# if no namespace is set, "default" will be used;
# the namespace will be created if it doesn't exist already
namespace: milvus
labels: {aws-usage: "milvus"}
attachPolicyARNs:
- "arn:aws:iam::aws:policy/AmazonS3FullAccess"
# Use existed VPC to create EKS.
# If you don't config vpc subnets, eksctl will automatically create a brand new VPC
vpc:
subnets:
private:
us-west-2a: { id: <private-subnet-id1> }
us-west-2b: { id: <private-subnet-id2> }
us-west-2c: { id: <private-subnet-id3> }
managedNodeGroups:
- name: ng-1-milvus
labels: { role: milvus }
instanceType: m6i.2xlarge
desiredCapacity: 3
privateNetworking: true
addons:
- name: vpc-cni # no version is specified so it deploys the default version
attachPolicyARNs:
- arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- name: coredns
version: latest # auto discovers the latest available
- name: kube-proxy
version: latest
- name: aws-ebs-csi-driver
wellKnownPolicies: # add IAM and service account
ebsCSIController: true
- Kemudian, jalankan perintah
eksctl
untuk membuat klaster EKS.
eksctl create cluster -f eks_cluster.yaml
Perintah ini akan membuat sumber daya berikut:
Sebuah klaster EKS dengan versi yang ditentukan.
Grup simpul terkelola dengan tiga instance EC2 berukuran m6i.2xlarge.
Penyedia identitas IAM OIDC dan ServiceAccount bernama
aws-load-balancer-controller
, yang akan kita gunakan nanti saat menginstal AWS Load Balancer Controller.Ruang nama
milvus
dan ServiceAccountmilvus-s3-access-sa
di dalam ruang nama ini. Namespace ini nantinya akan digunakan saat mengonfigurasi S3 sebagai penyimpanan objek untuk Milvus.Catatan: Untuk mempermudah,
milvus-s3-access-sa
di sini diberikan izin akses S3 secara penuh. Dalam penerapan produksi, disarankan untuk mengikuti prinsip hak akses paling sedikit dan hanya memberikan akses ke bucket S3 tertentu yang digunakan untuk Milvus.Beberapa add-on, di mana
vpc-cni
,coredns
,kube-proxy
adalah add-on inti yang diperlukan oleh EKS.aws-ebs-csi-driver
adalah driver AWS EBS CSI yang memungkinkan cluster EKS mengelola siklus hidup volume Amazon EBS.
Sekarang, kita hanya perlu menunggu pembuatan cluster selesai.
Tunggu hingga pembuatan cluster selesai. Selama proses pembuatan cluster, file kubeconfig
akan secara otomatis dibuat atau diperbarui. Anda juga dapat memperbaruinya secara manual dengan menjalankan perintah berikut. Pastikan untuk mengganti region-code
dengan wilayah AWS tempat cluster Anda dibuat, dan ganti cluster-name
dengan nama cluster Anda.
aws eks update-kubeconfig --region <region-code> --name <cluster-name>
Setelah cluster dibuat, Anda dapat melihat node dengan menjalankannya:
kubectl get nodes -A -o wide
- Buat
ebs-sc
StorageClass yang dikonfigurasi dengan GP3 sebagai jenis penyimpanan, dan atur sebagai StorageClass default. Milvus menggunakan etcd sebagai Meta Storage dan membutuhkan StorageClass ini untuk membuat dan mengelola PVC.
cat <<EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ebs-sc
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3
EOF
Kemudian, atur gp2
StorageClass asli ke non-default:
kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
- Instal Pengontrol Penyeimbang Beban AWS. Kita akan menggunakan pengontrol ini nanti untuk Layanan Milvus dan Attu Ingress, jadi mari kita instal terlebih dahulu.
- Pertama, tambahkan repo
eks-charts
dan perbarui.
helm repo add eks https://aws.github.io/eks-charts
helm repo update
- Selanjutnya, instal AWS Load Balancer Controller. Ganti
cluster-name
dengan nama cluster Anda. ServiceAccount bernamaaws-load-balancer-controller
sudah dibuat saat kita membuat cluster EKS di langkah sebelumnya.
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=<cluster-name> \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
- Verifikasi apakah pengontrol telah berhasil diinstal.
kubectl get deployment -n kube-system aws-load-balancer-controller
- Keluarannya akan terlihat seperti ini:
NAME READY UP-TO-DATE AVAILABLE AGE
aws-load-balancer-controller 2/2 2 2 12m
Menerapkan Cluster Milvus
Milvus mendukung beberapa metode penerapan, seperti Operator dan Helm. Operator lebih sederhana, tetapi Helm lebih langsung dan fleksibel. Kita akan menggunakan Helm untuk menerapkan Milvus dalam contoh ini.
Ketika men-deploy Milvus dengan Helm, Anda dapat menyesuaikan konfigurasinya melalui berkas values.yaml
. Klik values.yaml untuk melihat semua opsi. Secara default, Milvus membuat minio dan pulsar dalam cluster sebagai Penyimpanan Objek dan Penyimpanan Pesan. Kita akan membuat beberapa perubahan konfigurasi untuk membuatnya lebih cocok untuk produksi.
- Pertama, tambahkan repo Milvus Helm dan perbarui.
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
- Buat berkas
milvus_cluster.yaml
dengan potongan kode berikut. Potongan kode ini menyesuaikan konfigurasi Milvus, seperti mengonfigurasi Amazon S3 sebagai penyimpanan objek dan Amazon MSK sebagai antrean pesan. Kami akan memberikan penjelasan terperinci dan panduan konfigurasi nanti.
#####################################
# Section 1
#
# Configure S3 as the Object Storage
#####################################
# Service account
# - this service account are used by External S3 access
serviceAccount:
create: false
name: milvus-s3-access-sa
# Close in-cluster minio
minio:
enabled: false
# External S3
# - these configs are only used when `externalS3.enabled` is true
externalS3:
enabled: true
host: "s3.<region-code>.amazonaws.com"
port: "443"
useSSL: true
bucketName: "<bucket-name>"
rootPath: "<root-path>"
useIAM: true
cloudProvider: "aws"
iamEndpoint: ""
#####################################
# Section 2
#
# Configure MSK as the Message Storage
#####################################
# Close in-cluster pulsar
pulsar:
enabled: false
# External kafka
# - these configs are only used when `externalKafka.enabled` is true
externalKafka:
enabled: true
brokerList: "<broker-list>"
securityProtocol: SASL_SSL
sasl:
mechanisms: SCRAM-SHA-512
username: "<username>"
password: "<password>"
#####################################
# Section 3
#
# Expose the Milvus service to be accessed from outside the cluster (LoadBalancer service).
# or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
#####################################
service:
type: LoadBalancer
port: 19530
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: external #AWS Load Balancer Controller fulfills services that has this annotation
service.beta.kubernetes.io/aws-load-balancer-name : milvus-service #User defined name given to AWS Network Load Balancer
service.beta.kubernetes.io/aws-load-balancer-scheme: internal # internal or internet-facing, later allowing for public access via internet
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
#####################################
# Section 4
#
# Installing Attu the Milvus management GUI
#####################################
attu:
enabled: true
name: attu
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: alb # Annotation: set ALB ingress type
alb.ingress.kubernetes.io/scheme: internet-facing #Places the load balancer on public subnets
alb.ingress.kubernetes.io/target-type: ip #The Pod IPs should be used as the target IPs (rather than the node IPs)
alb.ingress.kubernetes.io/group.name: attu # Groups multiple Ingress resources
hosts:
-
#####################################
# Section 5
#
# HA deployment of Milvus Core Components
#####################################
rootCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for root coordinator
resources:
limits:
cpu: 1
memory: 2Gi
indexCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for index coordinator
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
queryCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for query coordinator
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
dataCoordinator:
replicas: 2
activeStandby:
enabled: true # Enable active-standby when you set multiple replicas for data coordinator
resources:
limits:
cpu: "0.5"
memory: 0.5Gi
proxy:
replicas: 2
resources:
limits:
cpu: 1
memory: 4Gi
#####################################
# Section 6
#
# Milvus Resource Allocation
#####################################
queryNode:
replicas: 1
resources:
limits:
cpu: 2
memory: 8Gi
dataNode:
replicas: 1
resources:
limits:
cpu: 1
memory: 4Gi
indexNode:
replicas: 1
resources:
limits:
cpu: 4
memory: 8Gi
Kode ini berisi enam bagian. Ikuti petunjuk berikut ini untuk mengubah konfigurasi yang sesuai.
Bagian 1: Mengonfigurasi S3 sebagai Penyimpanan Objek. ServiceAccount memberikan akses kepada Milvus ke S3 (dalam hal ini, milvus-s3-access-sa
, yang dibuat saat kita membuat kluster EKS). Pastikan untuk mengganti <region-code>
dengan wilayah AWS tempat cluster Anda berada. Ganti <bucket-name>
dengan nama bucket S3 Anda dan <root-path>
dengan awalan untuk bucket S3 (bidang ini dapat dikosongkan).
Bagian 2: Mengonfigurasi MSK sebagai Penyimpanan Pesan. Ganti <broker-list>
dengan alamat titik akhir yang sesuai dengan jenis autentikasi SASL/SCRAM MSK. Ganti <username>
dan <password>
dengan nama pengguna dan kata sandi akun MSK. Anda bisa mendapatkan <broker-list>
dari informasi klien MSK, seperti yang ditunjukkan pada gambar di bawah ini.
Gambar 4 Konfigurasikan MSK sebagai Penyimpanan Pesan Milvus.png
Gambar 4: Mengkonfigurasi MSK sebagai Penyimpanan Pesan Milvus
Bagian 3: Mengekspos layanan Milvus dan mengaktifkan akses dari luar cluster. Endpoint Milvus menggunakan layanan tipe ClusterIP secara default, yang hanya dapat diakses di dalam cluster EKS. Jika diperlukan, Anda dapat mengubahnya menjadi tipe LoadBalancer untuk mengizinkan akses dari luar cluster EKS. Layanan tipe LoadBalancer menggunakan Amazon NLB sebagai penyeimbang beban. Menurut praktik terbaik keamanan, aws-load-balancer-scheme
dikonfigurasikan sebagai mode internal secara default di sini, yang berarti hanya akses intranet ke Milvus yang diizinkan. Klik untuk melihat instruksi konfigurasi NLB.
Bagian 4: Menginstal dan mengkonfigurasi Attu, sebuah alat administrasi Milvus yang bersifat open source. Attu memiliki GUI yang intuitif yang memungkinkan Anda berinteraksi dengan Milvus dengan mudah. Kita mengaktifkan Attu, mengonfigurasi akses masuk menggunakan AWS ALB, dan mengaturnya ke tipe internet-facing
sehingga Attu dapat diakses melalui Internet. Klik dokumen ini untuk panduan konfigurasi ALB.
Bagian 5: Mengaktifkan penerapan HA pada Komponen Inti Milvus. Milvus berisi beberapa komponen independen dan terpisah. Sebagai contoh, layanan koordinator bertindak sebagai lapisan kontrol, menangani koordinasi untuk komponen Root, Query, Data, dan Index. Proxy di lapisan akses berfungsi sebagai titik akhir akses database. Komponen-komponen ini secara default hanya memiliki 1 replika pod. Menerapkan beberapa replika komponen layanan ini sangat diperlukan untuk meningkatkan ketersediaan Milvus.
Catatan: Penyebaran multi-replika komponen koordinator Root, Query, Data, dan Index membutuhkan opsi activeStandby
yang diaktifkan.
Bagian 6: Menyesuaikan alokasi sumber daya untuk komponen Milvus untuk memenuhi kebutuhan beban kerja Anda. Situs web Milvus juga menyediakan alat bantu ukuran untuk menghasilkan saran konfigurasi berdasarkan volume data, dimensi vektor, jenis indeks, dll. Alat ini juga dapat menghasilkan file konfigurasi Helm hanya dengan satu klik. Konfigurasi berikut ini adalah saran yang diberikan oleh alat ini untuk 1 juta 1024 dimensi vektor dan jenis indeks HNSW.
- Gunakan Helm untuk membuat Milvus (digunakan dalam namespace
milvus
). Catatan: Anda dapat mengganti<demo>
dengan nama kustom.
helm install <demo> milvus/milvus -n milvus -f milvus_cluster.yaml
- Jalankan perintah berikut untuk memeriksa status penyebaran.
kubectl get deployment -n milvus
Output berikut ini menunjukkan bahwa semua komponen Milvus dalam kondisi TERSEDIA, dan komponen koordinasi memiliki beberapa replika yang diaktifkan.
NAME READY UP-TO-DATE AVAILABLE AGE
demo-milvus-attu 1/1 1 1 5m27s
demo-milvus-datacoord 2/2 2 2 5m27s
demo-milvus-datanode 1/1 1 1 5m27s
demo-milvus-indexcoord 2/2 2 2 5m27s
demo-milvus-indexnode 1/1 1 1 5m27s
demo-milvus-proxy 2/2 2 2 5m27s
demo-milvus-querycoord 2/2 2 2 5m27s
demo-milvus-querynode 1/1 1 1 5m27s
demo-milvus-rootcoord 2/2 2 2 5m27s
Mengakses dan Mengelola Milvus
Sejauh ini, kita telah berhasil men-deploy database vektor Milvus. Sekarang, kita dapat mengakses Milvus melalui titik akhir. Milvus mengekspos titik akhir melalui layanan Kubernetes. Attu mengekspos titik akhir melalui Kubernetes Ingress.
Mengakses titik akhir Milvus
Jalankan perintah berikut untuk mendapatkan titik akhir layanan:
kubectl get svc -n milvus
Anda dapat melihat beberapa layanan. Milvus mendukung dua port, port 19530
dan port 9091
:
- Port
19530
adalah untuk gRPC dan RESTful API. Port ini adalah port default ketika Anda terhubung ke server Milvus dengan SDK Milvus atau klien HTTP yang berbeda. - Port
9091
adalah port manajemen untuk pengumpulan metrik, profil pprof, dan probe kesehatan dalam Kubernetes.
Layanan demo-milvus
menyediakan titik akhir akses basis data, yang digunakan untuk membuat koneksi dari klien. Layanan ini menggunakan NLB sebagai penyeimbang beban layanan. Anda dapat memperoleh endpoint layanan dari kolom EXTERNAL-IP
.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
demo-etcd ClusterIP 172.20.103.138 <none> 2379/TCP,2380/TCP 62m
demo-etcd-headless ClusterIP None <none> 2379/TCP,2380/TCP 62m
demo-milvus LoadBalancer 172.20.219.33 milvus-nlb-xxxx.elb.us-west-2.amazonaws.com 19530:31201/TCP,9091:31088/TCP 62m
demo-milvus-datacoord ClusterIP 172.20.214.106 <none> 13333/TCP,9091/TCP 62m
demo-milvus-datanode ClusterIP None <none> 9091/TCP 62m
demo-milvus-indexcoord ClusterIP 172.20.106.51 <none> 31000/TCP,9091/TCP 62m
demo-milvus-indexnode ClusterIP None <none> 9091/TCP 62m
demo-milvus-querycoord ClusterIP 172.20.136.213 <none> 19531/TCP,9091/TCP 62m
demo-milvus-querynode ClusterIP None <none> 9091/TCP 62m
demo-milvus-rootcoord ClusterIP 172.20.173.98 <none> 53100/TCP,9091/TCP 62m
Mengelola Milvus menggunakan Attu
Seperti yang telah dijelaskan sebelumnya, kita telah menginstal Attu untuk mengelola Milvus. Jalankan perintah berikut untuk mendapatkan endpoint:
kubectl get ingress -n milvus
Anda dapat melihat Ingress bernama demo-milvus-attu
, di mana kolom ADDRESS
adalah URL akses.
NAME CLASS HOSTS ADDRESS PORTS AGE
demo-milvus-attu <none> * k8s-attu-xxxx.us-west-2.elb.amazonaws.com 80 27s
Buka alamat Ingress di peramban dan lihat halaman berikut. Klik Hubungkan untuk masuk.
Gambar 5 Masuk ke akun Attu Anda.png
Gambar 5: Masuk ke akun Attu Anda
Setelah masuk, Anda dapat mengelola basis data Milvus melalui Attu.
Gambar 6 Antarmuka Attu.png
Gambar 6: Antarmuka Attu
Menguji basis data vektor Milvus
Kita akan menggunakan contoh kode Milvus untuk menguji apakah database Milvus bekerja dengan baik. Pertama, unduh kode contoh hello_milvus.py
menggunakan perintah berikut:
wget https://raw.githubusercontent.com/milvus-io/pymilvus/master/examples/hello_milvus.py
Ubah host pada kode contoh ke titik akhir layanan Milvus.
print(fmt.format("start connecting to Milvus"))
connections.connect("default", host="milvus-nlb-xxx.elb.us-west-2.amazonaws.com", port="19530")
Jalankan kode tersebut:
python3 hello_milvus.py
Jika sistem mengembalikan hasil berikut ini, maka ini mengindikasikan bahwa Milvus berjalan dengan normal.
=== start connecting to Milvus ===
Does collection hello_milvus exist in Milvus: False
=== Create collection `hello_milvus` ===
=== Start inserting entities ===
Number of entities in Milvus: 3000
=== Start Creating index IVF_FLAT ===
=== Start loading ===
Kesimpulan
Artikel ini memperkenalkan Milvus, salah satu database vektor open-source yang paling populer, dan memberikan panduan untuk menerapkan Milvus di AWS menggunakan layanan terkelola seperti Amazon EKS, S3, MSK, dan ELB untuk mencapai elastisitas dan keandalan yang lebih baik.
Sebagai komponen inti dari berbagai sistem GenAI, khususnya Retrieval Augmented Generation (RAG), Milvus mendukung dan berintegrasi dengan berbagai model dan kerangka kerja GenAI utama, termasuk Amazon Sagemaker, PyTorch, HuggingFace, LlamaIndex, dan LangChain. Mulailah perjalanan inovasi GenAI Anda dengan Milvus hari ini!
Referensi
- Gambaran Umum Penyematan Vektor dan Basis Data Vektor
- Apa itu Milvus?
- Menerapkan Milvus di AWS EKS
- Menguji basis data vektor Milvus
- Kesimpulan
- Referensi
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