2016-07-20 70 views
9

Mam 6 Linux box działa RServe i obsługujących ten sam zestaw R Scripts.Równoważenie obciążenia R żądania nadchodzi do RServe

192.168.0.1 : 6311 
192.168.0.2 : 6311 
... 
... 
192.168.0.6 : 6311 

Łączę się z Java do tych Rserve za pomocą REngine (Rserve Java Client).

RConnection rServeConnection = new RConnection(R_SERVE_SERVER_ADDRESS, R_SERVE_SERVER_PORT); 

Jak mogę teraz załadować saldo? Najlepiej w Apache Mod Proxy?

Próbowałem już z ustawieniami równoważenia obciążenia httpd websocket i bez powodzenia.

Aktualizacja: Zawarty httpd nie ładuje salda ruchu TCP (Rserve używa TCP, podczas gdy istnieją opcje w Rserve, aby włączyć tryb websocket, mój przypadek użycia nie potrzebuje tej dodatkowej warstwy). Przeniesiono do HAProxy dla równoważenia obciążenia z konfiguracją jak w poniższym linku i można ładować żądania skryptu R przychodzące do Rserve z tolerancją błędu.

HAProxy Loadbalancing TCP traffic

+0

Nie sądzę rserve jest http? – Jeroen

+0

yes .. Rserve nie jest http. Łączy się przez gniazdo TCP/IP. IP: 6311 @jeroen – Anand

+1

Wygląda na to, że więcej osób szuka tego samego rozwiązania. Oto działające rozwiązanie. Uderza, jeśli to pomaga. http://stackoverflow.com/a/39052040/1057093 – Anand

Odpowiedz

0

wygląda więcej ludzi szuka rozwiązania w celu równoważenia obciążenia R skrypty. Oto działające rozwiązanie do loadbalance R dzięki mechanizmowi równoważenia obciążenia Rserve i HAproxy TCP.

Uderza, jeśli to pomaga.

https://stackoverflow.com/a/39052040/1057093

0

Jeżeli nie zostało to zrobione, a skoro już pracują w Javie, zacząć od podłączenia do serwerów RServe z Java i uruchomić prosty „Hello World” skrypt na nich, jak podano W przypadku, gdy instancje RServe działają poprawnie, musisz albo wyrównać balans z Javy, albo utworzyć jeden program Java na serwer i pozwolić serwerowi Apache na wyrównywanie obciążenia między nimi. Powrót na górę W obu przypadkach twoje programy Java będą musiały obsłużyć http, ponieważ nadal potrzebujesz łącza między html i RServe.

+0

Łączenie z Java do Reserve nawet w przypadku złożonego typu żądania/odpowiedzi, nawet jeśli połączenie zdalne. Trzeba tylko wiedzieć, dlaczego równoważenie obciążenia sieciowego nie działa. Nie preferując rezerwy połączonej przez HTTP, ponieważ apache będzie wysyłał żądanie do java, dopóki odpowiada java/tomcat, nawet jeśli rezerwowanie za tym nie jest. Ponadto dodaje dodatkowy skok, aby osiągnąć R. Dlaczego nie websockt load balancing bezpośrednio? Czy możesz podzielić się swoimi pomysłami na ten temat? – Anand

+0

Mam na myśli, dlaczego nie załadować salda bezpośrednio do gniazda TCP/IP, bez potrzeby równoważenia obciążenia HTTP, które dodaje dodatkowy skok i ryzyko punktu awarii. – Anand

+0

Jeśli chcesz połączyć się bezpośrednio z instancjami Rserve'a, musisz przekopać kod źródłowy dla Rserve - lub jednego z dostępnych adapterów - i znaleźć protokół on-the-wire. Co właściwie dzieje się z przewodem, gdy wykonujesz a: 'RConnection c = new RConnection(); c.assign ("x", dataX); c.assign ("y", dataY); RList l = c.eval ("lowess (x, y)"). AsList(); 'Jeśli używasz jednego z istniejących adapterów (Java, C/C++, PHP), nie musisz się martwić o włączone -the-wire format. –

1

Nie jestem pewien, czy można to osiągnąć dzięki Apache mod_proxy. Myślę, że będzie działać tylko z protokołem HTTP. Być może możesz wypróbować konfigurację proof of concept z nginx. Obsługuje równoważenie obciążenia zwykłych połączeń TCP i UDP. Pozwala także na zdefiniowanie sposobu równoważenia obciążenia (np. Round-robin itp.).

Konfiguracja byłoby:

stream { 
    upstream myapp1 { 
     server 192.168.0.1:6311; 
     server 192.168.0.2:6311; 
     ... 
     server 192.168.0.6:6311; 
    } 

    server { 
     listen 80; 
     proxy_connect_timeout 1s; 
     proxy_timeout 3s; 
     proxy_pass backend; 
    } 
} 

można znaleźć więcej informacji w dokumentacji nginx: https://www.nginx.com/resources/admin-guide/tcp-load-balancing/ i tutaj: https://nginx.org/en/docs/stream/ngx_stream_core_module.html

+0

Równoważenie obciążenia TCP jest dodawane w Nginx od wersji 1.9, a ja mam opcję korzystania tylko z wersji 1.6.3 (ograniczenie repozytorium dla przedsiębiorstw). Więc patrząc na HAproxy (1.5.14) jako alternatywny serwer proxy odwrotnego TCP. Jeszcze znaleźć podstawową konfigurację, która może załadować równowagę ruchu TCP. Nie znajdując dobrej dokumentacji na tym samym. Wszelkie dane wejściowe na ten temat będą naprawdę pomocne. – Anand

+0

Każdy pomysł co jest nie tak z równoważeniem obciążenia TCP z HAProxy? – Anand

+1

Chociaż nie mogłem tego wypróbować ze względu na ograniczenie wersji Nginx, które nie obsługiwało wyrównywania obciążenia TCP, które jest potrzebne dla Rserve, zrobiłem to samo z innym serwerem proxy, o którym mowa w odnośniku w mojej odpowiedzi. Tak więc przekazuje ci nagrodę @addr. Thums up i dziękuję za pomoc. – Anand