Zarządzanie obciążeniem serwerów

0

Chcę stworzyć sieć składającą się z jednego serwera głównego, który będzie wpięty na adresie jakas_domena.pl oraz będzie wyświetlać ekran logowania dla użytkowników(strona www napisana w java). Po udanym logowaniu chciałbym żeby ten użytkownik został skierowany do innego serwera, który zostanie mu przydzielony w sposób niewidoczny dla niego. Czyli użytkownik ma widzieć nadal jakas_domena.pl ale działać od momentu zalogowania na innym serwerze. Dodatkowo chce żeby ten pierwszy serwer umożliwiał dynamiczne dodawanie nowych użytkowników.
Problemem jest tutaj, przekierowywanie zalogowanego użytkownika (protokół https) na bazie jego loginu oraz jak z organizować bazę danych tak żeby można było pobrać informacje o wybranym użytkowniku z poziomu każdego serwera? Jeżeli użyje jednej bazy to ryzykuje zwolnienie działania aplikacji. Jeden z moich pomysłów zakłada że na każdym serwerze jest baza danych dla jakiejś puli użytkowników z X wszystkich zarejestrowanych. W tym momencie pierwszy serwer będzie przekierowywać użytkownika do serwera na którym znajdują się informacje o użytkowniku, ale w tym przypadku pytanie jeszcze gdzie trzymać część wspólną bazy danych(każdy serwer musi aktualizować te dane podczas wykonywania requestu)

0

Takie rzeczy to chyba w innej warstwie się obsługuje (klaster, load balancing) - są do tego gotowe rozwiązania. Tyle że to dotyczy serwera aplikacji. Nie ma potrzeby rozdzielania bazy danych na wiele silników. Całe systemy bankowe stoją na jednej bazie i dają radę (tzn. nie dzieli się danych w pojedynczej tabeli na rózne instancje bazy), więc nie będziesz miał z tym problemu (o ile użyjesz odpowiedniej bazy, np. oracle, no i dobrze ją zaprojektujesz).

0

Do rozbicia bazy na kilka serwerów możesz użyć "sharding".

Lista baz które to wspierają:
http://en.wikipedia.org/wiki/Shard_%28database_architecture%29

Ale można to zrobić w każdej bazie - bardziej zależy to od serwera aplikacji.
Rozbicie baz można zrobić na dwa sposoby:
a) logicznie - różne tabele na różnych serwerach
b) równomiernie (horyzontalnie) - różne rekordy tej samej tabeli na różnych serwerach

Więcej o tym:
http://social.technet.microsoft.com/wiki/contents/articles/1926.how-to-shard-with-windows-azure-sql-database.aspx
http://www.codefutures.com/database-sharding/
http://www.scalebase.com/products/database-sharding/

Co do rozbicia serwerów aplikacji to niewiele wiem jeśli chodzi o samą Javę, ale wiem że ogólnie stosuje się Varnish.
Można też użyć "reverse proxy" w celu przyspieszenia aplikacji.

Java po stronie serwera AFAIK może działać w różnych trybach - JSP/JSF, JEE. Od tego pewnie zależy sposób dystrybucji pracy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1