Anda memiliki proyek yang cukup menarik. Saya tidak pernah secara langsung melihat seseorang mencoba mengimplementasikan sesuatu yang besar, setidaknya pada SQL Server. Semakin saya membaca posting Anda, semakin banyak pertanyaan yang saya ajukan ...
Infrastruktur skenario kasus terburuk (yang sebenarnya merupakan skenario kasus terbaik, bisnis-bijaksana), Anda memerlukan database 10K kali pengguna 2k. Itu 20.000.000 pengguna. Anda tidak akan berhasil mencoba mengelola login SQL Server 20 M. IMO. Hanya jumlah mereka, berurusan dengan memindahkan mereka dari server ke server, mengawasi tabrakan ID dan ID yang tidak cocok, ditambah saya tidak yakin bagaimana SQL Server akan berperilaku dengan 20 baris M di sys.server_principals. Selain itu, aplikasi web Anda mungkin ingin terhubung sebagai pengguna tunggal, atau sangat sedikit. IIS tidak dapat menyatukan koneksi kecuali string DSN mereka identik. Salah satu atribut string DSN adalah nama pengguna. Pengguna yang berbeda berarti tidak ada penyatuan.
Anda harus memutar skema kredensial pengguna Anda sendiri. Itu harus dapat mengetahui penyewa milik siapa dan kemudian kode web Anda harus memilih database yang tepat. Metadata pengguna itu sangat penting, perlu disimpan di suatu tempat, perlu dikelompokkan atau dicerminkan, perlu cepat dan perlu dilindungi dengan baik (dari perspektif keamanan. IOW, mengenkripsi itu.). Dengan asumsi bahwa SQL adalah ide yang baik di sini, saya akan menjaga database ini jauh dari contoh yang digunakan oleh server tenant. Ini membantu dari sudut pandang keamanan dan dari sudut pandang beban, meskipun saya akan menebak bahwa sekali pengguna divalidasi dan aplikasi web diarahkan ke database yang benar pada contoh lain, tidak akan ada lagi permintaan metadata pengguna ini terkait dengan itu pengguna.
Pertanyaan cepat: haruskah dua pengguna berbeda, yang memiliki dua penyewa berbeda, diizinkan memiliki nama pengguna yang sama?
Pertanyaan cepat lainnya: Jika saya memberi tahu Anda bahwa saya bekerja untuk FuBar, Inc., bagaimana Anda tahu itu? Apakah FuBar akan memberi Anda daftar pengguna dan Anda mengembalikan mereka daftar nama pengguna, atau apakah mereka akan menyediakan sendiri?
Anda harus menggunakan multi-instance. Jika bahkan sebagian kecil dari pengguna tersebut memutuskan untuk menekan aplikasi sekaligus, satu contoh akan meleleh. Tidak akan ada cukup utas pekerja untuk menjalankan semua permintaan itu sekaligus. Jika hanya 1000 pengguna menekan instance Anda pada saat yang sama, itu mungkin akan kehabisan utas pekerja dan permintaan akan mulai menumpuk dan menunggu. Saya telah melihat ini terjadi; gejala terdekatnya adalah bahwa koneksi baru tidak akan dapat masuk ke instance karena tidak ada utas pekerja yang tersedia untuk melayani mereka. Jika ini perilaku yang sangat singkat, aplikasi Anda mungkin bertahan. Jika tidak, atau aplikasi Anda cerewet, pengguna akan mendapatkan kesalahan.
Bahkan jika Anda tidak akan memiliki banyak penyewa untuk memulai, Anda harus mulai memikirkan masa depan dan otomatisasi karena ketika Anda melihat bahwa server Anda macet dan ada 10 penyewa baru untuk online, sudah sangat terlambat dan layanan Anda (dan klien Anda, dan calon klien Anda akan menderita sampai Anda menulis jalan keluar dari masalah.
Anda akan membutuhkan cara untuk memindahkan basis data, dari server yang kelebihan beban ke server yang sedikit dimuat (atau baru). Apakah Anda bisa mendapatkan jendela downtime akan tergantung pada SLA Anda.
Apakah Anda menyediakan aplikasi spesifik, seperti SalesForce, atau apakah database ini hanya wadah untuk apa pun yang ingin dimasukkan oleh penyewa Anda?
Seberapa besar databasenya? Jika tidak terlalu besar, Anda bisa memulihkan dari file cadangan yang menyediakan templat. (Ini tidak jauh berbeda dari apa yang dilakukan oleh model database, tapi saya belum melihat ada orang yang benar-benar menggunakan model dengan baik sejak saya menggunakan SQL 6.5.) Setelah template telah dikembalikan ke nama database baru, Anda bisa kemudian sesuaikan database baru sesuai kebutuhan untuk penyewa tertentu. Anda tidak dapat melakukan kustomisasi sebelum memiliki penyewa, jelas. Jika basis datanya besar, Anda mungkin mengikuti prosedur dasar yang sama kecuali Anda melakukan pemulihan sebelumnya, sebelum penyewa baru membutuhkan ruang. Anda mungkin menyimpan beberapa database ini, mungkin satu per instance. Jika Anda menyimpan terlalu banyak, ini akan memaksa Anda untuk mungkin membeli lebih banyak perangkat keras dan / atau penyimpanan daripada yang Anda butuhkan,
Jika ini adalah aplikasi Anda sendiri, bagaimana Anda akan menangani pembaruan untuk skema? Bagaimana Anda akan menjaga versi database tetap lurus dengan versi kode, jika Anda menggunakan URL tunggal yang masuk ke aplikasi web Anda?
Bagaimana Anda mendeteksi dan menghancurkan basis data yang tidak digunakan lagi? Apakah Anda menunggu sampai kelompok A / R Anda mengatakan bahwa seseorang belum membayar tagihan mereka selama tiga bulan?
Jika penyewa mengelola izin, itu menyiratkan bahwa mereka memiliki pemahaman tentang cara kerja aplikasi, atau bahwa aplikasi Anda memiliki struktur peran yang sangat sederhana. Menggunakan sesuatu seperti Blogger sebagai contoh kasar, pengguna dapat (membaca posting), (membaca posting dan membuat komentar), (... dan membuat posting), (... dan mengedit posting orang lain), (... dan dapat mengatur ulang kata sandi pengguna lain), atau (... dan apa pun). Memiliki peran untuk masing-masing set hak yang berbeda dan menugaskan pengguna ke satu peran atau yang lain tidak boleh terlalu sulit, tetapi Anda tidak ingin aplikasi Anda menjalankan pernyataan 'GRANT'. Hati-hati dengan peran yang memiliki hierarki dan bergantung pada warisan, itu bisa membingungkan. Jika Anda mempromosikan atau menurunkan peringkat pengguna, saya katakan menarik mereka keluar dari semua peran terkait dan kemudian menambahkannya kembali ke satu peran yang mereka butuhkan. Oh
Saya pikir saya hanya menggores permukaan di sini, dan posting ini sudah terlalu lama. Yang benar-benar Anda butuhkan adalah sebuah buku, atau setidaknya whitepaper dari seseorang yang telah melakukan ini. Kebanyakan dari mereka tidak akan berbicara, jika mereka melihatnya sebagai keunggulan kompetitif.