Masz całkiem interesujący projekt. Nigdy bezpośrednio nie widziałem, żeby ktoś próbował wdrożyć coś tak dużego, przynajmniej na SQL Server. Im więcej czytam Twojego posta, tym więcej pytań napotykam ...
Najgorszy scenariusz z punktu widzenia infrastruktury (który w rzeczywistości jest najlepszym scenariuszem z perspektywy biznesowej), potrzebujesz 10 tys. Baz danych razy 2 tys. Użytkowników. To 20 000 000 użytkowników. Nie odniesiesz sukcesu w zarządzaniu logowaniami 20 M SQL Server. IMO. Tylko ich liczba, zajmująca się przenoszeniem ich z serwera na serwer, uważaniem na kolizje identyfikatorów i niedopasowane identyfikatory, a także nie jestem pewien, jak SQL Server zachowałby się z 20 milionami wierszy w sys.server_principals. Ponadto Twoja aplikacja internetowa prawdopodobnie będzie chciała połączyć się jako pojedynczy lub bardzo mała liczba użytkowników. Usługi IIS nie mogą pulować połączeń, chyba że ich ciągi DSN są identyczne. Jednym z atrybutów ciągu DSN jest nazwa użytkownika. Różni użytkownicy oznaczają brak puli.
Będziesz musiał stworzyć własny schemat poświadczeń użytkownika. Musi być w stanie dowiedzieć się, do którego dzierżawy należy użytkownik, a następnie kod internetowy będzie musiał wybrać odpowiednią bazę danych. To, że metadane użytkownika są krytyczne, będą musiały gdzieś być przechowywane, będą musiały być klastrowane lub dublowane, będą musiały być szybkie i będą musiały być dobrze chronione (z punktu widzenia bezpieczeństwa. IOW, szyfruj.). Zakładając, że SQL jest tu nawet dobrym pomysłem, trzymałbym tę bazę danych z dala od instancji dzierżawców serwerów. Pomaga to z punktu widzenia bezpieczeństwa i z punktu widzenia ładowania, choć zgaduję, że po zatwierdzeniu użytkowników i skierowaniu aplikacji internetowej do poprawnej bazy danych w innej instancji nie będzie więcej zapytań dotyczących metadanych tego użytkownika związanych z tym użytkownik.
Szybkie pytanie: czy dwóch różnych użytkowników należących do dwóch różnych najemców powinno mieć taką samą nazwę użytkownika?
Kolejne szybkie pytanie: jeśli powiem ci, że pracuję dla FuBar, Inc., skąd to wiesz? Czy FuBar dostarczy ci listę użytkowników, a ty zwrócisz im listę nazwisk użytkowników, czy też zamierzają samodzielnie się zaopatrywać?
Będziesz musiał przejść do wielu instancji. Jeśli nawet niewielka część tych użytkowników zdecyduje się na natychmiastowe uruchomienie aplikacji, jedna instancja stopi się. Nie będzie mieć wystarczającej liczby wątków roboczych, aby uruchomić wszystkie te żądania naraz. Jeśli tylko 1000 użytkowników uderzy w Twoje wystąpienie w tym samym czasie, prawdopodobnie zabraknie wątków roboczych, a żądanie zacznie się gromadzić i czekać. Widziałem, jak to się dzieje; najbliższym objawem jest to, że nowe połączenia nie będą mogły zalogować się do instancji, ponieważ nie ma dostępnych wątków roboczych do ich obsługi. Jeśli jest to bardzo krótkotrwałe zachowanie, aplikacja może przetrwać. Jeśli nie, lub Twoja aplikacja jest wybredna, użytkownicy otrzymają błędy.
Nawet jeśli nie będziesz mieć wielu najemców, powinieneś zacząć myśleć o przyszłości i automatyzacji, ponieważ gdy zobaczysz, że twój serwer jest zawieszony i jest 10 nowych najemców do wprowadzenia do Internetu, jest o wiele za późno, a twoje usługi (i Twoi klienci i Twoi przyszli klienci będą cierpieć, dopóki nie rozwiążesz problemu.
Będziesz potrzebować sposobu na przenoszenie baz danych, od przeciążonych serwerów do lekko obciążonych (lub nowych) serwerów. To, czy możesz uzyskać okno przestoju, będzie zależeć od Twojej umowy SLA.
Czy udostępniasz konkretną aplikację, taką jak SalesForce, czy te bazy danych to tylko kontenery na wszystko, co chcą najemcy?
Jak duże są bazy danych? Jeśli nie są bardzo duże, możesz po prostu przywrócić z pliku kopii zapasowej, który zawiera szablon. (Nie różni się to znacznie od tego, co robi baza danych modelu, ale nie widziałem, aby ktoś naprawdę dobrze korzystał z modelu od czasów, gdy korzystałem z SQL 6.5.) Po przywróceniu szablonu do nowej nazwy bazy danych, możesz następnie dostosuj nową bazę danych do potrzeb konkretnego najemcy. Oczywiście nie można dokonać personalizacji przed wynajęciem najemcy. Jeśli baza danych jest duża, możesz wykonać tę samą podstawową procedurę, chyba że przywrócisz wcześniej, zanim jakikolwiek nowy najemca zajmie miejsce. Możesz przechowywać kilka takich baz danych, może jedną na instancję. Jeśli trzymasz ich zbyt wiele, może to zmusić Cię do zakupu większej ilości sprzętu i / lub pamięci masowej niż potrzebujesz,
Jeśli to Twoja aplikacja, jak zamierzasz obsługiwać aktualizacje schematów? Jak zamierzasz utrzymywać wersje bazy danych prosto z wersjami kodu, jeśli używasz jednego adresu URL, który dostaje się do Twojej aplikacji internetowej?
Jak wykrywać i niszczyć bazy danych, które nie są już używane? Czy czekasz, aż twoja grupa A / R powie, że ktoś nie zapłacił rachunku przez trzy miesiące?
Jeśli dzierżawcy zarządzają uprawnieniami, oznacza to, że rozumieją wewnętrzne działanie aplikacji lub że aplikacja ma bardzo prostą strukturę ról. Korzystając z czegoś takiego jak Blogger jako przykładu, użytkownicy mogą (czytać posty), (czytać posty i komentować), (... i tworzyć posty), (... i edytować posty innych), (... i mogą resetować hasła innych użytkowników) lub (... i cokolwiek). Posiadanie roli dla każdego z tych różnych zestawów praw i przypisywanie użytkownika do jednej lub innej roli nie powinno być zbyt trudne, ale nie chcesz, aby aplikacja uruchamiała instrukcje „GRANT”. Uważaj na role, które mają hierarchię i zależą od dziedziczenia, może to być mylące. Jeśli promujesz lub degradujesz użytkownika, powiedziałbym, że wyciągnij go ze wszystkich powiązanych ról, a następnie dodaj z powrotem do jednej roli, której potrzebują. O,
Myślę, że tylko podrapałem tutaj powierzchnię, a ten post jest już za długi. To, czego naprawdę potrzebujesz, to książka lub przynajmniej dokument od kogoś, kto to zrobił. Większość z nich nie będzie mówić, jeśli uznają to za przewagę konkurencyjną.