我有一组有限的资源,我希望在多个进程之间共享,而不是在多个服务器上运行。我想我需要的东西可以称为分布式信号量。
我找到了一个可以调整的老Perl implementation(基于memcached)。我还没有完全调查过它。
是否有库/组件/软件已经这样做了?也许算法?故障转移怎么样?
这个算法称为Paxos。还有其他算法,但它们都减少到Paxos(或不正确)。它最受欢迎的实现是Apache Zookeeper。 Zookeeper服务器之间运行Paxos。客户端引用命名对象并可以锁定它们等。
为了实现分布式信号量,您需要在节点集群中定义权限,然后一旦选择它,您需要将请求集中到它。处理锁定请求是小菜一碟,选择领导者更复杂。
Paxos将为您解决这个问题。我刚刚更新了wikipedia页面,因为算法描述不完整且具有误导性。
有一种类似于paxos的简单算法,它被称为raft:http://raftconsensus.github.io/
我想建议基于consul会话实现分布式信号量。 Consul中的会话表示具有非常特定语义的合同。
Consul提供的合同是,在以下任何一种情况下,会话将失效:
会话失效时,会被销毁,无法再使用。