Zostałem zlecony w celu utworzenia aplikacji dla wielu dzierżawców. Posiada BLL Java/Glassfish wykorzystujący usługi sieciowe SOAP i backend PostgreSQL. Każdy lokator ma swoją własną bazę danych, więc (w moim przypadku przynajmniej) "multi-tenant" oznacza obsługę wielu baz danych na serwer aplikacji.Wdrażanie wielu dzierżawy dla dojrzałych aplikacji korporacyjnych
Obecny aplikator dla pojedynczego dzierżawcy inicjuje pulę połączeń C3P0 za pomocą ciągu połączenia, który pobiera z pliku konfiguracyjnego. Myślę, że teraz będzie potrzebna jedna pula połączeń na klienta/bazę danych obsługiwaną przez serwer aplikacji.
Po zalogowaniu użytkownika mogę go przypisać do właściwej puli połączeń, sprawdzając jej dzierżawcę. Moim głównym problemem jest to, jak osiągnąć tak daleko - kiedy użytkownik jest po raz pierwszy zalogowany, tabela backendu User
jest sprawdzana, a odpowiedni obiekt User
jest obsługiwany. Wygląda na to, że będę musiał wiedzieć, z której bazy danych korzystać, używając tylko nazwy użytkownika.
Jedyny przyzwoity pomysł to to, że będzie potrzebna baza danych "config" - scentralizowana baza danych do zarządzania informacjami najemców, takimi jak ciągi połączeń. BLL może wysłać do tej bazy danych wystarczającą ilość informacji, aby zainicjować niezbędne pule połączeń. Ale ponieważ mam tylko nazwę użytkownika do pracy, wydaje mi się, że potrzebowałbym również scentralizowanego wyszukiwania nazwy użytkownika, innymi słowy tabeli UserName
z obcym kluczem do tabeli Tenant
.
To tutaj mój plan projektowy zaczyna pachnieć, dając mi wątpliwości. Teraz będę miał informacje o użytkowniku w dwóch oddzielnych bazach danych, które powinny być utrzymywane synchronicznie (dodatki użytkownika, aktualizacje i usuwanie). Ponadto nazwy użytkowników będą musiały być globalnie unikatowe, podczas gdy wcześniej musiały być unikalne na jednego dzierżawcę.
Podejrzewam, że wymyślam nowe koło lub że jest co najmniej lepsza architektura. Nigdy wcześniej tego nie robiłem, nie ma nikogo w moim zespole, stąd nasza ignorancja. Niestety, aplikacja w niewielkim stopniu wykorzystuje istniejące technologie (ORM był na przykład zwijany w domu), więc nasza ścieżka może być trudna.
pytam za:
- Krytyka mojego istniejącego planu projektu oraz sugestie dotyczące poprawy lub przerabianiu architekturę.
- Zalecenia dotyczące istniejących technologii, które stanowią rozwiązanie tego problemu. Mam nadzieję na coś, co można łatwo podłączyć pod koniec gry, choć może to być nierealistyczne. Przeczytałem o jspirit, ale znalazłem mało informacji na ten temat - wszelkie opinie na ten temat lub inne struktury będą pomocne.
AKTUALIZACJA: Rozwiązanie zostało pomyślnie wdrożone i wdrożone i przeszło wstępne testy. Dzięki @mikera za pomocny i pomocny odpowiedź!
+1 Ta odpowiedź jest uspokajająca: baza danych konfiguracji będzie bardzo lekka - jak mówisz, używana tylko podczas inicjowania puli połączeń i wyszukiwania nazwy użytkownika Doskonały punkt dotyczący nocnego zadania wsadowego do czyszczenia/zgłaszania luźnych końców. –