多个节点的屏障
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",对于集群的每个 运行-实例,您可能需要创建一些唯一的路径字符串。
我正在尝试获得与进程间通信障碍相同的功能,但现在用于分布式节点。
我的问题是我在节点上有多个分布式进程。他们有一些不确定的设置,设置后我希望他们同时启动 运行。
是否有一个简单的框架允许我在 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",对于集群的每个 运行-实例,您可能需要创建一些唯一的路径字符串。