9 votes

Répartition de la charge des demandes R arrivant sur RServe

J'ai 6 boîtes Linux exécutant RServe et servant le même ensemble de R scripts.

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

Je me connecte depuis java à ces Rserve en utilisant REngine (Rserve Java Client).

RConnection rServeConnection = new RConnection(R_SERVE_SERVER_ADDRESS, R_SERVE_SERVER_PORT);

Maintenant, comment puis-je équilibrer la charge ? De préférence dans Apache Mod Proxy ?

J'ai essayé avec les paramètres d'équilibrage de charge de httpd websocket et sans succès.

Mise à jour : Conclu que httpd n'équilibre pas la charge du trafic TCP (Rserve utilise TCP, alors qu'il existe des options dans Rserve pour activer le mode websocket, mon cas d'utilisation n'a pas besoin de cette couche supplémentaire). Déplacé à HAProxy pour l'équilibrage de charge avec la configuration comme dans le lien ci-dessous et capable d'équilibrer la charge R script demandes venant à Rserve avec la tolérance de panne.

HAProxy Équilibrage de charge du trafic TCP

1voto

haddr Points 53

Je ne suis pas sûr que cela soit possible avec le mod_proxy d'Apache. Je pense que cela ne fonctionne qu'avec le protocole HTTP. Peut-être pouvez-vous essayer une configuration de preuve de concept avec nginx. Il prend en charge l'équilibrage de charge des connexions TCP et UDP ordinaires. Il vous permet également de définir des méthodes d'équilibrage de charge (par exemple, round-robin, etc.).

La configuration serait :

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;
    }
}

Vous pouvez trouver plus d'informations dans la documentation de nginx : https://www.nginx.com/resources/admin-guide/tcp-load-balancing/ et ici : https://nginx.org/en/docs/stream/ngx_stream_core_module.html

0voto

Daniel Wisehart Points 1366

Si vous ne l'avez pas encore fait et puisque vous travaillez déjà en Java, commencez par vous connecter à vos serveurs RServe depuis Java et exécutez sur eux un simple script "hello world", comme indiqué dans le fichier Exemples CRAN

Une fois que les instances RServe fonctionnent correctement, vous devez soit équilibrer la charge à partir de Java, soit créer un programme Java par serveur et laisser Apache équilibrer la charge entre eux. Dans les deux cas, vos programmes Java devront servir http car vous avez toujours besoin d'un lien entre html et RServe.

0voto

Anand Points 3108

On dirait que plus de gens cherchent une solution pour équilibrer la charge R scripts. Voici une solution fonctionnelle pour équilibrer la charge de R via Rserve et l'équilibreur de charge TCP HAproxy.

Merci si ça peut aider.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X