Pola desain untuk aplikasi SaaS multitenant dan Pencarian AI Azure

Catatan

Pencarian Azure AI tersedia melalui portal Azure, REST API, dan Azure SDK. Ini juga mendukung Foundry IQ, lapisan pengetahuan terkelola yang mengubah konten perusahaan menjadi pangkalan pengetahuan yang dapat digunakan kembali dan sadar izin untuk agen di portal Microsoft Foundry.

Aplikasi multipenyewa adalah aplikasi yang menyediakan layanan dan kemampuan yang sama untuk sejumlah penyewa yang tidak dapat melihat atau berbagi data penyewa lain. Artikel ini membahas strategi isolasi penyewa untuk aplikasi multipenyewa yang dibangun dengan Pencarian Azure AI.

Konsep Pencarian Azure AI

Sebagai solusi pencarian sebagai layanan, Pencarian Azure AI memungkinkan pengembang untuk menambahkan pengalaman pencarian yang kaya ke aplikasi tanpa mengelola infrastruktur apa pun atau menjadi ahli dalam pengambilan informasi. Data diunggah ke layanan lalu disimpan di cloud. Menggunakan permintaan sederhana ke Pencarian Azure AI API, data kemudian dapat dimodifikasi dan dicari.

Layanan pencarian, indeks, bidang, dan dokumen

Sebelum membahas pola desain, penting untuk memahami beberapa konsep dasar.

Saat menggunakan Pencarian Azure AI, satu berlangganan layanan pencarian. Saat data diunggah ke Pencarian Azure AI, data disimpan dalam indeks dalam layanan pencarian. Mungkin ada sejumlah indeks dalam satu layanan. Untuk menggunakan konsep database yang akrab, layanan pencarian dapat dibandingkan ke database sementara indeks dalam layanan dapat dibandingkan dengan tabel dalam database.

Setiap indeks dalam layanan pencarian memiliki skema tersendiri, yang didefinisikan oleh sejumlah bidang yang dapat disesuaikan. Data ditambahkan ke indeks Pencarian Azure AI dalam bentuk dokumen individual. Setiap dokumen harus diunggah ke indeks tertentu dan harus sesuai dengan skema indeks tersebut. Saat mencari data menggunakan Pencarian Azure AI, kueri pencarian teks lengkap dikeluarkan terhadap indeks tertentu. Untuk membandingkan konsep ini dengan database, bidang dapat dibandingkan dengan kolom dalam tabel dan dokumen dapat dibandingkan dengan baris.

Skalabilitas

Setiap layanan Pencarian Azure AI di tingkat harga Standar dapat diskalakan dalam dua dimensi: penyimpanan dan ketersediaan.

  • Partisi dapat ditambahkan untuk meningkatkan penyimpanan layanan pencarian.
  • Replika dapat ditambahkan ke layanan untuk meningkatkan throughput permintaan yang dapat ditangani layanan pencarian.

Penambahan dan penghapusan partisi serta replika akan memungkinkan kapasitas layanan pencarian tumbuh dengan jumlah data dan lalu lintas yang dibutuhkan aplikasi. Agar layanan pencarian mencapai SLA baca, dibutuhkan dua replika. Agar suatu layanan dapat mencapai SLA baca-tulis, tiga replika dibutuhkan.

Ada beberapa tingkat harga yang berbeda di Pencarian Azure AI, masing-masing tingkatan memiliki batas dan kuota yang berbeda. Beberapa batasan ini berada di tingkat layanan, beberapa berada di tingkat indeks, dan beberapa berada di tingkat partisi.

S3 Kepadatan Tinggi

Tingkat harga S3 Pencarian Azure AI menawarkan opsi mode Kepadatan Tinggi (HD) yang dirancang khusus untuk skenario multitenansi. Dalam banyak kasus, perlu untuk mendukung sejumlah besar penyewa yang lebih kecil di bawah satu layanan untuk mencapai manfaat kesederhanaan dan efisiensi biaya.

S3 HD memungkinkan banyak indeks kecil dipaketkan di bawah manajemen layanan pencarian tunggal dengan memperdagangkan kemampuan untuk perluasan skala indeks menggunakan partisi untuk kemampuan untuk meng-host lebih banyak indeks dalam satu layanan.

Layanan S3 dirancang untuk menghosting sejumlah indeks tetap (maksimum 200) dan memungkinkan setiap indeks untuk menskalakan ukuran secara horizontal saat partisi baru ditambahkan ke layanan. Menambahkan partisi ke layanan S3 HD meningkatkan jumlah maksimum indeks yang dapat dihosting layanan. Ukuran maksimum yang ideal untuk indeks S3HD individu adalah sekitar 50 - 80 GB, meskipun tidak ada batas ukuran keras pada setiap indeks yang diberlakukan oleh sistem.

Pertimbangan untuk aplikasi multipenyewa

Aplikasi multipenyewa harus secara efektif mendistribusikan sumber daya di antara penyewa sambil mempertahankan beberapa tingkat privasi di antara berbagai penyewa. Ada beberapa pertimbangan saat merancang arsitektur untuk aplikasi seperti itu:

  • Isolasi penyewa: Pengembang aplikasi perlu mengambil langkah-langkah yang tepat untuk memastikan bahwa tidak ada penyewa yang memiliki akses tidak sah atau tidak diinginkan ke data penyewa lain. Di luar perspektif privasi data, strategi isolasi penyewa memerlukan manajemen sumber daya berbagi yang efektif dan perlindungan dari tetangga yang bising.

  • Biaya sumber daya cloud: Seperti halnya aplikasi lain, solusi perangkat lunak harus tetap kompetitif biaya sebagai komponen aplikasi multipenyewa.

  • Kemudahan Pengoperasian: Saat mengembangkan arsitektur multipenyewa, dampaknya pada operasi dan kompleksitas aplikasi adalah pertimbangan penting. Pencarian Azure AI memiliki SLA 99,9%.

  • Cakupan global: Aplikasi multi-penyewa sering kali perlu melayani penyewa yang didistribusikan di seluruh dunia.

  • Skalabilitas: Pengembang aplikasi perlu mempertimbangkan bagaimana mereka menyesuaikan antara mempertahankan tingkat kompleksitas aplikasi tingkat rendah dan merancang aplikasi untuk menskalakan jumlah penyewa dan ukuran data serta beban kerja penyewa.

Pencarian Azure AI menawarkan beberapa batasan yang dapat digunakan untuk mengisolasi data dan beban kerja penyewa.

Dalam kasus skenario multipenyewa, pengembang aplikasi menggunakan satu atau beberapa layanan pencarian dan membagi penyewa mereka di antara layanan, indeks, atau keduanya. Pencarian Azure AI memiliki beberapa pola umum saat memodelkan skenario multitenansi.

  • Satu indeks per penyewa: Setiap penyewa memiliki indeks tersendiri dalam layanan pencarian yang dibagikan dengan penyewa lain.

  • Satu layanan per penyewa: Setiap penyewa memiliki layanan Pencarian Azure AI khusus, menawarkan tingkat pemisahan data dan beban kerja tertinggi.

  • Campuran keduanya: Penyewa yang lebih besar dan lebih aktif diberi layanan khusus, sedangkan penyewa yang lebih kecil ditetapkan indeks individu dalam layanan bersama.

Model 1: Satu indeks per penyewa

Penggambaran model indeks per penyewa

Dalam model indeks per penyewa, beberapa penyewa menempati satu layanan Pencarian Azure AI di mana setiap penyewa memiliki indeks tersendiri.

Pendekatan ini berfungsi karena semua permintaan pencarian dan operasi dokumen dikeluarkan pada tingkat indeks di Pencarian Azure AI. Dalam lapisan aplikasi, ada kebutuhan untuk menyadari dan mengarahkan lalu lintas berbagai penyewa ke indeks yang sesuai sambil juga mengelola sumber daya pada tingkat layanan untuk semua penyewa.

Atribut kunci dari model indeks per penyewa adalah kemampuan bagi pengembang aplikasi untuk melebihi kapasitas langganan layanan pencarian antara para penyewa aplikasi. Jika penyewa memiliki distribusi beban kerja yang tidak merata, kombinasi optimal penyewa dapat didistribusikan lintas indeks layanan pencarian untuk mengakomodasikan sejumlah penyewa yang sangat aktif dan intensif sumber daya sekaligus secara bersamaan melayani ekor panjang penyewa yang kurang aktif. Kompromi ini adalah ketidakmampuan model untuk menangani situasi ketika setiap pengguna sangat aktif secara bersamaan.

Model indeks per penyewa menyediakan dasar untuk model biaya variabel, di mana seluruh Azure AI layanan Pencarian dibeli di muka dan kemudian diisi dengan penyewa. Ini memungkinkan kapasitas yang tidak digunakan ditunjuk untuk uji coba dan akun gratis.

Untuk aplikasi dengan cakupan global, model indeks per penyewa mungkin bukan yang paling efisien. Jika penyewa aplikasi didistribusikan di seluruh dunia, layanan terpisah mungkin diperlukan untuk setiap wilayah, yang dapat menduplikasi biaya di setiap wilayah tersebut.

Pencarian Azure AI memungkinkan skala indeks individual dan jumlah total indeks bertambah. Jika tingkat harga yang sesuai dipilih, partisi dan replika dapat ditambahkan ke seluruh layanan pencarian saat indeks individu dalam layanan tumbuh terlalu besar dalam hal penyimpanan atau lalu lintas.

Jika jumlah total indeks tumbuh terlalu besar untuk satu layanan, layanan lain harus diprovisikan untuk mengakomodasi penyewa baru. Jika indeks harus dipindahkan antara layanan pencarian saat layanan baru ditambahkan, data dari indeks harus disalin secara manual dari satu indeks ke indeks lainnya karena Pencarian Azure AI tidak memungkinkan indeks dipindahkan.

Model 2: Satu layanan per penyewa

Penggambaran model layanan per penyewa

Dalam arsitektur layanan-per-penyewa, setiap penyewa memiliki layanan pencarian tersendiri.

Dalam model ini, aplikasi mencapai tingkat isolasi maksimum untuk penyewanya. Setiap layanan memiliki penyimpanan dan throughput khusus untuk menangani permintaan pencarian. Setiap penyewa memiliki kepemilikan individual kunci API.

Untuk aplikasi di mana setiap penyewa memiliki cakupan besar atau beban kerja memiliki sedikit variabilitas dari penyewa ke penyewa, model layanan per penyewa adalah pilihan yang efektif karena sumber daya tidak dibagi antar beban kerja penyewa yang berbeda.

Model layanan per penyewa juga menawarkan keuntungan dari model biaya tetap yang dapat diprediksi. Tidak ada investasi awal dalam layanan pencarian secara keseluruhan sampai ada penyewa yang menggunakannya, namun biaya per penyewa lebih tinggi dibandingkan dengan model indeks per penyewa.

Model layanan per-penyewa adalah pilihan yang efisien untuk aplikasi dengan jangkauan global. Dengan penyewa yang didistribusikan secara geografis, mudah untuk memiliki layanan setiap penyewa di wilayah yang sesuai.

Tantangan dalam penskalaan pola ini muncul saat penyewa individu melebihi kapasitas layanan mereka. Pencarian Azure AI saat ini tidak mendukung peningkatan tingkat harga layanan pencarian, sehingga semua data harus disalin secara manual ke layanan baru.

Model 3: Hibrid

Pola lain untuk pemodelan multipenyewaan adalah mencampur kedua strategi, yakni indeks per penyewa dan layanan-per-penyewa.

Dengan menggabungkan dua pola tersebut, penyewa terbesar aplikasi dapat menempati layanan khusus, sementara penyewa yang kurang aktif dan lebih kecil dapat menempati indeks dalam layanan bersama. Model ini memastikan bahwa penyewa terbesar memiliki kinerja tinggi secara konsisten dari layanan sambil membantu melindungi penyewa yang lebih kecil dari tetangga yang bising.

Namun, menerapkan strategi ini bergantung pada pandangan ke depan dalam memprediksi penyewa mana yang akan memerlukan layanan khusus versus indeks dalam layanan bersama. Kompleksitas aplikasi meningkat seiring kebutuhan untuk mengelola kedua model multipenyewaan ini.

Mencapai granularitas yang lebih halus

Pola desain di atas untuk memodelkan skenario multipenyewa di Pencarian Azure AI mengasumsikan cakupan seragam di mana setiap penyewa adalah seluruh instans aplikasi. Namun, aplikasi terkadang dapat menangani banyak cakupan yang lebih kecil.

Jika model layanan per penyewa dan indeks per penyewa tidak memiliki cakupan yang cukup kecil, dimungkinkan untuk memodelkan indeks untuk mencapai tingkat granularitas yang lebih halus.

Untuk membuat satu indeks berperilaku berbeda untuk berbagai endpoint klien, sebuah bidang dapat ditambahkan ke indeks tersebut, yang menetapkan nilai tertentu untuk setiap klien yang mungkin. Setiap kali klien memanggil Pencarian Azure AI untuk mengkueri atau memodifikasi indeks, kode dari aplikasi klien menentukan nilai yang sesuai untuk bidang tersebut menggunakan kemampuan filter Pencarian Azure AI pada waktu kueri.

Metode ini dapat digunakan untuk mencapai fungsionalitas akun pengguna terpisah, tingkat izin terpisah, dan bahkan aplikasi yang sepenuhnya terpisah.

Catatan

Menggunakan pendekatan yang dijelaskan di atas untuk mengonfigurasikan satu indeks agar melayani beberapa penyewa mempengaruhi relevansi hasil pencarian. Skor relevansi pencarian dihitung pada lingkup tingkat indeks, bukan lingkup tingkat penyewa, sehingga semua data penyewa dimasukkan dalam statistik yang mendasari skor relevansi seperti frekuensi istilah.

Langkah berikutnya

Pencarian Azure AI adalah pilihan menarik untuk banyak aplikasi. Saat mengevaluasi berbagai pola desain untuk aplikasi multipenyewa, pertimbangkan berbagai tingkat harga dan batas layanan masing-masing untuk menyesuaikan Pencarian Azure AI terbaik agar sesuai dengan beban kerja aplikasi dan arsitektur dari semua ukuran.