同步RPC调用的JGroups协议

时间:2018-08-17 10:58:55

标签: java cluster-computing rpc jgroups

我们大约有50个成员的集群使用JGroup进行1-2-1 RPC调用(同步)。

一天内发生数以万计的呼叫,这些呼叫在10毫秒至1个小时的范围内完成。请求和响应的大小范围是0到100 MB。

我们的主机分散在不同的数据中心,因此使用TCP。

没有没有多播消息,只有同步RPC调用。

最新的JGroups版本应使用conf / tcp.xml中的所有协议是什么? 有什么比TCP像TCP_NIO更好的了吗?

1 个答案:

答案 0 :(得分:1)

  

完成时间为10毫秒至1个小时。

如果一个RPC可能需要长达1个小时,那么我认为同步 RPC并不是可行的方法。我宁愿建议切换到异步方法...或者,您可以调用RPC,这些RPC返回CompletableFuture,只要调用完成,该函数就会被调用。这样做的好处是您不会阻塞池中的线程...

我将从tcp.xml开始,并根据需要进行更改。例如。将max_threads变量增加到50,以同时容纳所有50个成员sendind。

还要考虑使用常规RPC还是OOB RPC:除非需要订购,否则OOB RPC可以并行交付,而常规RPC(由同一发送者)则是一对一交付。

如果不需要状态转移,请删除BARRIERSTATE_TRANSFER

我建议编写一个简单的性能测试(或使用UPerf)并测量性能是否合适。我还可以使用probe.sh来查看统计信息。

您可以在JGroups中调整很多东西,在这里列出所有度量值可能花费太长时间...

[1] http://www.jgroups.org/manual4/index.html#RpcDispatcher