プロセス間通信のバリアと同じ機能を取得しようとしていますが、現在は分散ノード用です。
私の問題は、ノード上に複数の分散プロセスがあることです。それらにはいくつかの非決定論的なセットアップがあり、セットアップ後に同時に実行を開始したいと考えています。
Scala でこれを行うための簡単なフレームワークはありますか?
プロセス間通信のバリアと同じ機能を取得しようとしていますが、現在は分散ノード用です。
私の問題は、ノード上に複数の分散プロセスがあることです。それらにはいくつかの非決定論的なセットアップがあり、セットアップ後に同時に実行を開始したいと考えています。
Scala でこれを行うための簡単なフレームワークはありますか?
Curator フレームワークを使用して、具体的には を使用して、DistributedDoubleBarrier
同期が必要な各ノードにバリアを設定できます。この背後にある原則は、バリアに入る必要があるノードの数を、続行する前に設定できるということです。
example-zk:2128 に (プレーンな) Zookeeper インスタンスがあると仮定すると、すべてのノードで次の構成を使用できます。
package test.barrier;
//import
import org.apache.curator.*;
import org.apache.curator.framework.recipes.barriers.*;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.framework.CuratorFramework;
class App {
public App()
{
String zookeeperConnectionString = "example-zk:2181";
String barrierPath = "/unique-string";
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy);
client.start();
DistributedDoubleBarrier distDBarrier = new DistributedDoubleBarrier(client, barrierPath, 3);
try{
System.out.println("Waiting on barrier");
distDBarrier.enter();
System.out.println("Apparently everybody was aboard! Continuing ...");
}
catch(Exception e)
{
System.out.println("O no!: " + e.getMessage());
}
}
public static void main (String[] args){
new App();
}
}
バリア パスは「使用」されていることに注意してください。クラスターの実行インスタンスごとに、おそらく一意のパス文字列を作成する必要があります。