美文网首页
利用hashring进行客户端集群

利用hashring进行客户端集群

作者: Lupino | 来源:发表于2020-12-07 22:15 被阅读0次

    我们在做延时任务的时候,任务量很大,需要用到很多个任务系统节点来执行。

    通常情况下,我们用轮询的方式来解决,给一个自增的 ID,然后与服务器数量,取模,进行发送数据。

    client = [client1, client2, client3]
    auto_id = 0
    def get_client():
        global auto_id
        auto_id += 1
        return client[auto_id % len(client)]
    

    因为延时任务,不是马上执行,需要取消,或者更改延时时间。

    所以我们必须知道任务发送给了那台任务系统,这时 hashring 派上用场了。

    通过 hashring 我们可以确定每个任务发送给哪台任务系统,我们可以进行任务的取消,或更新。

    from uhashring import HashRing
    nodes = {}
    
    nodes['host1'] = {
        'hostname': host1,
        'instance': client1
    }
    nodes['host2'] = {
        'hostname': host2,
        'instance': client2
    }
    nodes['host3'] = {
        'hostname': host3,
        'instance': client3
    }
    
    hr = HashRing(nodes=nodes, hash_fn='ketama')
    
    def get_client(name):
        return hr[name]
    

    同一个任务名称可以获取到同一个任务系统节点, 我们的要求就满足了。

    相关文章

      网友评论

          本文标题:利用hashring进行客户端集群

          本文链接:https://www.haomeiwen.com/subject/zuhxgktx.html