首页 > 解决方案 > 用于同步 RPC 调用的 JGroups 协议

问题描述

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

一天内拨打数以万计的电话,在 10 毫秒到 1 小时的范围内完成。请求和响应大小范围为 0 到 100 MB。

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

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

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

标签: javacluster-computingrpcjgroups

解决方案


在 10 毫秒到 1 小时的范围内完成。

如果 RPC 可能需要长达 1 小时,我认为同步RPC 不是可行的方法;我宁愿建议切换到异步...或者,您可以调用返回 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


推荐阅读