博客
关于我
【hash】一致性hash|哈希详解
阅读量:495 次
发布时间:2019-03-06

本文共 1832 字,大约阅读时间需要 6 分钟。

一致性哈希技术详解

一致性哈希是一种在分布式系统中广泛应用的技术,主要用于解决分布式缓存系统中的数据一致性问题。它通过将存储空间组织为一个虚拟的哈希环,确保在节点增减时尽可能地减少数据重新分配,从而解决简单哈希算法的动态变化问题。

一致性哈希的背景

一致性哈希最初为解决 Memcached 等分布式缓存系统中的数据一致性问题而开发。其核心思想是通过对键值对的哈希值进行模运算,将所有数据映射到一个哈希环上。具体实现步骤如下:

  • 将服务器的哈希值映射到一个 0到 2^32 -1 的哈希环。
  • 对于要存储的数据键,计算其哈希值,并在哈希环上定位到对应的服务器。
  • 如果遇到断点,继续顺时针搜索,直到找到第一个可以存储数据的服务器。
  • 这种方法在添加或移除服务器时,只会影响当前服务器哈希值所在的连续部分区域,其他数据的映射关系保持不变。


    一致性哈希的性质

    一致性哈希算法需要满足以下几项基本要求:平衡性、单调性、分散性、负载均衡性平滑性

  • 平衡性:确保哈希值的分布尽可能均匀,避免某些服务器负载过重。
  • 单调性:当缓存空间发生变化时,哈希结果能够适应新的布局,避免重复计算。
  • 分散性:不同终端观察到的缓存数据一致性确保数据存储位置保持一致。
  • 负载均衡性:避免同一数据被不同终端映射到不同的服务器,减少缓存负载。
  • 平滑性:缓存服务器数量或对象数量的变化不会引起数据迁移的剧烈波动。

  • 一致性哈希的实现

    一致性哈希的核心思想是将哈希值映射到一个虚拟的哈希环上。具体实现如下:

    1. 哈希环的构建

    假设使用 32 位无符号整数作为哈希值,整个哈希空间构建为一个闭区间 [0, 2^32 - 1],并按顺时针方向组织为一个环。每个服务器根据其 IP или主机名计算哈希值,并确定其在哈希环上的位置。

    2. 数据定位

    要存储或查找的数据键,计算其哈希值后在哈希环上定位。根据定位结果,沿哈希环顺时针或逆时针方向寻找对应的服务器,完成数据存储或查找。

    3. 虚拟节点解决方案

    为了解决服务节点数量过少导致的数据倾斜问题,引入虚拟节点机制。每个服务节点计算多个哈希值,形成多个虚拟节点。例如,每个服务节点计算 3 个虚拟节点,形成总共 6 个节点。数据定位依然基于虚拟节点,最终将数据定向实际服务节点。

    4. 服务器增减的影响

    • 服务器宕机:只影响其前一个虚拟节点的数据定位。
    • 服务器新增:新的服务器接管其前一个虚拟节点的数据。

    一致性哈希的改进与扩展

    为了应对一些痛点,一致性哈希被进一步改进为分片方案(Shard)。

    1. 分片技术

    • 分片划分:将哈希环切割为小型等分。
    • 解耦分片分配:分片创建与分配独立,分片作为迁移的最小单位。

    这种方式解除了虚拟节点的绑定问题,使数据迁移过程更加灵活高效。

    2. CRUSH算法

    CRUSH(Consistent gossip-based Routing)是一种分片的数据分布算法,其优势在于:

    • 减少中心目录依赖:通过节点本地计算分片位置,降低通信开销。
    • 层级故障域划分:支持动态划分故障域,提高负载均衡。

    分片与 CRUSH 的应用场景

    1. 分片技术

    分片用于将键值对按哈希值划分为多个区域,每个区域对应一个分片。分片数量通常较小,且可以预先确定。分片信息记录在中心目录中,客户端或节点根据分片位置确定存储位置。

    2. CRUSH 算法

    CRUSH 将分片映射与存储节点拓扑结构结合,通过定位算法选择具体的存储位置。它提供四种分配策略:

    • Uniform:随机均匀分配。
    • List:按顺序分配。
    • Tree:按照树状结构分配。
    • Straw:按拉长概率分配。

    CRUSH 简化了中心目录的维护,提高了系统的可扩展性和稳定性。


    应用场景

    一致性哈希技术广泛应用于分布式存储系统:

  • Dynamo 和 Cassandra:采用分片技术,通过 Gossip 实现数据分布。
  • Redis Cluster:将键空间划分为 slot,它们通过 Gossip通信。
  • Meta 集群:通过中心目录服务管理分片映射。
  • Bigtable:切割数据为多个分片,存储在 Tablet 中。
  • Ceph:使用 CRUSH 算法,结合_monitor节点维护 集群拓扑。

  • 一致性哈希技术通过巧妙的分片和分布策略,解决了分布式服务中的动态变化问题,成为anyak落计算中的核心技术。通过虚拟节点和 CRUSH 算法,其性能得到了进一步提升,为现代分布式系统提供了可靠的数据存储基础。

    转载地址:http://vtndz.baihongyu.com/

    你可能感兴趣的文章
    MySQL 索引深入解析及优化策略
    查看>>
    MySQL 索引的面试题总结
    查看>>
    mysql 索引类型以及创建
    查看>>
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>
    mysql 网络目录_联机目录数据库
    查看>>
    MySQL 聚簇索引&&二级索引&&辅助索引
    查看>>
    Mysql 脏页 脏读 脏数据
    查看>>
    mysql 自增id和UUID做主键性能分析,及最优方案
    查看>>
    Mysql 自定义函数
    查看>>
    mysql 行转列 列转行
    查看>>
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    mysql 视图,视图更新删除
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>
    MySQL 设置数据库的隔离级别
    查看>>