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

一、自定义轮询分片

        191645_8rXh_3049601.png

按照上图所示,自己写一段逻辑,根据客户端请求循环写入不同Redis服务器

优点:

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

缺点:

  • 如果增加redis内存数据库服务器,需要改代码,需要发布代码,很麻烦,有风险
  • 数据迁移量较多

二、哈希取余分片

        193519_zsrM_3049601.png

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

优点:这里介绍的三种方式最差的

缺点:

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

三、哈希一致性分片

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

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

    195249_zix9_3049601.png

    195350_DOTj_3049601.png代表真实的redis服务器

    195421_tAwJ_3049601.png代表虚拟的redis服务器,虚拟服务器隶属于真实服务器,比如虚拟2服务器需要存放的数据被真实的存放到redis2服务器上

    195440_OVcV_3049601.png代表数据

    说明:

    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服务器虚拟一台服务器,且画的最理想哈希结果,最终每台服务器存放两个数据。

转载于:https://my.oschina.net/u/3049601/blog/1788835

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值