哈希一致性、哈希取余、自定义轮询分片的比较

1、自定义轮询分片

        

按照上图所示,本身写一段逻辑,根据客户端请求循环写入不一样Redis服务器程序员

优势:redis

  • 理解简单
  • 数据分布平均

缺点:算法

  • 若是增长redis内存数据库服务器,须要改代码,须要发布代码,很麻烦,有风险
  • 数据迁移量较多

2、哈希取余分片

        

哈希取余就是一种特殊的自定义分片方式数据库

优势:这里介绍的三种方式最差的服务器

缺点:spa

  • 若是增长redis内存数据库服务器,须要改代码,须要发布代码,很麻烦,有风险
  • 数据迁移量多,理论是old/new,new = old+increase
  • 数据倾斜,从上图中能够看出最左侧的redis1服务器上存放的数据最多,最右侧的redis4服务器存放最少,若是数据都是几十亿的级别,那么倾斜就至关严重,单台服务器压力会过载

3、哈希一致性分片

   它是Jedis采用的分片方式,并提供了JedisShardInfo、JedisPoolConfig、ShardedJedisPool、ShardedJedis 相关API作成redis链接池,分片逻辑对程序员透明ip

    用图来直观了解一下哈希一致性的分片算法,看到下面的图不要惧怕,根据后面的文字描述搭配着看内存

    

    表明真实的redis服务器循环

    表明虚拟的redis服务器,虚拟服务器隶属于真实服务器,好比虚拟2服务器须要存放的数据被真实的存放到redis2服务器上请求

    表明数据

    说明:

    1.图中最大的圆是由2^32个点组成的圆,每一个点是1到2^32中的一个数

    算法:

    1.jedis根据redis服务器的ip+port+其余输入信息计算出一个哈希值,并将该哈希值映射到圆上

    2.jedis根据key计算出一个哈希值,并将该哈希值映射到圆上

    3.jedis根据key在圆上的位置顺时针找第一个redis服务器哈希值映射的点,该点对于的服务器就是key-value存储的服务器

    4.若是只存在redis服务器的点,数据倾斜仍是会常常发生,为了解决这一问题,jedis根据真是服务器的信息虚拟出n*1000个虚拟服务器,将整个圆分段更多,数据(key-value)存放便更均匀,解决数据倾斜的问题,其中n是真实redis服务器的台数

    图中无法画出4000个虚拟服务器,只是给每一台真实redis服务器虚拟一台服务器,且画的最理想哈希结果,最终每台服务器存放两个数据。

相关文章
相关标签/搜索