适用于分布式环境的网络互斥服务。
项目描述
Distributex
Distributex是一个简单的互斥服务,用于协调某些集群操作。
注意: Distributex不适合需要高性能或公平锁获取的任务。它是一个非常简单的忙等待锁,获取速度非常慢。也不要用于非常大的集群,因为请求者可能永远无法获取锁。
Distributex服务器
Distributex服务器提供简单的HTTP服务。它使用Twisted编写,并提供了Twisted插件。它还需要PyYAML进行配置。
您可以按照以下方式启动它,或者将其包装在supervisor中,或者传递-d,或者任何其他方式
$ twistd -n distributex -c distributex.yaml
配置文件是一个简单的YAML结构,它定义了锁池。锁池是您希望允许东西相互竞争的资源。
backend: memcache pools: - name: pool1 expire: 300 - name: pool2 expire: 300 servers: acme1, acme2
这将创建两个锁池,其锁在5分钟后过期。通常,设置一个过期时间是一个好主意,以确保某些事情,否则它将默认为30分钟。如果您不想让它过期,则将其设置为0,但我不建议这样做。
您可以指定“memcache”后端或“inmemory”,两者都有优点和缺点。Memcache会慢一些,但状态会远离Distributex服务器,并且您可以扩展工作器 - 然而,由于inmemory后端可以在单台机器上处理约5000个等待锁,冗余是唯一真正的关注点。锁过期在memcache后端中也更可靠且更简单。
也可以提供一个以逗号分隔的服务器列表,以防止意外闯入池。这不是安全的,因为任何人都可以伪造他们的主机名。Distributex 客户端将传递主机的全限定域名(FQDN)。
还可以设置“maxlocks”,使池的行为类似于信号量。
您可以通过以下方式测试该服务
$ curl "http://localhost:9889/get/?host=me&pool=pool1" YES $ curl "http://localhost:9889/get/?host=them&pool=pool1" NO $ curl "http://localhost:9889/release/?host=me&pool=pool1" OK $ curl "http://localhost:9889/get/?host=them&pool=pool1" YES $ curl "http://localhost:9889/release/?host=them&pool=pool1" OK
该服务还提供了一个“wait”命令,它将保持连接打开,直到获得锁。
Distributex 客户端
本包不包括一个简单的 Python 脚本,用于包装命令。您可以从 https://raw.github.com/calston/distributex/master/client/distributex 获取它
usage: distributex [-h] -H HOST -r POOL [-p PORT] [command] Distributex client positional arguments: command Command to execute when lock is obtained optional arguments: -h, --help show this help message and exit -H HOST Server hostname -r POOL Resource pool -p PORT Server port (default 9889) -l Use local locking as well
这有助于阻止像 Puppet 这样的 cron 作业。
*/5 * * * * /usr/bin/distributex -H distributex.acme.com -r pool1 '/usr/bin/puppet agent --onetime --no-daemonize'
这将确保集群中任何时候只有一个 Puppet 实例正在运行。您可能还想向 distributex 传递 -l 以防止本地进程重叠。
项目详情
distributex-0.7.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 73fda756b1829ff41b1fd5eb0009e24b5b5a1d55460565b6a9ba4283f83c65d2 |
|
MD5 | d236950b3082e759c46b0c0107d8844e |
|
BLAKE2b-256 | 120ea6636a0a6b04b3db049aac3ba373eb2472ccc2fd8f1c3ae0c3ae2202d6fc |