多台机器上的一致散列

时间:2014-08-11 09:25:21

标签: hash consistent-hashing

我已经阅读了文章:http://n00tc0d3r.blogspot.com/关于一致哈希的想法,但我对多台机器上的方法感到困惑。

基本过程是:

插入

  1. 将输入长网格散列为单个整数;
  2. 在环上找到服务器并将密钥 - longUrl存储在服务器上;
  3. 使用基本转换(从10-base到62-base)计算缩短的url并将其返回给用户。( 此步骤如何工作?在一台机器中,有一个自动转换增加了id来计算缩短网址,但是在多台机器上缩短网址的计算值是多少?没有自动增加的ID 。)
  4. 提取

    1. 使用基本转换(从62基数到10基数)将缩短的网址转换回密钥;
    2. 找到包含该密钥的服务器并返回longUrl。 ( 我们如何找到包含密钥的服务器?

1 个答案:

答案 0 :(得分:1)

我在该页面上看不到作者的意图。我认为这基本上是读者的练习。以下是一些想法:

  1. 按照描述实现它,使用哈希表样式冲突解决方案。也就是说,在创建URL时,如果它已经匹配某些内容,则以某种方式处理该URL。重新散列或算术变换(例如,加1)都是可能性。这很天真地意味着理论上最糟糕的情况是不得不试图找到一个可用的密钥n次。
  2. 有许多方法可以采用这个基本想法并对其进行智能化,例如,只需在同一服务器上搜索另一个可用密钥,例如,通过迭代重复,直到找到服务器上的密钥为止

    1. 允许服务器相互通信,并协调自动增量ID。

    2. 这可能不是一个很好的解决方案,但它在某些情况下可能会运行良好:为每个服务器(或一组服务器)提供单独的命名空间,例如,前16位选择服务器。在创作时,随机选择一个。然后,您只需要弄清楚您希望该命名空间如何映射。命名空间只对谁允许创建哪些ID非常重要,因此如果您想在以后添加节点或重新平衡,这没什么大不了的。

    3. 如果您想要更详细的说明,请告诉我。我认为有很多方法可以实现。令人讨厌的是,作者没有详细阐述这一点;我对这些算法的经验是,碰撞解决和类似问题往往是分布式系统实际实现的核心。