实现 Java 中强大且可扩展的集群 I/O
1. 水库调度算法
1.1 随机选择
从下游水库集合中选择一个信用计数非零的随机流 S。
1.2 彩票算法
- 每次迭代使用轮询方式选择输入流,使用基于彩票的方案选择输出流。
- 该算法为每个输出流维护一个信用计数。每次迭代时,选择一个随机流 S,选择 S 的权重为 w = (cS/C),其中 cS 是流 S 的信用数,C 是所有流的信用数之和。
- 原理是信用数更多的流更有可能被选中,从而自然地在多个流之间平衡带宽。
1.3 确定性水库
数据包根据确定性路由在一个阶段的模块之间发送。确定性水库不进行负载均衡,但适用于需要数据在模块之间沿确定性路径流动的应用,如 TigrisSort 基准测试就使用了确定性水库。
2. 初始化与控制
Tigris 应用由外部客户端控制,客户端通过 Java RMI 联系每个集群节点的 MultiSpace 控制接口,并与该节点上运行的 TigrisMgr 服务进行通信。TigrisMgr 提供以下方法:
- 创建模块
- 创建流
- 将流添加为给定模块的输入或输出流
- 启动和停止给定模块
执行过程如下:
1. 控制客户端向每个模块发出 moduleStart 命令,执行开始。
2. 执行结束条件:
- 控制客户端向每个模块发出 moduleStop 命令。
- 每个模块达到“流结束”(EOS)条件。
“流
超级会员免费看
订阅专栏 解锁全文
1802

被折叠的 条评论
为什么被折叠?



