多个节点的屏障

barrier for multiple nodes

我正在尝试获得与进程间通信障碍相同的功能,但现在用于分布式节点。

我的问题是我在节点上有多个分布式进程。他们有一些不确定的设置,设置后我希望他们同时启动 运行。

是否有一个简单的框架允许我在 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();
        }   
}

请注意,障碍路径是 "used",对于集群的每个 运行-实例,您可能需要创建一些唯一的路径字符串。