java - 用于同步 RPC 调用的 JGroups 协议
问题描述
我们约 50 个成员的集群使用 JGroups 进行 1-2-1 RPC 调用(同步)。
一天内拨打数以万计的电话,在 10 毫秒到 1 小时的范围内完成。请求和响应大小范围为 0 到 100 MB。
我们的主机分散在不同的数据中心,因此使用 TCP。
没有多播消息,只有同步 RPC 调用。
来自 conf/tcp.xml 的所有协议都应该与最新的 JGroups 版本一起使用吗?有什么比 TCP Like TCP_NIO 更好的吗?
解决方案
在 10 毫秒到 1 小时的范围内完成。
如果 RPC 可能需要长达 1 小时,我认为同步RPC 不是可行的方法;我宁愿建议切换到异步...或者,您可以调用返回 CompletableFuture 的 RPC,只要调用完成,就会调用其函数。这样做的好处是您不会阻塞池中的线程......
我会开始tcp.xml
并根据需要进行更改。例如,将 max_threads 变量增加到 50,以同时容纳所有 50 个成员 sendind。
另外,请考虑使用常规 RPC 还是 OOB RPC:除非您需要订购,否则 OOB RPC 可以并行交付,而常规 RPC(由同一发件人)则一个接一个地交付。
如果您不需要状态转移,请删除BARRIER
和STATE_TRANSFER
.
我建议编写一个简单的性能测试(或使用 UPerf)并测量性能是否合适。我也会用来probe.sh
看看统计数据。
你可以在 JGroups 中调整很多东西,在这里列出所有措施会花费太长时间......
推荐阅读
- android - FloatingActionButton 立即隐藏
- javascript - 如何在 javascript/jquery 中暂停音频?
- flutter - 如何在本地存储数据并在 FLUTTER 的输入编辑字段中显示和编辑?
- rust - 如何使用组合器(for_each 除外)在 Rust 中运行流以完成并且没有 while 循环?
- docker - Blazor WebAssembly 应用程序的运行 docker 映像问题
- python - 单击 QSystemTrayIcon 时有没有办法执行函数?
- botframework - 以编程方式将机器人添加到我的机器人列表中
- android - 在 Android 中的画布上绘制转换位图时性能缓慢
- flutter - 如何使用 Flutter 测试驱动程序从进度对话框中获取文本
- amazon-web-services - Codebuild 在 DOWNLOAD_SOURCE 阶段突然失败:SINGLE_BUILD_CONTAINER_DEAD