联系hashgameCONTACT hashgame
地址:广东省广州市
手机:13988889999
电话:020-88889999
邮箱:admin@qq.com
查看更多
Rhashgamehashgame
你的位置: 首页 > hashgame

HASH GAME - Online Skill Game ET 300一致性哈希算法应用及优化(最简洁明了的教程)

发布时间:2025-10-08 22:04:40  点击量:

  HASH GAME - Online Skill Game GET 300

HASH GAME - Online Skill Game GET 300一致性哈希算法应用及优化(最简洁明了的教程)

  根据一致性哈希算法,object1 会被定为到 Server2 上,object2 被定为到 Server 3 上,而 object3 和 object4 分别被定为到 Server 1 上。 一致性哈希算法与简单哈希算法相比有了明显的改善: 1.容错性得到了提升。 例如, 假设 server2 宕机了, 那么此时 object2 , object3, object4, 不会受到影响,只有 object1 被重定位到 Server 3。即在一致性哈希算法中,如果一台服务 器不可用, 则受影响的数据仅仅是此服务器到其环空间中前一台服务器 (即顺着逆时针方向 行走遇到的第一台服务器)之间数据,其它不会受到影响。如图 5 所示。 232-1 0 Key1

  一致性哈希算法(Consistent Hashing)最早在 David Karger,Eric Lehman 等人的论文 《Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web》中被提出,是当前较主流的分布式哈希表协议之一,它对简单哈希 算法进行了修正,解决了热点(Hot Pot)问题。 一致性哈希的原理: 首先, 对存储节点的哈希值进行计算, 其将存储空间抽象为一个环, 将存储节点配置到环上。环上所有的节点都有一个值。其次,对数据进行哈希计算,按顺时 针方向将其映射到离其最近的节点上去。 现在根据一致性哈希算法原理,重新解决上面分布式缓存问题。 1.一致性哈希将整个哈希值空间组织成一个虚拟的圆环, 现在假设某哈希函数 H 的值空 间为 0 – 232-1(即哈希值是一个 32 位无符号整形) ,那么整个哈希空间环如下图 2:

  可以用简单哈希计算:h = Hash(key) % 3 ,其中 Hash 是一个从字符串到正整数的哈希 映射函数,这样能够保证对相同 key 的访问会被发送到相同的服务器。现在如果我们将 Memcached Server 分别编号为 0、1、2,那么就可以根据上式和 key 计算出服务器编号 h, 然后去访问。 但是,由于这样做只是采用了简单的求模运算,使得简单哈希计算存在很多不足: 1)增删节点时,更新效率低。当系统中存储节点数量发生增加或减少时,映射公式将 发生变化为 Hash(object)%(N±1),这将使得所有 object 的映射位置发生变化,整个系统数 据对象的映射位置都需要重新进行计算, 系统无法对外界访问进行正常响应, 将导致系统处 于崩溃状态。 2)平衡性差,未考虑节点性能差异。由于硬件性能的提升,新添加的节点具有更好的 承载能力, 如何对算法进行改进, 使节点性能可以得到较好利用, 也是亟待解决的一个问题。 3)单调性不足。衡量数据分布技术的一项重要指标是单调性,单调性是指如果已经有 一些内容通过哈希计算分派到了相应的缓冲中, 当又有新的缓冲加入到系统中时, 哈希的结 果应能够保证原有已分配的内容可以被映射到新的缓冲中去, 而不会被映射到旧的缓冲集合 中的其他缓冲区。 由上述分析可知,简单地采用模运算来计算 object 的 Hash 值的算法显得过于简单,存 在节点冲突,且难以满足单调性要求。

  哈希算法除了在数据加密中的运用外, 也可以用在常见的数据分布式技术中。 哈希计算 是通过求模运算来计算哈希值的,然后根据哈希值将数据映射到存储空间中。设有由 N 个 存储节点组成的存储空间,采用简单哈希计算将一个数据对象 object 映射到存储空间上的 公式为:Hash(object)% N。 现在假设有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数 据库的方式已经不能满足用户的访问,于是想引入 Memcached 作为缓存机制。现在一共有 三台机器可以作为 Memcached 服务器,如下图 1 所示。

  为了解决这种数据倾斜问题, 一致性哈希算法引入了虚拟节点机制, 即对每一个服务节 点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点。具体做法可以 在服务器 ip 或主机名的后面增加编号来实现。例如图 7 的情况,可以为每台服务器计算三 个虚拟节点, 分别计算“Memcached Server 1-1”、 “Memcached Server 1-2”、 “Memcached Server 1-3”、“Memcached Server 2-1”、“Memcached Server 2-2”、“Memcached Server 2-3”的哈希值, 于是形成六个虚拟节点,其环分布如下图 8 所示:

【返回列表页】

顶部

地址:广东省广州市  电话:020-88889999 手机:13988889999
Copyright © 2018-2025 哈希游戏(hash game)官方网站 版权所有 非商用版本 ICP备案编: