Layanan Streaming
Layanan Streaming adalah konsep untuk modul sistem streaming internal Milvus, yang dibangun di sekitar Write-Ahead Log (WAL) untuk mendukung berbagai fungsi yang berhubungan dengan streaming. Ini termasuk konsumsi/langganan data streaming, pemulihan kesalahan status cluster, konversi data streaming menjadi data historis, dan kueri data yang terus bertambah. Secara arsitektur, Layanan Streaming terdiri dari tiga komponen utama:
Streaming Arc Terdistribusi
Koordinator Streaming: Komponen logis dalam node koordinator. Ini menggunakan Etcd untuk penemuan layanan untuk menemukan node streaming yang tersedia dan bertanggung jawab untuk mengikat WAL ke node streaming yang sesuai. Ini juga mendaftarkan layanan untuk mengekspos topologi distribusi WAL, yang memungkinkan klien streaming untuk mengetahui node streaming yang sesuai untuk WAL yang diberikan.
Streaming Node Cluster: Sekelompok node pekerja streaming yang bertanggung jawab atas semua tugas pemrosesan streaming, seperti penambahan wal, pemulihan status, dan permintaan data yang berkembang.
Klien Streaming: Klien Milvus yang dikembangkan secara internal yang merangkum fungsi-fungsi dasar seperti penemuan layanan dan pemeriksaan kesiapan. Ini digunakan untuk memulai operasi seperti penulisan pesan dan berlangganan.
Pesan
Streaming Service adalah sistem streaming berbasis log, sehingga semua operasi penulisan di Milvus (seperti DML dan DDL) diabstraksikan sebagai Message.
Setiap Pesan diberi bidang Timestamp Oracle (TSO ) oleh Layanan Streaming, yang menunjukkan urutan pesan dalam WAL. Urutan pesan menentukan urutan operasi penulisan di Milvus. Hal ini memungkinkan untuk merekonstruksi status cluster terbaru dari log.
Setiap Pesan adalah milik VChannel (Saluran Virtual) tertentu dan mempertahankan properti invarian tertentu di dalam saluran tersebut untuk memastikan konsistensi operasi. Sebagai contoh, operasi Insert harus selalu terjadi sebelum operasi DropCollection pada saluran yang sama.
Urutan pesan di Milvus mungkin menyerupai berikut ini:
Urutan Pesan
Komponen WAL
Untuk mendukung skalabilitas horizontal skala besar, WAL Milvus bukanlah file log tunggal, tetapi gabungan dari beberapa log. Setiap log dapat secara independen mendukung fungsionalitas streaming untuk beberapa VChannels. Pada waktu tertentu, komponen WAL diizinkan untuk beroperasi tepat pada satu node streaming, batasan ini dijanjikan oleh mekanisme pagar penyimpanan WAL yang mendasari dan koordinator streaming.
Fitur tambahan dari komponen WAL meliputi:
Manajemen Siklus Hidup Segmen: Berdasarkan kebijakan seperti kondisi memori / ukuran segmen / waktu menganggur segmen, WAL mengelola siklus hidup setiap segmen.
Dukungan Transaksi Dasar: Karena setiap pesan memiliki batas ukuran, komponen WAL mendukung tingkat transaksi sederhana untuk menjanjikan penulisan atomik pada tingkat VChannel.
Penulisan Log Jarak Jauh Berkonvergensi Tinggi: Milvus mendukung antrian pesan jarak jauh pihak ketiga sebagai penyimpanan WAL. Untuk mengurangi latensi bolak-balik (RTT) antara node streaming dan penyimpanan WAL jarak jauh untuk meningkatkan throughput penulisan, layanan streaming mendukung penulisan log secara bersamaan. Layanan ini mempertahankan urutan pesan dengan sinkronisasi TSO dan TSO, dan pesan dalam WAL dibaca dalam urutan TSO.
Buffer Tulis-Maju: Setelah pesan ditulis ke WAL, pesan-pesan tersebut disimpan sementara dalam Write-Ahead Buffer. Hal ini memungkinkan pembacaan log tanpa mengambil pesan dari penyimpanan WAL jarak jauh.
Mendukung beberapa Penyimpanan WAL: Woodpecker, Pulsar, Kafka. Gunakan woodpecker dengan mode zero-disk, kita dapat menghapus ketergantungan penyimpanan WAL jarak jauh.
Penyimpanan Pemulihan
Komponen Penyimpanan Pemulihan selalu berjalan pada simpul streaming di mana komponen WAL yang bersangkutan berada.
Komponen ini bertanggung jawab untuk mengubah data streaming menjadi data historis yang tersimpan dan menyimpannya dalam penyimpanan objek.
Komponen ini juga menangani pemulihan status dalam memori untuk komponen WAL pada node streaming.
Penyimpanan Pemulihan
Delegator Kueri
Delegator Kueri berjalan di setiap node streaming dan bertanggung jawab untuk mengeksekusi kueri tambahan pada satu pecahan. Ini menghasilkan rencana kueri, meneruskannya ke Query Node yang relevan, dan menggabungkan hasilnya.
Selain itu, Delegator Kueri bertanggung jawab untuk menyiarkan operasi Penghapusan ke Node Kueri lain.
Delegator Kueri selalu berdampingan dengan komponen WAL pada simpul streaming yang sama. Tetapi jika koleksi dikonfigurasi dengan multi-replika, maka N-1 Delegator akan disebarkan pada node streaming lainnya.
WAL Seumur Hidup dan Menunggu Siap
Dengan memisahkan node komputasi dari penyimpanan, Milvus dapat dengan mudah memindahkan WAL dari satu node streaming ke node lainnya, sehingga mencapai ketersediaan yang tinggi dalam layanan streaming.
wal seumur hidup
Tunggu Siap
Ketika WAL akan berpindah ke node streaming baru, klien akan menemukan bahwa node streaming yang lama menolak beberapa permintaan. Sementara itu, WAL akan dipulihkan di node streaming baru, klien akan menunggu wal di node streaming baru siap untuk melayani.
menunggu siap