策展人在乘法服务上的分布式信号量

Distributed semaphore on multiply services by curator

我是动物园管理员和馆长的新手。

我想用zookeeper和curator来控制我们的服务。情况是我们的服务是基于硬件设备的,因此作为提供者的每个设备一次只能运行一项任务。由于我们有很多设备,我设计使用馆长信号量来统计整个数字,但是如何找到准确的设备是一个问题。因为一个作业可能一次需要很多台设备到运行(设备是独立的),而且数量不能定义,所以每次都需要锁定N台设备并发送任务信息

e.g.As 我想,我们在 curator 中将设备注册为 EPHEMERAL_SEQUENTIAL:

/root/services/
              /devices00000001
              /devices00000002
              ...

无论我们是在每个设备上使用锁还是在 znode 的数据中使用标志,都会花费我们很多时间来找到可用的设备。所以我想知道这些问题是否有一些通用的解决方案?也许我不应该使用 zookeeper 而应该使用其他软件?

为每个设备使用一个 InterProcessMutex - 我假设每个设备都有一些唯一的 ID。类似于:

String path = ZKPaths.makePath("/some/base/path", deviceId);
InterProcessMutex lock = new InterProcessMutex(curator, path);
if ( lock.acquire(max, unit) ) {
    try {
        DO WORK HERE
    } finally {
        lock.release();
    }
}