基于murdur3哈希的集合哈希实现
clandestined的Python项目详细描述
基于murdur3哈希的集合哈希实现
动机
在分布式系统中,常常需要在 一组机器。一致的散列和集合散列是 执行此任务的方法,同时最小化上的数据移动 群集拓扑更改。
clandired是一个集合散列的库,其目标是 简单的客户端和易用性
当前的目标是支持:-Python2.5到Python3.6
示例用法
>>>fromclandestinedimportCluster>>>>>>nodes={...'1':{'name':'node1.example.com','zone':'us-east-1a'},...'2':{'name':'node2.example.com','zone':'us-east-1a'},...'3':{'name':'node3.example.com','zone':'us-east-1a'},...'4':{'name':'node4.example.com','zone':'us-east-1b'},...'5':{'name':'node5.example.com','zone':'us-east-1b'},...'6':{'name':'node6.example.com','zone':'us-east-1b'},...'7':{'name':'node7.example.com','zone':'us-east-1c'},...'8':{'name':'node8.example.com','zone':'us-east-1c'},...'9':{'name':'node9.example.com','zone':'us-east-1c'},...}>>>>>>cluster=Cluster(nodes)>>>cluster.find_nodes('mykey')['4','8']>>>
默认情况下,Cluster将在群集周围放置2个副本 请注意将第二个副本与第一个副本放在单独的区域中。
如果集群不需要区域感知,则可以 直接调用RendezvousHash类,或者使用 Cluster副本设置为1
>>>fromclandestinedimportCluster>>>fromclandestinedimportRendezvousHash>>>>>>nodes={...'1':{'name':'node1.example.com'},...'2':{'name':'node2.example.com'},...'3':{'name':'node3.example.com'},...'4':{'name':'node4.example.com'},...'5':{'name':'node5.example.com'},...'6':{'name':'node6.example.com'},...'7':{'name':'node7.example.com'},...'8':{'name':'node8.example.com'},...'9':{'name':'node9.example.com'},...}>>>>>>cluster=Cluster(nodes,replicas=1)>>>rendezvous=RendezvousHash(nodes.keys())>>>>>>cluster.find_nodes('mykey')['4']>>>rendezvous.find_node('mykey')'4'>>>