Duże aplikacje i load balancing, Czyli co i jak zrobic jak maszyna nie daje rady |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Duże aplikacje i load balancing, Czyli co i jak zrobic jak maszyna nie daje rady |
2.08.2008, 18:53:14
Post
#1
|
|
Admin Techniczny Grupa: Administratorzy Postów: 2 071 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn |
Temat założony na prośbę SHIPa oraz normanosa traktujący o rozkładaniu obciążenia na wiele maszyn
|
|
|
5.08.2008, 22:08:59
Post
#2
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 12 Dołączył: 3.03.2008 Skąd: łódzkie Ostrzeżenie: (0%) |
Witam, specjalnie doświadczony nie jestem, ale tak myśląc nad tym problemem wyszło mi co nie co, nie wiem, może to głupie, ale może ktoś lepsiejszy i bardziej doświadczony podchwyci myśl, albo spojrzy na problem podobnie do mnie.
Otóż, przy pierwszym wejściu na stronę jest to nie ważne na jaki serwer trafimy, i z reguły trafiamy na najmniej obciążony zgodnie z algorytmem loadbalancingu. Następne wejścia jednak powinny już trafić do tego pierwszego serwera. Skoro serwery się zmieniają losowo to jedynym sposobem na zachowanie informacji który serwer był pierwszy jest... ciastko na maszynie klienta z jakimś id, po którym aplikacja na każdym z serwerów rozpozna ten pierwszy serwer i na niego przekieruje żądanie? Mankament to userzy nie akceptujący ciastek, ale wtedy może jakaś zmienna doklejana do url'a ? Decyzje o przekierowaniu podejmuje najmniej obciążony serwer, więc OK. Podobne to chyba do rozwiązań z wspólną DB, gdzie była by tabela z polem w którym jest hash z jakichś stałych parametrów klienta (IP, przeglądarka, OS, ?) i znowu aplikacja na samym wstępie zawsze musiała by sprawdzać czy taki hash już istnieje i jeśli tak to odczytać serwer dla niego i tam przekierować. Pytanie tylko czy takie sprawdzania i przekierowania same w sobie nie są już wystarczająco wolne ? No i w sumie to nie wiem jak miała by wyglądać implementacja takiego przekierowania w PHP (tutaj się objawia mój brak doświadczenia) :/ Bo tak, jak mamy żądanie, jakiś URL, trafiamy z nim do aplikacji na jakiś serwer. Wykonuje się skrypt PHP i jak z tego skryptu PHP przekierować... pod ten sam URL na inną maszynę tylko (DNSy, IP, wykorzystanie exec()?) Może na zasadzie, że każdy z tych kilku serwerów ma swoją subdomenę skonfigurowaną tak samo jak jedna główna domena i wtedy aplikacja przekierowywała by za pomocą subdomen, a żądanie jak już by trafiło na serwer to za pomocą mod_rewrite było by przepisywane na główną domenę? No nic, tak czy siak według mnie najlepszym miejscem na przechowanie informacji co do pierwszego serwera jest klient (bądź jego stałe dane), bo to klient jest stały, a serwery się zmieniają. -------------------- "Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! | Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!! |
|
|
6.08.2008, 07:56:52
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 18.07.2007 Ostrzeżenie: (0%) |
Otóż, przy pierwszym wejściu na stronę jest to nie ważne na jaki serwer trafimy, i z reguły trafiamy na najmniej obciążony zgodnie z algorytmem loadbalancingu. Następne wejścia jednak powinny już trafić do tego pierwszego serwera. Zaawansowane load balancery za dużo $$$ mają takie możliwości. Skoro serwery się zmieniają losowo to jedynym sposobem na zachowanie informacji który serwer był pierwszy jest... ciastko na maszynie klienta z jakimś id, po którym aplikacja na każdym z serwerów rozpozna ten pierwszy serwer i na niego przekieruje żądanie? Mankament to userzy nie akceptujący ciastek, ale wtedy może jakaś zmienna doklejana do url'a ? .... Wydaje mi się, że podstawowe założenie jest błędne, bo zakładasz, że każdy request dotrze do PHP, co nie jest prawdą. Podstawą zmiejszania obciążenia serwerów jest cache i duże wartości dla nagłówków Expires. No i, tak jak wspomniałeś, pojawia się duży problem z ruchem wewnętrznym (bo przekierowanie header-location powoduje, że znowu pakiety przejdą przez load balancer, co może oznaczać, że potrzebujemy 100 requestów, żeby trafić na właściwy serwer :-) ). |
|
|
6.08.2008, 08:51:23
Post
#4
|
|
Grupa: Zarejestrowani Postów: 149 Pomógł: 12 Dołączył: 3.03.2008 Skąd: łódzkie Ostrzeżenie: (0%) |
Zaawansowane load balancery za dużo $ mają takie możliwości. Tak, wczoraj przed snem wziąłem się za lekturę Twoich wpisów na blogu, dobrnołem do części 3 i zaraz jadę dalej Żałuję, że udzieliłem się w tym wątku przed przeczytaniem Wydaje mi się, że podstawowe założenie jest błędne, bo zakładasz, że każdy request dotrze do PHP, co nie jest prawdą. Podstawą zmiejszania obciążenia serwerów jest cache i duże wartości dla nagłówków Expires. No i, tak jak wspomniałeś, pojawia się duży problem z ruchem wewnętrznym (bo przekierowanie header-location powoduje, że znowu pakiety przejdą przez load balancer, co może oznaczać, że potrzebujemy 100 requestów, żeby trafić na właściwy serwer :-) ). Innymi requestami jak PHPowe to chyba nie trzeba się tak przejmować ? Wszak request o statyczny zasób, grafikę nie uruchamia całej logiki PHP dającej narzut parsera PHP i z reguły narzut łączenia się z bazą i mielenia przez nią. Nie mniej oczywiście, że skoro są narzędzia to lepiej je wykorzystać i tak chyba w jednym z Twoich wpisów jest link do podstawowej konfiguracji mod_cache Apacha, ciekawe to ciekawe. A jeśli chodzi o ruch wewnętrzny to napisałem, że header-locatiowanie miało by operować na subdomenach, które były by unikalne dla każdego z serwerów, a mod_rewrite docelowego serwera spowrotem przepisywał by na główną domenę. A więc load balancer musiał by reagować tylko przy requeście z główną domeną, a requesty subdomenowe wymuszone przez przekierowanie header-location powinny już trafiać zgodnie z adresem, bez load balancowania. Ale z racji swojego małego doświadczenia nie wiem czy tak się da i może głupoty piszę -------------------- "Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! | Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!! |
|
|
Wersja Lo-Fi | Aktualny czas: 13.05.2024 - 23:03 |