Kendine çok ilginç bir projen var. Hiç kimsenin en azından SQL Server'da bu kadar büyük bir şeyi uygulamaya çalıştığını hiç görmedim. Mesajınızı ne kadar çok okursam, o kadar çok soru soruyorum ...
En kötü senaryo altyapısı (aslında en iyi senaryo, işletme bazında), 10 K veritabanına 2k kullanıcı gerekir. Bu 20.000.000 kullanıcı. 20 M SQL Server girişlerini yönetme konusunda başarılı olamayacaksınız. IMO. Sadece bunlardan sadece birkaçı, onları sunucudan sunucuya taşıma, kimlik çarpışmalarını ve yanlış tanımlanmış ID'leri izleme ile ilgileniyor. Ayrıca SQL Server'ın sys.server_principals içinde 20 M satır ile nasıl davranacağından emin değilim. Ek olarak, web uygulamanız muhtemelen tek veya çok düşük sayıda kullanıcı olarak bağlanmak isteyecektir. IIS, DSN dizeleri aynı olmadıkça bağlantıları birleştiremez. Bir DSN dizesinin niteliklerinden biri kullanıcı adıdır. Farklı kullanıcılar havuz yok demektir.
Kendi kullanıcı kimlik bilgilerinizi almanız gerekecek. Bir kullanıcının hangi kiracıya ait olduğunu bulmak ve web kodunuzun uygun veritabanını seçmesi gerekir. Bu kullanıcı meta verileri kritiktir, bir yerde depolanması, kümelenmesi veya yansıtılması gerekir, hızlı olması gerekir ve iyi korunması gerekir (güvenlik açısından bakıldığında). şifreleyin.). SQL'in burada iyi bir fikir olduğunu varsayarsak, bu veritabanını sunucunun kiracılarından uzak tutardım. Bu, bir güvenlik açısından ve bir yükleme açısından yardımcı olur, ancak kullanıcılar bir kez doğrulanırsa ve web uygulaması başka bir durumda doğru veritabanına yönlendirildiğinde, bu kullanıcı meta verilerinin bu konuda daha fazla sorgulanmayacağını tahmin ediyorum. kullanıcı.
Hızlı soru: iki farklı kiracıya ait iki farklı kullanıcının aynı kullanıcı adına sahip olmasına izin verilmeli midir?
Başka bir hızlı soru: Size FuBar, Inc. için çalıştığımı söylersem, bunu nereden biliyorsunuz? FuBar size bir kullanıcı listesi verecek mi ve onları kullanıcı adlarının bir listesini geri mi vereceksiniz, yoksa kendi kendine sağlanacak mı?
Çok örneğe gitmeniz gerekecek. Bu kullanıcıların bir kısmı bile uygulamaya bir kerede vurmaya karar verirse, tek bir örnek eritilecektir. Tüm bu istekleri bir kerede çalıştırmak için yeterli işçi iş parçacığı olmayacak. Aynı anda yalnızca 1000 kullanıcı sizin örneğinize isabet ederse, muhtemelen çalışan iş parçacığı tükenir ve istek istiflenip beklemeye başlar. Bunun olduğunu gördüm; Buradaki belirti, yeni bağlantıların örneğe giriş yapamayacağıdır, çünkü onlara hizmet verecek uygun iş parçacığı yoktur. Bu çok kısa ömürlü bir davranış ise, uygulama hayatta kalabilir. Değilse veya uygulamanız titizse, kullanıcılar hata alır.
Başlayacak çok fazla kiracınız olmasa bile, geleceği ve otomasyonu düşünmeye başlamalısınız, çünkü sunucunuzun tıkandığını ve çevrimiçi duruma getirmek için 10 yeni kiracı olduğunu görünce, oldukça geç ve hizmetinizdeyken (ve Müşterileriniz ve yakında çıkacak olan müşterileriniz), sorununuzu çözene kadar acı çekeceklerdir.
Veritabanlarını aşırı yüklenmiş sunuculardan hafif yüklü (veya yeni) sunuculara taşımak için bir yola ihtiyacınız olacak. Bir kesinti süresine sahip bir pencere alıp alamayacağınız SLA'nıza bağlı olacaktır.
SalesForce gibi belirli bir uygulama sağlıyor musunuz, yoksa bu veritabanları kiracılarınıza koymak istediğiniz her şey için yalnızca kapsayıcılar mı?
Veritabanları ne kadar büyük? Çok büyük değillerse, yalnızca şablon sağlayan bir yedekleme dosyasından geri yükleyebilirsiniz. (Bu model veritabanının yaptığından çok farklı değil, ancak SQL 6.5 ile günlerimden beri hiç kimsenin modeli gerçekten iyi kullandığını görmedim.) Şablon bir kez daha yeni veritabanı adına geri yüklendiğinde, daha sonra yeni veritabanını belirli bir kiracı için gerektiği şekilde özelleştirin. Belli kiracı olmadan önce kişiselleştirmeyi yapamazsınız. Eğer veritabanı büyükse, herhangi bir yeni kiracı alana ihtiyaç duymadan önce geri yüklemeyi önceden yapmanız dışında aynı temel prosedürü uygulayabilirsiniz. Bu veritabanlarından birkaçını, belki de bir tanesini bir arada tutabilirsiniz. Etrafta çok fazla tutarsanız, bu sizi belki de ihtiyaç duyduğunuzdan daha fazla donanım ve / veya depolama alanı almaya zorlar.
Eğer bu sizin uygulamanızsa, şemalardaki güncellemeleri nasıl yapacaksınız? Web uygulamanıza tek bir URL kullanıyorsanız, veritabanının sürümlerini kod sürümleriyle nasıl düz tutabilirsiniz?
Artık kullanılmayan veritabanlarını nasıl tespit ediyor ve yok ediyorsunuz? Klima grubunuz birisinin faturasını üç aydır ödemediğini söyleyene kadar bekler misiniz?
Kiracılar izinleri yönetiyorsa, bu, uygulamanın iç işleyişini biraz anladıklarını veya uygulamanızın çok basit bir rol yapısına sahip olduğunu gösterir. Blogger gibi bir şeyi kaba bir örnek olarak kullanarak, kullanıcılar (yayınları okuyabilir), (yayınları okuyabilir ve yorum yazabilir), (... ve yayınları oluşturabilir), (... ve diğer yayınlarını düzenleyebilir), (... ve sıfırlayabilir diğer kullanıcıların şifreleri) veya (... ve her neyse). Bu farklı hak kümelerinin her biri için bir role sahip olmak ve bir kullanıcıyı bir role veya başka birine atamak çok zor olmamalıdır, ancak uygulamanızın 'GRANT' ifadeleri çalıştırmasını istemezsiniz. Hiyerarşiye sahip ve mirasa bağlı olan rollere dikkat edin, kafa karıştırıcı olabilir. Bir kullanıcıyı tanıtıyor veya alçaltıyorsanız, onları ilişkili tüm rollerden çekip çıkardıklarını ve sonra da ihtiyaç duydukları rollere eklemelerini söylerim. Oh
Burada sadece yüzeyi çizdiğimi düşünüyorum ve bu yazı zaten çok uzun. Gereksinim duyduğunuz şey bir kitap ya da en azından bunu yapan birinden bir beyaz kağıt. Bu adamların çoğu, rekabet avantajı olarak görürlerse konuşmayacak.