Wiem, że to stary wątek, ale jest to ta sama struktura, którą stosowaliśmy w ciągu ostatnich 2 lat i obecnie uruchamiamy 1768 baz danych na 3 serwerach.
mamy następujący setup (nieuwzględnione lustra i tak dalej): Serwery gospodarskich
- 2 internetowych i 4 serwerów treści
instancja
- SQL tylko na głównej bazy danych klientów, która jest odpytywany, gdy uzyskać dostęp do strony internetowej za pomocą identyfikatora, aby uzyskać serwer/instancję i nazwę bazy danych, na której znajdują się ich dane. To jest następnie przechowywane w bilecie uwierzytelniania.
- 3 Serwery SQL do obsługi baz danych klientów z rozkładaniem obciążenia podczas tworzenia w oparciu o aktualną całkowitą liczbę uczniów, które istnieją we wszystkich bazach danych na każdym serwerze (szybko obliczane przez pole numeru licencji w głównej bazie danych).
- Na każdym serwerze SQL istnieje mniejsza konfiguracja głównej bazy danych, która zawiera współdzielone dane statyczne, które są używane przez wszystkich klientów, umożliwiając w ten sposób mniejsze bazy danych klientów i szybszą aktualizację zawartości.
Najważniejszą rzeczą, o której mowa powyżej, jest synchronizacja struktur bazy danych! Do tego doszedłem do programowania małej wersji Windows .NET, która wyszukuje wszystkich klientów w głównej bazie danych i wklejasz kod do wykonania, a następnie przejdzie przez proces pobierania bazy danych i wykonania SQL.
Tworzenie nowych klientów również powodowało dla nas pewne problemy, więc zakończyłem programowanie systemu zarządzania dla naszych sprzedawców i stworzyłem nową bazę danych opartą na kopii zapasowej nieaktywnej "pustej" bazy danych, dlatego mamy najnowszą DB bez potrzeby ponownego skryptowania całego skryptu tworzenia bazy danych. Następnie wstawia dane klienta do głównej bazy danych z lokalizacją, w której utworzono bazę danych, i przeprowadza migrację starych danych ze starej wersji naszego oprogramowania. Wszystko to odbywa się na osobnej instancji przed przeniesieniem, zmniejszając w ten sposób wszelkie blokady SQL.
Przechodzimy teraz do pojedynczej bazy danych dla naszej kolejnej wersji oprogramowania, ponieważ redundancja bazy danych jest prawie niemożliwa w przypadku tak wielu baz danych! Jest to ogromna rzecz, którą należy wziąć pod uwagę, ponieważ SQL tworzy kilka zadań oczekujących, które odzwierciedlają dane w bazie danych, po rozpoczęciu mnożenia baz danych, które wymykają się spod kontroli, a system niemal wyłącznie ma za zadanie synchronizację i może się zablokować ze względu na ścinanie. Liczba wątków. Patrz strona 30 dokumentu poniżej Microsoft:
SQLCAT's Guide to High Availability Disaster Recovery.pdf
Mam jednak mieć wątpliwości, przeniósł się do jednej bazy danych, z powodu pewnych obaw, jak wspomniano powyżej, takie jak stale sprawdzając w każdej procedurze, że obecny klient ma dostęp tylko do ich danych, a także rzeczy podobne do jednego małego problemu będą teraz dotyczyć każdej pojedynczej bazy danych, takiej jak indeksowanie tabel i tak dalej.Również z chwilą, gdy nasz klient jest rozłożony na 3 serwery, ale pojedyncza baza danych będzie oznaczać, że mamy redundancję, ale jeśli błąd był w bazie danych, a nie na serwerze, to każdy klient traci, a nie tylko 1 bazę danych klientów.
Podsumowując, zależy to od tego, co robisz i jeśli chcesz uzyskać nadmiarowość; dla mnie redundancja jest teraz kluczowa i wszystko inne w idealnym świecie nie powinno się zdarzyć (np. błąd, który powoduje błędy w bazie danych dla wszystkich). Zaczynaliśmy od oczekiwania setki lub więcej, aby przejść do systemu ze starego, hostowanego oprogramowania, które szybko zmieniło się w 200,500,1000,1500 ... Mamy obecnie ponad 750 000 użytkowników korzystających z naszego systemu każdego roku, aw sierpniu/wrześniu mieć ponad 15 000 jednoczesnych użytkowników online (spodziewając się w tym roku 20 000 trafień).
nadzieję, że to jest pomocne dla kogoś wzdłuż linii :-)
Pozdrawiam
Liam
Zastanawiam podobną konfigurację dla hosted aplikacji mamy obecnie rozwijających się, więc każdy prawdziwe historie wojenne byłyby bardzo mile widziane :) – elo80ka
Do tej pory pomysł sprawdził się bardzo dobrze, ale wymaga wielu narzędzi do obsługi. Na przykład mamy aplikację admin do tworzenia nowych stron oraz narzędzie do importu/eksportu, aby przenosić klientów z jednego serwera na drugi. Przenoszenie było głównie do debugowania, ale w przyszłości planujemy mieć dwa serwery prod, które wykorzystamy do zrównoważenia obciążenia. – Frank
Innym doskonałym efektem ubocznym oddzielnych baz danych dla każdego klienta jest to, że zmusza on do zaprojektowania resetowalnego środowiska, w którym można szybko utworzyć nowe wystąpienie aplikacji i przeprowadzić testy jednostkowe/ręczne przeciwko niemu. – Frank