我们大约有50个成员的集群使用JGroup进行1-2-1 RPC调用(同步)。
一天内发生数以万计的呼叫,这些呼叫在10毫秒至1个小时的范围内完成。请求和响应的大小范围是0到100 MB。
我们的主机分散在不同的数据中心,因此使用TCP。
没有没有多播消息,只有同步RPC调用。
最新的JGroups版本应使用conf / tcp.xml中的所有协议是什么? 有什么比TCP像TCP_NIO更好的了吗?
答案 0 :(得分:1)
完成时间为10毫秒至1个小时。
如果一个RPC可能需要长达1个小时,那么我认为同步 RPC并不是可行的方法。我宁愿建议切换到异步方法...或者,您可以调用RPC,这些RPC返回CompletableFuture,只要调用完成,该函数就会被调用。这样做的好处是您不会阻塞池中的线程...
我将从tcp.xml
开始,并根据需要进行更改。例如。将max_threads变量增加到50,以同时容纳所有50个成员sendind。
还要考虑使用常规RPC还是OOB RPC:除非需要订购,否则OOB RPC可以并行交付,而常规RPC(由同一发送者)则是一对一交付。
如果不需要状态转移,请删除BARRIER
和STATE_TRANSFER
。
我建议编写一个简单的性能测试(或使用UPerf)并测量性能是否合适。我还可以使用probe.sh
来查看统计信息。
您可以在JGroups中调整很多东西,在这里列出所有度量值可能花费太长时间...