用于同步 RPC 调用的 JGroups 协议

JGroups protocols for synchronous RPC calls

我们约 50 名成员的集群使用 JGroups 进行 1-2-1 RPC 调用(同步)。

一天调用数万次,完成时间在10毫秒到1小时不等。请求和响应大小范围为 0 到 100 MB。

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

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

conf/tcp.xml 中的哪些协议应该与最新的 JGroups 版本一起使用? 有什么比 TCP Like TCP_NIO 更好的吗?

which complete in the range of 10 ms to 1 hour.

如果一个 RPC 最多需要 1 小时,我认为 同步 RPC 不是可行的方法;我宁愿建议切换到异步的...或者,您可以调用 return CompletableFuture 的 RPC,只要调用完成就会调用其函数。这样做的好处是您不会阻塞池中的线程...

我会从 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