Bagikan melalui


Pola desain untuk aplikasi SaaS multipenyewa dan Azure AI Search

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 Azure AI Search.

Konsep Pencarian Azure AI

Sebagai solusi pencarian sebagai layanan, Azure AI Search 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 Azure AI Search 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 Azure AI Search, satu berlangganan layanan pencarian. Saat data diunggah ke Azure AI Search, 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 Azure AI Search, 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 layanan dapat mencapai SLA baca-tulis, dibutuhkan tiga replika.

Ada beberapa tingkat harga yang berbeda di Azure AI Search, 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

Di tingkat harga S3 Azure AI Search, ada opsi untuk mode Kepadatan Tinggi (HD) yang dirancang khusus untuk skenario multipenyewa. 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. Azure AI Search memiliki SLA 99,9%.

  • Jejak global: Aplikasi multipenyewa 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.

Azure AI Search 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. Azure AI Search memiliki beberapa pola umum saat memodelkan skenario multipenyewa:

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

  • Satu layanan per penyewa: Setiap penyewa memiliki azure AI khusus sendiri layanan Pencarian, 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 azure AI layanan Pencarian di mana setiap penyewa memiliki indeks mereka sendiri.

Penyewa mencapai isolasi data karena semua permintaan pencarian dan operasi dokumen dikeluarkan pada tingkat indeks di Azure AI Search. Dalam lapisan aplikasi, ada kebutuhan kesadaran untuk mengarahkan lalu lintas berbagai penyewa ke indeks yang tepat sambil juga mengelola sumber daya di tingkat layanan di semua penyewa.

Atribut kunci dari model indeks per penyewa adalah kemampuan bagi pengembang aplikasi untuk langganan berlebih kapasitas layanan pencarian di antara 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. Trade-off adalah ketidakmampuan model untuk menangani situasi saat setiap penyewa secara bersamaan sangat aktif.

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 jejak global, model indeks per penyewa mungkin bukan yang paling efisien. Jika penyewa aplikasi didistribusikan di seluruh dunia, layanan terpisah dapat diperlukan untuk setiap wilayah, menduplikasi biaya di masing-masing wilayah.

Azure AI Search 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 jejak besar atau beban kerja memiliki sedikit varianbilitas dari penyewa ke penyewa, model layanan per penyewa adalah pilihan yang efektif karena sumber daya tidak dibagikan di berbagai beban kerja penyewa.

Model layanan per penyewa juga menawarkan keuntungan dari model biaya tetap yang dapat diprediksi. Tidak ada investasi di muka di seluruh layanan pencarian sampai ada penyewa untuk mengisinya, namun biaya per penyewa lebih tinggi dari model indeks per penyewa.

Model layanan-per-penyewa adalah pilihan yang efisien untuk aplikasi dengan jejak 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 melampaui layanan mereka. Azure AI Search 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 mencampur dua pola, penyewa terbesar aplikasi dapat menempati layanan khusus sementara ekor panjang 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 Azure AI Search 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 memiliki satu indeks berkinerja berbeda untuk titik akhir klien yang berbeda, bidang dapat ditambahkan ke indeks, yang menunjuk nilai tertentu untuk setiap klien yang mungkin. Setiap kali klien memanggil Azure AI Search untuk mengkueri atau memodifikasi indeks, kode dari aplikasi klien menentukan nilai yang sesuai untuk bidang tersebut menggunakan kemampuan filter Azure AI Search 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

Azure AI Search 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 Azure AI Search terbaik agar sesuai dengan beban kerja aplikasi dan arsitektur dari semua ukuran.