首页 文章

负载均衡R请求到RServe

提问于
浏览
9

我有6个Linux盒子运行RServe并提供相同的R脚本集 .

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

我使用REngine(Rserve Java Client)从java连接到这些Rserve .

RConnection rServeConnection = new RConnection(R_SERVE_SERVER_ADDRESS, R_SERVE_SERVER_PORT);

现在我如何对此进行负载均衡?最好在Apache Mod Proxy中?

我试过httpd websocket负载均衡设置,没有运气 .

更新:结论httpd不会 balancer TCP流量(Rserve使用TCP,而Rserve中有选项可以启用websocket模式,我的用例不需要额外的层) . 已转移到HAProxy以使用config进行负载 balancer ,如下面的链接所示,并且可以通过容错来加载 balancer R脚本请求 .

HAProxy Loadbalancing TCP traffic

3 回答

  • 0

    我不确定这是否可以通过Apache mod_proxy实现 . 我认为它只适用于HTTP协议 . 也许您可以尝试使用nginx进行概念验证设置 . 它支持普通TCP和UDP连接的负载 balancer . 它还允许您定义负载 balancer 方法(例如循环法等) .

    配置将是:

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

    您可以在nginx文档中找到更多信息:https://www.nginx.com/resources/admin-guide/tcp-load-balancing/,此处:https://nginx.org/en/docs/stream/ngx_stream_core_module.html

  • 0

    如果您还没有这样做,并且因为您已经在使用Java,那么首先从Java连接到您的RServe服务器并在它们上运行一个简单的"hello world"脚本,如CRAN examples中所示 .

    一旦RServe实例正常工作,那么您需要从Java进行负载均衡或为每个服务器创建一个Java程序,并让Apache在它们之间进行负载 balancer . 在任何一种情况下,您的Java程序都需要提供http,因为您仍需要html和RServe之间的链接 .

  • 1

    看起来更多人正在寻找负载 balancer R脚本的解决方案 . 这是通过Rserve和HAproxy TCP负载均衡器对loadbalance R进行工作的解决方案 .

    Thumps up if it helps.

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

相关问题