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

milvus-logo
LFAI
  • Home
  • Blog
  • Jaminan Kualitas Perangkat Lunak Sumber Terbuka (OSS) - Studi Kasus Milvus

Jaminan Kualitas Perangkat Lunak Sumber Terbuka (OSS) - Studi Kasus Milvus

  • Engineering
April 25, 2022
Wenxing Zhu

Cover image Gambar sampul depan

Artikel ini ditulis oleh Wenxing Zhu dan disadur oleh Angela Ni.

Jaminan kualitas (QA) adalah proses sistematis untuk menentukan apakah suatu produk atau layanan memenuhi persyaratan tertentu. Sistem QA adalah bagian tak terpisahkan dari proses R&D karena, seperti namanya, sistem ini memastikan kualitas produk.

Tulisan ini memperkenalkan kerangka kerja QA yang diadopsi dalam mengembangkan basis data vektor Milvus, yang bertujuan untuk memberikan panduan bagi pengembang dan pengguna yang berkontribusi untuk berpartisipasi dalam proses tersebut. Ini juga akan mencakup modul pengujian utama di Milvus serta metode dan alat yang dapat dimanfaatkan untuk meningkatkan efisiensi pengujian QA.

Langsung ke:

Pengenalan umum terhadap sistem QA Milvus

Arsitektur sistem sangat penting untuk melakukan pengujian QA. Semakin seorang insinyur QA memahami sistem, semakin besar kemungkinan dia akan menghasilkan rencana pengujian yang masuk akal dan efisien.

Milvus architecture Arsitektur Milvus

Milvus 2.0 mengadopsi arsitektur cloud-native, terdistribusi, dan berlapis, dengan SDK sebagai pintu masuk utama bagi data untuk mengalir di Milvus. Pengguna Milvus sangat sering menggunakan SDK, oleh karena itu pengujian fungsional pada sisi SDK sangat dibutuhkan. Selain itu, uji fungsi pada SDK dapat membantu mendeteksi masalah internal yang mungkin ada di dalam sistem Milvus. Selain uji fungsi, jenis pengujian lain juga akan dilakukan pada database vektor, termasuk uji unit, uji penerapan, uji keandalan, uji stabilitas, dan uji kinerja.

Arsitektur cloud-native dan terdistribusi memberikan kemudahan sekaligus tantangan dalam pengujian QA. Tidak seperti sistem yang digunakan dan dijalankan secara lokal, instance Milvus yang digunakan dan dijalankan di cluster Kubernetes dapat memastikan bahwa pengujian perangkat lunak dilakukan dalam kondisi yang sama dengan pengembangan perangkat lunak. Namun, sisi negatifnya adalah kompleksitas arsitektur terdistribusi membawa lebih banyak ketidakpastian yang dapat membuat pengujian QA sistem menjadi lebih sulit dan berat. Sebagai contoh, Milvus 2.0 menggunakan layanan mikro dari komponen yang berbeda, dan hal ini menyebabkan peningkatan jumlah layanan dan node, serta kemungkinan lebih besar terjadinya kesalahan sistem. Oleh karena itu, rencana QA yang lebih canggih dan komprehensif diperlukan untuk efisiensi pengujian yang lebih baik.

Pengujian QA dan manajemen masalah

QA di Milvus melibatkan pelaksanaan pengujian dan pengelolaan masalah yang muncul selama pengembangan perangkat lunak.

Pengujian QA

Milvus melakukan berbagai jenis pengujian QA sesuai dengan fitur Milvus dan kebutuhan pengguna sesuai dengan urutan prioritas seperti yang ditunjukkan pada gambar di bawah ini.

QA testing priority Prioritas pengujian QA

Pengujian QA dilakukan pada aspek-aspek berikut di Milvus dengan prioritas sebagai berikut:

  1. Fungsi: Memverifikasi apakah fungsi dan fitur bekerja sesuai dengan rancangan awal.
  2. Penerapan: Memeriksa apakah pengguna dapat melakukan deployment, menginstal ulang, dan meng-upgrade versi mandiri Mivus dan cluster Milvus dengan metode yang berbeda (Docker Compose, Helm, APT atau YUM, dll.).
  3. Kinerja: Menguji kinerja penyisipan data, pengindeksan, pencarian vektor, dan kueri di Milvus.
  4. Stabilitas: Periksa apakah Milvus dapat berjalan dengan stabil selama 5-10 hari di bawah tingkat beban kerja normal.
  5. Keandalan: Menguji apakah Milvus masih dapat berfungsi sebagian jika terjadi kesalahan sistem tertentu.
  6. Konfigurasi: Memverifikasi apakah Milvus bekerja seperti yang diharapkan dalam konfigurasi tertentu.
  7. Kompatibilitas: Menguji apakah Milvus kompatibel dengan berbagai jenis perangkat keras atau perangkat lunak.

Manajemen masalah

Banyak masalah yang mungkin muncul selama pengembangan perangkat lunak. Penulis dari templat masalah dapat berupa insinyur QA sendiri atau pengguna Milvus dari komunitas sumber terbuka. Tim QA bertanggung jawab untuk mencari tahu masalah tersebut.

Issue management workflow Alur kerja manajemen isu

Ketika sebuah isu dibuat, isu tersebut akan melalui triase terlebih dahulu. Selama triase, masalah baru akan diperiksa untuk memastikan bahwa rincian masalah yang cukup disediakan. Jika isu tersebut dikonfirmasi, maka isu tersebut akan diterima oleh pengembang dan mereka akan mencoba untuk memperbaiki isu tersebut. Setelah pengembangan selesai, penulis isu perlu memverifikasi apakah isu tersebut sudah diperbaiki. Jika ya, isu tersebut akan ditutup.

Kapan QA dibutuhkan?

Salah satu kesalahpahaman umum adalah bahwa QA dan pengembangan tidak bergantung satu sama lain. Namun, kenyataannya adalah untuk memastikan kualitas sistem, diperlukan upaya dari pengembang dan insinyur QA. Oleh karena itu, QA perlu dilibatkan di seluruh siklus hidup.

QA lifecycle Siklus hidup QA

Seperti yang ditunjukkan pada gambar di atas, siklus hidup R&D perangkat lunak yang lengkap mencakup tiga tahap.

Pada tahap awal, pengembang mempublikasikan dokumentasi desain sementara insinyur QA membuat rencana pengujian, menentukan kriteria rilis, dan menetapkan tugas QA. Pengembang dan insinyur QA harus terbiasa dengan dokumen desain dan rencana pengujian sehingga pemahaman bersama tentang tujuan rilis (dalam hal fitur, kinerja, stabilitas, konvergensi bug, dll.) Dibagikan di antara kedua tim.

Selama R&D, pengembangan dan pengujian QA sering berinteraksi untuk mengembangkan dan memverifikasi fitur dan fungsi, serta memperbaiki bug dan masalah yang dilaporkan oleh komunitas sumber terbuka.

Pada tahap akhir, jika kriteria rilis terpenuhi, citra Docker baru dari versi Milvus yang baru akan dirilis. Sebuah catatan rilis yang berfokus pada fitur-fitur baru dan bug yang telah diperbaiki serta tag rilis diperlukan untuk rilis resmi. Kemudian tim QA juga akan mempublikasikan laporan pengujian pada rilis ini.

Modul pengujian di Milvus

Ada beberapa modul pengujian di Milvus dan bagian ini akan menjelaskan setiap modul secara rinci.

Unit test

Unit test Uji coba unit

Unit test dapat membantu mengidentifikasi bug perangkat lunak pada tahap awal dan memberikan kriteria verifikasi untuk restrukturisasi kode. Menurut kriteria penerimaan pull request (PR) Milvus, cakupan uji unit kode harus 80%.

Uji fungsi

Uji fungsi di Milvus terutama diatur di sekitar PyMilvus dan SDK. Tujuan utama dari uji fungsi adalah untuk memverifikasi apakah antarmuka dapat bekerja seperti yang dirancang. Uji fungsi memiliki dua aspek:

  • Menguji apakah SDK dapat mengembalikan hasil yang diharapkan ketika parameter yang benar diberikan.
  • Menguji apakah SDK dapat menangani kesalahan dan mengembalikan pesan kesalahan yang wajar ketika parameter yang salah diberikan.

Gambar di bawah ini menggambarkan kerangka kerja saat ini untuk uji fungsi yang didasarkan pada kerangka kerja pytest arus utama. Kerangka kerja ini menambahkan pembungkus ke PyMilvus dan memberdayakan pengujian dengan antarmuka pengujian otomatis.

Function test Uji fungsi

Mempertimbangkan metode pengujian bersama diperlukan dan beberapa fungsi perlu digunakan kembali, kerangka kerja pengujian di atas diadopsi, daripada menggunakan antarmuka PyMilvus secara langsung. Modul "cek" juga disertakan dalam kerangka kerja untuk memberikan kemudahan dalam verifikasi nilai yang diharapkan dan nilai aktual.

Sebanyak 2.700 kasus uji fungsi dimasukkan ke dalam direktori tests/python_client/testcases, yang mencakup hampir semua antarmuka PyMilvus. Uji fungsi ini secara ketat mengawasi kualitas setiap PR.

Uji penyebaran

Milvus hadir dalam dua mode: mandiri dan cluster. Dan ada dua cara utama untuk men-deploy Milvus: menggunakan Docker Compose atau Helm. Dan setelah men-deploy Milvus, pengguna juga dapat memulai ulang atau meningkatkan layanan Milvus. Ada dua kategori utama dari uji coba penyebaran: uji coba restart dan uji coba peningkatan.

Restart test mengacu pada proses pengujian persistensi data, yaitu apakah data masih tersedia setelah restart. Upgrade test mengacu pada proses pengujian kompatibilitas data untuk mencegah situasi di mana format data yang tidak kompatibel dimasukkan ke dalam Milvus. Kedua jenis uji penerapan ini memiliki alur kerja yang sama seperti yang diilustrasikan pada gambar di bawah ini.

Deployment test Uji penyebaran

Dalam uji coba restart, kedua deployment menggunakan citra docker yang sama. Namun dalam pengujian peningkatan, deployment pertama menggunakan citra docker dari versi sebelumnya sedangkan deployment kedua menggunakan citra docker dari versi yang lebih baru. Hasil pengujian dan data disimpan dalam file Volumes atau persistent volume claim (PVC).

Ketika menjalankan pengujian pertama, beberapa koleksi dibuat dan operasi yang berbeda dilakukan pada masing-masing koleksi. Ketika menjalankan pengujian kedua, fokus utamanya adalah memverifikasi apakah koleksi yang dibuat masih tersedia untuk operasi CRUD, dan apakah koleksi baru dapat dibuat lebih lanjut.

Uji keandalan

Pengujian keandalan sistem terdistribusi cloud-native biasanya menggunakan metode chaos engineering yang bertujuan untuk mengatasi kesalahan dan kegagalan sistem sejak awal. Dengan kata lain, dalam uji coba chaos engineering, kami sengaja menciptakan kegagalan sistem untuk mengidentifikasi masalah dalam uji tekanan dan memperbaiki kegagalan sistem sebelum benar-benar mulai menimbulkan bahaya. Selama uji kekacauan di Milvus, kami memilih Chaos Mesh sebagai alat untuk menciptakan kekacauan. Ada beberapa jenis kegagalan yang perlu dibuat:

  • Pod kill: simulasi skenario di mana node mati.
  • Kegagalan pod: Menguji jika salah satu pod node pekerja gagal apakah seluruh sistem masih dapat terus bekerja.
  • Memory stress: simulasi konsumsi memori dan sumber daya CPU yang berat dari node kerja.
  • Partisi jaringan: Karena Milvus memisahkan penyimpanan dari komputasi, sistem ini sangat bergantung pada komunikasi antara berbagai komponen. Simulasi skenario di mana komunikasi antara pod yang berbeda dipartisi diperlukan untuk menguji saling ketergantungan komponen Milvus yang berbeda.

Reliability test Uji keandalan

Gambar di atas menunjukkan kerangka kerja uji reliabilitas di Milvus yang dapat mengotomatiskan uji kekacauan. Alur kerja uji reliabilitas adalah sebagai berikut:

  1. Inisialisasi cluster Milvus dengan membaca konfigurasi penerapan.
  2. Ketika cluster sudah siap, jalankan test_e2e.py untuk menguji apakah fitur-fitur Milvus sudah tersedia.
  3. Jalankan hello_milvus.py untuk menguji persistensi data. Buat koleksi bernama "hello_milvus" untuk penyisipan data, flush, pembuatan indeks, pencarian vektor, dan kueri. Koleksi ini tidak akan dirilis atau dihapus selama pengujian.
  4. Buat sebuah objek pemantauan yang akan memulai enam thread yang mengeksekusi operasi create, insert, flush, index, search dan query.
checkers = {
    Op.create: CreateChecker(),
    Op.insert: InsertFlushChecker(),
    Op.flush: InsertFlushChecker(flush=True),
    Op.index: IndexChecker(),
    Op.search: SearchChecker(),
    Op.query: QueryChecker()
}
  1. Buat pernyataan pertama - semua operasi berhasil seperti yang diharapkan.
  2. Perkenalkan kegagalan sistem pada Milvus dengan menggunakan Chaos Mesh untuk mem-parsing file yaml yang mendefinisikan kegagalan. Kegagalan dapat berupa mematikan simpul kueri setiap lima detik misalnya.
  3. Buat pernyataan kedua saat memperkenalkan kegagalan sistem - Menilai apakah hasil yang dikembalikan dari operasi di Milvus selama kegagalan sistem sesuai dengan yang diharapkan.
  4. Hilangkan kegagalan melalui Chaos Mesh.
  5. Ketika layanan Milvus telah pulih (yang berarti semua pod telah siap), buat pernyataan ketiga - semua operasi berhasil seperti yang diharapkan.
  6. Jalankan test_e2e.py untuk menguji apakah fitur Milvus tersedia. Beberapa operasi selama kekacauan mungkin diblokir karena pernyataan ketiga. Dan bahkan setelah kekacauan dihilangkan, beberapa operasi mungkin akan terus diblokir, sehingga menghambat pernyataan ketiga untuk berhasil seperti yang diharapkan. Langkah ini bertujuan untuk memfasilitasi pernyataan ketiga dan berfungsi sebagai standar untuk memeriksa apakah layanan Milvus telah pulih.
  7. Jalankan hello_milvus.py, muat koleksi yang telah dibuat, dan lakukan operasi CRUP pada koleksi tersebut. Kemudian, periksa apakah data yang ada sebelum kegagalan sistem masih tersedia setelah pemulihan kegagalan.
  8. Kumpulkan log.

Uji stabilitas dan kinerja

Gambar di bawah ini menjelaskan tujuan, skenario pengujian, dan metrik uji stabilitas dan performa.

Uji stabilitasUji kinerja
Tujuan- Memastikan bahwa Milvus dapat bekerja dengan lancar untuk jangka waktu tertentu di bawah beban kerja normal.
- Memastikan sumber daya dikonsumsi secara stabil ketika layanan Milvus dimulai.
- Menguji kinerja semua antarmuka Milvus.
- Temukan konfigurasi yang optimal dengan bantuan tes kinerja.
- Berfungsi sebagai tolok ukur untuk rilis mendatang.
- Menemukan hambatan yang menghambat kinerja yang lebih baik.
Skenario- Skenario offline read-intensive di mana data hampir tidak diperbarui setelah penyisipan dan persentase pemrosesan setiap jenis permintaan adalah: permintaan pencarian 90%, permintaan penyisipan 5%, lainnya 5%.
- Skenario online write-intensive dimana data disisipkan dan dicari secara bersamaan dan persentase pemrosesan setiap jenis permintaan adalah: permintaan sisipkan 50%, permintaan pencarian 40%, lainnya 10%.
- Penyisipan data
- Pembuatan indeks
- Pencarian vektor
Metrik- Penggunaan memori
- Konsumsi CPU
- Latensi IO
- Status pod Milvus
- Waktu respons dari layanan Milvus
dll.
- Throughput data selama penyisipan data
- Waktu yang dibutuhkan untuk membangun indeks
- Waktu respons selama pencarian vektor
- Kueri per detik (QPS)
- Permintaan per detik
- Tingkat penarikan kembali
dll.

Uji stabilitas dan uji performa memiliki alur kerja yang sama:

Stability and performance test Uji stabilitas dan performa

  1. Mengurai dan memperbarui konfigurasi, dan menentukan metrik. server-configmap berhubungan dengan konfigurasi Milvus standalone atau cluster, sedangkan client-configmap berhubungan dengan konfigurasi kasus uji.
  2. Mengkonfigurasi server dan klien.
  3. Persiapan data
  4. Meminta interaksi antara server dan klien.
  5. Melaporkan dan menampilkan metrik.

Alat dan metode untuk efisiensi QA yang lebih baik

Dari bagian pengujian modul, kita dapat melihat bahwa prosedur untuk sebagian besar pengujian sebenarnya hampir sama, terutama melibatkan modifikasi konfigurasi server dan klien Milvus, dan mengoper parameter API. Ketika ada beberapa konfigurasi, semakin bervariasi kombinasi konfigurasi yang berbeda, semakin banyak skenario pengujian yang dapat dicakup oleh eksperimen dan pengujian ini. Hasilnya, penggunaan ulang kode dan prosedur menjadi semakin penting dalam proses peningkatan efisiensi pengujian.

Kerangka kerja pengujian SDK

SDK test framework Kerangka kerja pengujian SDK

Untuk mempercepat proses pengujian, kita dapat menambahkan pembungkus API_request ke kerangka kerja pengujian asli, dan mengaturnya sebagai sesuatu yang mirip dengan API gateway. API gateway ini akan bertugas mengumpulkan semua permintaan API dan kemudian meneruskannya ke Milvus untuk menerima respons secara kolektif. Tanggapan ini akan diteruskan kembali ke klien setelahnya. Desain seperti ini membuat pengambilan informasi log tertentu seperti parameter, dan hasil yang dikembalikan menjadi lebih mudah. Selain itu, komponen pemeriksa dalam kerangka kerja pengujian SDK dapat memverifikasi dan memeriksa hasil dari Milvus. Dan semua metode pengecekan dapat ditentukan dalam komponen checker ini.

Dengan kerangka kerja pengujian SDK, beberapa proses inisialisasi yang krusial dapat dibungkus dalam satu fungsi. Dengan demikian, potongan besar kode yang membosankan dapat dihilangkan.

Perlu juga dicatat bahwa setiap kasus uji individu terkait dengan koleksi uniknya untuk memastikan isolasi data.

Saat menjalankan kasus uji,pytest-xdist, ekstensi pytest, dapat dimanfaatkan untuk menjalankan semua kasus uji secara paralel, sehingga sangat meningkatkan efisiensi.

Tindakan GitHub

GitHub action Tindakan GitHub

GitHub Action juga diadopsi untuk meningkatkan efisiensi QA karena karakteristiknya sebagai berikut:

  • Ini adalah alat CI/CD asli yang terintegrasi secara mendalam dengan GitHub.
  • Alat ini hadir dengan lingkungan mesin yang dikonfigurasi secara seragam dan alat pengembangan perangkat lunak umum yang sudah diinstal sebelumnya, termasuk Docker, Docker Compose, dll.
  • Mendukung berbagai sistem operasi dan versi termasuk Ubuntu, MacOs, Windows-server, dll.
  • Memiliki pasar yang menawarkan ekstensi yang kaya dan fungsi-fungsi di luar kotak.
  • Matriksnya mendukung pekerjaan yang bersamaan, dan menggunakan kembali alur pengujian yang sama untuk meningkatkan efisiensi

Terlepas dari karakteristik di atas, alasan lain untuk mengadopsi GitHub Action adalah karena uji penyebaran dan uji reliabilitas membutuhkan lingkungan yang independen dan terisolasi. Dan GitHub Action sangat ideal untuk pemeriksaan inspeksi harian pada dataset berskala kecil.

Alat bantu untuk uji tolok ukur

Untuk membuat pengujian QA lebih efisien, sejumlah alat bantu digunakan.

QA tools Alat bantu QA

  • Argo: seperangkat alat sumber terbuka untuk Kubernetes untuk menjalankan alur kerja dan mengelola cluster dengan menjadwalkan tugas. Alat ini juga dapat menjalankan beberapa tugas secara paralel.
  • Dasbor Kubernetes: antarmuka pengguna Kubernetes berbasis web untuk memvisualisasikan server-configmap dan client-configmap.
  • NAS: Network attached storage (NAS) adalah server penyimpanan data komputer tingkat file untuk menyimpan dataset benchmark ANN yang umum.
  • InfluxDB dan MongoDB: Basis data untuk menyimpan hasil tes benchmark.
  • Grafana: Solusi analitik dan pemantauan sumber terbuka untuk memantau metrik sumber daya server dan metrik kinerja klien.
  • Redash: Layanan yang membantu memvisualisasikan data Anda dan membuat bagan untuk pengujian benchmark.

Tentang Seri Deep Dive

Dengan pengumuman resmi ketersediaan umum Milvus 2.0, kami menyusun seri blog Milvus Deep Dive ini untuk memberikan interpretasi mendalam tentang arsitektur dan kode sumber Milvus. Topik-topik yang dibahas dalam seri blog ini meliputi:

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Terus Baca