2012-01-18 13 views
15

Próbuję określić sposób ładowania salda ruchu TCP. Rozumiem, jak działa równoważenie obciążenia HTTP, ponieważ jest to prosta architektura typu Request/Response. Jednak nie jestem pewien, jak załadować bilans ruchu TCP, gdy twoje serwery próbują zapisywać dane do innych klientów. Dołączyłem obraz przepływu pracy dla prostego serwera czatu TCP, w którym chcemy zrównoważyć ruch na serwerach aplikacji N. Czy są jakieś narzędzia równoważenia obciążenia, które mogą zrobić to, co próbuję zrobić, czy muszę zbadać inny temat? Dzięki.Jak ładować saldo ruchu TCP?

enter image description here

+1

Równoważenie obciążenia w układzie równoległym, takim jak prezentujesz, ma pewne problemy, jak zauważyłeś. Zamiast tego pobierz IRC dla przykładu, który ma układ drzewa (to pomaga w synchronizacji i upraszcza dostarczanie wiadomości do wszystkich), a masa danych przechodząca przez drzewo to nie wszystko, według np. freenode ops, pomimo blisko 80 tysięcy użytkowników. –

Odpowiedz

14

Po pierwsze, twój schemat zakłada, że ​​równoważenia obciążenia działa jako (TCP) pełnomocnika, co nie zawsze jest prawdą. Często stosuje się Direct Routing (lub Direct Server Return) lub wykonuje się Destination NAT. W obu przypadkach połączenie między serwerem zaplecza a klientem jest bezpośrednie. Tak więc w tym przypadku jest to zasadniczo uzgadnianie TCP, które jest rozprowadzane między serwerami zaplecza. Zobacz następujące po więcej informacji:

Oczywiście proxy TCP istnieją (HAProxy jest jeden), w którym to przypadku proxy zarządza obie strony connecton, więc aplikację musiałby być w stanie zidentyfikować klienta przy pomocy przychodzącego adresu IP/portu (który mógłby pochodzić z serwera proxy, a nie z klienta). Proxy będzie obsługiwać otrzymywanie wiadomości z powrotem do klienta.

Tak czy inaczej, sprowadza się do projektowania aplikacji, ponieważ wyobrażam sobie, że trudnym bitem jest posiadanie wspólnego magazynu sesji (bazy danych jakiegoś rodzaju lub klucza => magazynu wartości, takiego jak Redis), tak, że gdy twój serwer aplikacji mówi: "Chcę wysłać wiadomość do Franka", może określić, do którego serwera zaplecza jest podłączony Frank (z DB), i zasygnalizować serwerowi, aby wysłał wiadomość. Zredukujesz problem połączeń (od tego samego klienta) przemieszczających się po różnych serwerach zaplecza przez stałe połączenia (mogą to zrobić wszystkie moduły równoważenia obciążenia) lub przez użycie czegoś stałego z natury jak websocket.

Jest to prawdopodobnie duże uproszczenie, ponieważ nie mam doświadczenia z oprogramowaniem do czatów. Oczywiście same serwery DB mogą być rozproszone na kilka maszyn, dla odporności na błędy i równoważenia obciążenia.

+0

Dzięki za odpowiedź informacyjną. Będę musiał przejrzeć te tematy, aby zrozumieć więcej. Czy znasz jakieś dobre zasoby, aby dowiedzieć się więcej o równoważeniu obciążenia? Dzięki! –