0

プロセス間通信のバリアと同じ機能を取得しようとしていますが、現在は分散ノード用です。

私の問題は、ノード上に複数の分散プロセスがあることです。それらにはいくつかの非決定論的なセットアップがあり、セットアップ後に同時に実行を開始したいと考えています。

Scala でこれを行うための簡単なフレームワークはありますか?

4

1 に答える 1

1

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();
        }   
}

バリア パスは「使用」されていることに注意してください。クラスターの実行インスタンスごとに、おそらく一意のパス文字列を作成する必要があります。

于 2015-08-17T12:35:50.250 に答える