【发布时间】:2011-07-23 01:53:13
【问题描述】:
我希望在多个进程之间共享一组有限的资源,而不是在多个服务器上运行。我想我需要的可以称为分布式信号量。
我找到了一个旧的Perl implementation(基于memcached)可以适应。我还没有完全调查它。
是否有已经这样做的库/组件/软件?一个算法,也许? 故障转移怎么样?
【问题讨论】:
标签: .net ipc distributed semaphore
我希望在多个进程之间共享一组有限的资源,而不是在多个服务器上运行。我想我需要的可以称为分布式信号量。
我找到了一个旧的Perl implementation(基于memcached)可以适应。我还没有完全调查它。
是否有已经这样做的库/组件/软件?一个算法,也许? 故障转移怎么样?
【问题讨论】:
标签: .net ipc distributed semaphore
此算法称为Paxos。还有其他算法,但它们都归结为 Paxos(或不正确)。它最流行的实现是Apache Zookeeper。 Zookeeper 服务器在它们之间运行 Paxos。客户端引用命名对象并可以锁定它们等。
【讨论】:
为了实现分布式信号量,你需要在一个节点集群中定义一个权限,然后一旦它被选中,你需要集中对它的请求。处理锁请求是小菜一碟,选择leader比较复杂。
Paxos 将为您解决这个问题。我刚刚更新了wikipedia 页面,因为算法描述不完整且具有误导性。
【讨论】:
还有一个类似于paxos的更简单的算法,叫做raft: http://raftconsensus.github.io/
【讨论】:
我想建议基于领事会话实现分布式信号量。 Consul 中的会话表示具有非常特定语义的合约。
Consul 提供的合约是,在以下任何一种情况下,会话都会失效:
当会话失效时,它会被销毁,不能再使用。
【讨论】:
我想指出,从您描述的用例来看,信号量本身可能几乎不需要分发。所以你不一定想要一个分布式信号量,而是一个用于分布式系统的信号量。
油门可能符合这个要求:https://github.com/pacman82/throttle
【讨论】: