Penyediaan dan katalog penyewa baru dalam aplikasi SaaS menggunakan Microsoft Azure SQL Database Azure SQL multi-penyewa yang pecahan
Berlaku untuk: Azure SQL Database
Artikel ini mencakup penyediaan dan katalog penyewa baru, dalam model atau pola database dengan sharded multi-penyewa.
Artikel ini memiliki dua bagian utama:
Diskusi konseptual tentang penyediaan dan katalog penyewa baru.
Tutorial yang menyoroti kode skrip PowerShell yang menyelesaikan penyediaan dan pembuatan katalog.
- Tutorial menggunakan aplikasi Wingtip Tickets SaaS, disesuaikan dengan pola database pecahan multi-penyewa.
Pola database
Bagian ini, ditambah beberapa lagi yang mengikuti, membahas konsep pola database pecahan multi-penyewa.
Dalam model pecahan multi-penyewa ini, skema tabel di dalam setiap database menyertakan kunci penyewa di kunci utama tabel yang menyimpan data penyewa. Kunci penyewa memungkinkan setiap database individual untuk menyimpan 0, 1, atau banyak penyewa. Penggunaan database pecahan memudahkan sistem aplikasi untuk mendukung sejumlah besar penyewa. Semua data untuk satu penyewa disimpan dalam satu database. Sejumlah besar penyewa didistribusikan di banyak database yang pecahan. Database katalog menyimpan pemetaan setiap penyewa ke databasenya.
Isolasi versus biaya lebih rendah
Penyewa yang memiliki database semua untuk dirinya sendiri menikmati manfaat isolasi. Penyewa dapat memulihkan database ke tanggal sebelumnya tanpa dibatasi oleh dampak pada penyewa lain. Performa database dapat disetel untuk dioptimalkan untuk satu penyewa, sekali lagi tanpa harus berkompromi dengan penyewa lain. Masalahnya adalah bahwa isolasi biaya lebih dari biaya untuk berbagi database dengan penyewa lain.
Ketika penyewa baru disediakan, penyewa dapat berbagi database dengan penyewa lain, atau dapat ditempatkan ke dalam database barunya sendiri. Nantinya Anda dapat mengubah pikiran Anda dan memindahkan database ke situasi lain.
Database dengan beberapa penyewa dan penyewa tunggal dicampur dalam aplikasi SaaS yang sama, untuk mengoptimalkan biaya atau isolasi untuk setiap penyewa.
Pola katalog penyewa
Ketika Anda memiliki dua database atau lebih yang masing-masing berisi setidaknya satu penyewa, aplikasi harus memiliki cara untuk menemukan database mana yang menyimpan penyewa minat saat ini. Database katalog menyimpan pemetaan ini.
Kunci penyewa
Untuk setiap penyewa, aplikasi Wingtip dapat memperoleh kunci unik, yaitu kunci penyewa. Aplikasi ini mengekstrak nama penyewa dari URL halaman web. Aplikasi ini hashes nama untuk mendapatkan kunci. Aplikasi ini menggunakan kunci untuk mengakses katalog. Katalog merujuk silang informasi tentang database tempat penyewa disimpan. Aplikasi ini menggunakan info database untuk menyambungkan. Skema kunci penyewa lainnya dapat digunakan.
Menggunakan katalog memungkinkan nama atau lokasi database penyewa diubah setelah penyediaan tanpa mengganggu aplikasi. Dalam model database multi-penyewa, katalog mengakomodasi pemindahan penyewa antar database.
Metadata penyewa di luar lokasi
Katalog juga dapat menunjukkan apakah penyewa offline untuk pemeliharaan atau tindakan lainnya. Dan katalog dapat diperluas untuk menyimpan penyewa tambahan atau metadata database, seperti item berikut:
- Tingkat layanan atau edisi database.
- Versi skema database.
- Nama penyewa dan SLA-nya (perjanjian tingkat layanan).
- Informasi untuk memungkinkan manajemen aplikasi, dukungan pelanggan, atau proses devops.
Katalog juga dapat digunakan untuk mengaktifkan pelaporan lintas penyewa, manajemen skema, dan ekstrak data untuk tujuan analitik.
Meningkatkan pustaka klien Elastic Database
Di Wingtip, katalog diimplementasikan dalam database tenantcatalog. Tenantcatalog dibuat menggunakan fitur Manajemen Shard dari Elastic Database Client Library (EDCL). Pustaka memungkinkan aplikasi untuk membuat, mengelola, dan menggunakan peta shard yang disimpan dalam database. Peta shard merujuk silang kunci penyewa dengan pecahannya, yang berarti databasenya yang pecahan.
Fungsi EDCL dapat dipanggil dari aplikasi atau skrip PowerShell untuk membuat dan mengelola entri dalam peta shard. Nantinya fungsi EDCL dapat digunakan untuk menyambungkan ke database yang benar. EDCL menyimpan informasi koneksi untuk meminimalkan lalu lintas pada database katalog dan mempercepat proses penghubung.
Penting
Jangan edit data dalam database katalog melalui akses langsung! Pembaruan langsung tidak didukung karena tingginya risiko korupsi data. Sebagai gantinya, edit data pemetaan hanya dengan menggunakan API EDCL.
Penyediaan penyewa
Daftar periksa
Saat Anda ingin menyediakan penyewa baru ke dalam database bersama yang sudah ada, dari database bersama, Anda harus mengajukan pertanyaan berikut:
- Apakah memiliki cukup ruang tersisa untuk penyewa baru?
- Apakah memiliki tabel dengan data referensi yang diperlukan untuk penyewa baru, atau dapatkah data ditambahkan?
- Apakah memiliki variasi skema dasar yang sesuai untuk penyewa baru?
- Apakah di lokasi geografis yang sesuai dekat dengan penyewa baru?
- Apakah pada tingkat layanan yang tepat untuk penyewa baru?
Ketika Anda ingin penyewa baru diisolasi dalam databasenya sendiri, Anda dapat membuatnya untuk memenuhi spesifikasi penyewa.
Setelah penyediaan selesai, Anda harus mendaftarkan penyewa dalam katalog. Akhirnya, pemetaan penyewa dapat ditambahkan untuk mereferensikan pecahan yang sesuai.
Database templat
Terapkan database dengan mengeksekusi skrip SQL, menyebarkan bacpac, atau menyalin database templat. Aplikasi Wingtip menyalin database templat untuk membuat database penyewa baru.
Seperti aplikasi apa pun, Wingtip akan berkembang dari waktu ke waktu. Kadang-kadang, Wingtip akan memerlukan perubahan pada database. Perubahan mungkin mencakup item berikut:
- Skema baru atau berubah.
- Data referensi baru atau yang diubah.
- Tugas pemeliharaan database rutin untuk memastikan kinerja aplikasi yang optimal.
Dengan aplikasi SaaS, perubahan ini perlu diterapkan secara terkoordinasi di seluruh armada database penyewa yang berpotensi besar. Agar perubahan ini berada di database penyewa di masa depan, mereka perlu dimasukkan ke dalam proses penyediaan. Tantangan ini dieksplorasi lebih lanjut dalam tutorial manajemen skema.
Skrip
Skrip penyediaan penyewa dalam tutorial ini mendukung kedua skenario berikut:
- Menyediakan penyewa ke dalam database yang sudah ada yang dibagikan dengan penyewa lain.
- Menyediakan penyewa ke dalam database sendiri.
Data penyewa kemudian diinisialisasi dan terdaftar dalam peta shard katalog. Dalam contoh aplikasi, database yang berisi beberapa penyewa diberi nama generik, seperti penyewa1 atau penyewa2. Database yang berisi satu penyewa diberi nama penyewa. Konvensi penamaan spesifik yang digunakan dalam sampel bukanlah bagian penting dari pola, karena penggunaan katalog memungkinkan nama apa pun ditetapkan ke database.
Tutorial dimulai
Dalam tutorial ini, Anda akan mempelajari cara:
- Menyediakan penyewa ke dalam database penyewa tunggal
- Menyediakan penyewa ke dalam database penyewa tunggal
- Menyediakan batch penyewa ke dalam database multi-penyewa dan penyewa tunggal
- Mendaftarkan pemetaan database dan penyewa dalam katalog
Prasyarat
Untuk menyelesaikan tutorial ini, pastikan prasyarat berikut ini diselesaikan:
Azure PowerShell dipasang. Untuk detailnya, lihat Mulai menggunakan Azure PowerShell
Aplikasi Database Multi-penyewa Wingtip Tickets SaaS diterapkan. Untuk menerapkan dalam waktu kurang dari lima menit, lihat Menerapkan dan menjelajahi aplikasi Database Multi-penyewa Wingtip Ticket SaaS
Dapatkan skrip Wingtip dan kode sumber:
- Skrip dan kode sumber aplikasi Database Multi-penyewa Wingtip Tickets SaaS tersedia di repo GitHub WingtipTicketsSaaS-MultitenantDB.
- Lihat panduan umum untuk langkah-langkah mengunduh dan membuka blokir skrip Wingtip Ticket SaaS.
Menyediakan penyewa ke dalam database yang dibagikan dengan penyewa lain
Di bagian ini, Anda akan melihat daftar tindakan utama untuk penyediaan yang diambil oleh skrip PowerShell. Kemudian Anda menggunakan debugger ISE PowerShell untuk menelusuri skrip untuk melihat tindakan dalam kode.
Tindakan utama penyediaan
Berikut ini adalah elemen kunci dari alur kerja penyediaan yang Anda langkahi:
Hitung kunci penyewa baru: Fungsi hash digunakan untuk membuat kunci penyewa dari nama penyewa.
Periksa apakah kunci penyewa sudah ada : Katalog diperiksa untuk memastikan kunci belum terdaftar.
Menginisialisasi penyewa dalam database penyewa default:Database penyewa diperbarui untuk menambahkan informasi penyewa baru.
Mendaftarkan penyewa dalam katalog: Pemetaan antara kunci penyewa baru dan database penyewa1 yang ada ditambahkan ke katalog.
Menambahkan nama penyewa ke tabel ekstensi katalog:Nama tempat ditambahkan ke tabel Penyewa di katalog. Tambahan ini memperlihatkan bagaimana database katalog dapat diperluas untuk mendukung data spesifik aplikasi tambahan.
Halaman Acara Terbuka untuk penyewa baru: halaman acara Bushwillow Blues dibuka di browser.
Langkah-langkah debugger
Untuk memahami bagaimana aplikasi Wingtip menerapkan penyediaan penyewa baru di database bersama, tambahkan titik henti dan hingga alur kerja:
Di PowerShell ISE, buka ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 dan atur parameter berikut:
- $TenantName = Bushwillow Blues, nama tempat baru.
- $VenueType = blues salah satu jenis tempat yang telah ditentukan: blues, klasikmusic, menari, jazz, judo, balap motor, serbaguna, opera, rockmusik, sepak bola (huruf kecil, tanpa spasi).
- $DemoScenario = 1, untuk menyediakan penyewa dalam database bersama dengan penyewa lain.
Tambahkan breakpoint dengan menempatkan kursor Anda di mana saja pada baris 38, baris yang berbunyi: New-Tenant `, lalu tekan F9 .
Jalankan skrip dengan menekan F5.
Setelah eksekusi skrip berhenti di titik henti, tekan F11 untuk melangkah ke kode.
Lacak eksekusi skrip menggunakan opsi menu Debug, F10 dan F11, untuk melangkahi atau ke fungsi yang dipanggil.
Untuk informasi selengkapnya tentang men-debug skrip PowerShell, lihat Tips bekerja dengan dan men-debug skrip PowerShell.
Menyediakan penyewa dalam databasenya sendiri
Tindakan utama penyediaan
Berikut ini adalah elemen kunci dari alur kerja yang Anda telusuri sambil menelusuri skrip:
Hitung kunci penyewa baru: Fungsi hash digunakan untuk membuat kunci penyewa dari nama penyewa.
Periksa apakah kunci penyewa sudah ada : Katalog diperiksa untuk memastikan kunci belum terdaftar.
Membuat database penyewa baru: Database dibuat dengan menyalin database basetenantdb menggunakan templat Azure Resource Manager. Nama database baru didasarkan pada nama penyewa.
Menambahkan database ke katalog: Database penyewa baru terdaftar sebagai shard dalam katalog.
Menginisialisasi penyewa dalam database penyewa default:Database penyewa diperbarui untuk menambahkan informasi penyewa baru.
Daftarkan penyewa di katalog: Pemetaan antara kunci penyewa baru dan database sequoiasoccer ditambahkan ke katalog.
Nama penyewa ditambahkan ke katalog: Nama tempat ditambahkan ke tabel ekstensi Penyewa di katalog.
Halaman Acara Terbuka untuk penyewa baru: halaman acara Sequoia Soccer dibuka di browser.
Langkah-langkah debugger
Sekarang berjalan melalui proses skrip saat membuat penyewa dalam database sendiri:
Masih di ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 untuk mengatur parameter berikut:
- $TenantName = Sequoia Soccer, nama tempat baru.
- $VenueType = sepakbola salah satu jenis tempat yang telah ditentukan: blues, klasikmusic, menari, jazz, judo, balap motor, serbaguna, opera, rockmusik, sepak bola (huruf kecil, tanpa spasi).
- $DemoScenario = 2, untuk menyediakan penyewa ke dalam database sendiri.
Tambahkan titik henti baru dengan menempatkan kursor Anda di mana saja pada baris 57, garis yang mengatakan: & $PSScriptRoot\New-TenantAndDatabase ', dan tekan F9.
Jalankan skrip dengan menekan F5.
Setelah eksekusi skrip berhenti di titik henti, tekanF11 untuk melangkah ke kode. Gunakan F10 dan F11 untuk melangkah dan melangkah ke fungsi untuk melacak eksekusi.
Menyediakan batch penyewa
Latihan ini menyediakan kumpulan 17 penyewa. Sebaiknya Anda menyediakan batch penyewa ini sebelum memulai tutorial Tiket Wingtip lainnya sehingga ada lebih banyak database untuk dikerjakan.
Di PowerShell ISE, buka ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1 dan ubah parameter $DemoScenario ke 4:
- $DemoScenario = 4, untuk menyediakan batch penyewa ke dalam database bersama.
Tekan F5 untuk menjalankan skrip.
Memverifikasi kumpulan penyewa yang diterapkan
Pada tahap ini, Anda memiliki campuran penyewa yang diterapkan ke dalam database bersama dan penyewa yang diterapkan ke dalam database mereka sendiri. Portal Microsoft Azure dapat digunakan untuk memeriksa database yang dibuat. Di portal Microsoft Azure, buka server tenants1-mt-<USER> dengan menelusuri ke daftar server SQL. Daftar database SQL harus menyertakan database penyewa bersama1 dan database untuk penyewa yang ada dalam database mereka sendiri:
Meskipun portal Micrososft Azure memperlihatkan database penyewa, portal tersebut tidak memungkinkan Anda melihat penyewa di dalam database bersama. Daftar lengkap penyewa dapat dilihat di laman web Hub Acara di Wingtip, dan dengan menjelajahi katalog.
Menggunakan halaman hub acara Tiket Wingtip
Buka halaman Events Hub di browser (http:events.wingtip-mt.<USER>.trafficmanager.net)
Menggunakan database katalog
Daftar lengkap penyewa dan database terkait untuk masing-masing tersedia dalam katalog. Tampilan SQL disediakan yang bergabung dengan nama penyewa ke nama database. Tampilan dengan baik menunjukkan nilai memperluas metadata yang disimpan dalam katalog.
- Tampilan SQL tersedia dalam database tenantcatalog.
- Nama penyewa disimpan dalam tabel Penyewa.
- Nama database disimpan dalam tabel Manajemen Shard.
Di SQL Server Management Studio (Management Studio), sambungkan ke server penyewa di catalog-mt.<USER>.database.windows.net, dengan Login = developer, dan Kata Sandi = P@ssword1
Di SQL Server Object Explorer Server Management Studio (SSMS), telusuri tampilan dalam database tenantcatalog.
Klik kanan pada tampilan PenyewaExtended dan pilih Pilih 1000 Baris Teratas. Perhatikan pemetaan antara nama penyewa dan database untuk penyewa yang berbeda.
Pola penyediaan lainnya
Bagian ini membahas pola penyediaan menarik lainnya.
Database pra-penyediaan dalam kumpulan elastis
Pola pra-penyediaan mengeksploitasi fakta bahwa ketika menggunakan kumpulan elastis, penagihan adalah untuk kumpulan bukan database. Dengan demikian database dapat ditambahkan ke kumpulan elastis sebelum diperlukan tanpa menimbulkan biaya tambahan. Pra-visi ini secara signifikan mengurangi waktu yang diambil untuk menyediakan penyewa ke dalam database. Jumlah database yang telah disediakan sebelumnya dapat disesuaikan sesuai kebutuhan untuk menjaga penyangga tetap sesuai dengan tingkat penyediaan yang diantisipasi.
Pengadaan otomatis
Dalam pola penyediaan otomatis, layanan penyediaan yang berdedikasi biasa menyediakan server, kumpulan, dan database secara otomatis, sesuai kebutuhan. Otomatisasi ini mencakup pra-penyediaan database di kumpulan elastis. Dan jika database dinonaktifkan dan dihapus, celah yang dibuat di kumpulan elastis dapat diisi oleh layanan penyediaan seperti yang diinginkan.
Jenis layanan otomatis ini bisa sederhana atau kompleks. Misalnya, otomatisasi dapat menangani penyediaan di beberapa wilayah, dan dapat mengatur replikasi geografis untuk pemulihan bencana. Dengan pola penyediaan otomatis, aplikasi atau skrip klien akan mengirimkan permintaan penyediaan ke antrean untuk diproses oleh layanan penyediaan. Skrip kemudian akan melakukan jajak pendapat untuk mendeteksi penyelesaian. Jika pra-penyediaan digunakan, permintaan akan ditangani dengan cepat, sementara layanan latar belakang akan mengelola penyediaan database pengganti.
Sumber Daya Tambahan:
Langkah berikutnya
Dalam tutorial ini, Anda akan mempelajari cara:
- Menyediakan satu penyewa baru ke dalam database multi-penyewa bersama dan databasenya sendiri
- Menyediakan batch penyewa tambahan
- Masuki detail penyediaan penyewa dan daftarkan ke dalam katalog.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk