• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 一致性哈希的实际应用

一致性哈希的实际应用

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了一致性哈希算法,一致性哈希,一致性哈希会有冲突吗,一致性评价,仿制药一致性评价等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:一致性哈希的实际应用
描述:

前言

今天重看了一下一致性哈希的论文,心里有几处不清楚的地方,求指导

场景

四台server服务器(192.168.1.1-4),redis数据库,存储key-value键值对

问题1

首先,redis的key-value数据一般需要3份备份,对应到一致性哈希的场景,可以说有一台主服务器,和2台从服务器。问题:从服务器的选取是一致性哈希代码里选取三个不同的server,还是选取一个server,然后给这个server再配上两台从服务器呢(这样服务器从原先的4台,增加到4 + 2 * 4 = 12台),我考虑用memcache记录key、主、从分布表

问题2

如果冗余到其他两台服务器,假设是A\B\C\D四台服务器,key的主库是A,备份库在BC上,那当A单点故障,BC之间如何选择,BC上针对A节点的增删改数据如何再恢复给A节点吗?我看了NRW模型,但是没能完全理解

解答1

群里有人提示,服务器端可以用HAproxy+Keepalived实现每个机器主备模式,其实相当于一致性哈希的环上真正只有4个可用的target,却需要8台服务器来完成


解决方案1:

这两天看了一点架构的东西,这个问题基本可以关闭了

解决方案

  1. 还是采用8个server,主备的方式,采用一致性哈希算法增加节点服务器可以通过虚拟节点和权重来防止数据偏移,这里的节点服务器可以用VIP来标识

  2. 主备服务器之间可以采用keepalived方案,对外提供的是虚拟ip,自动故障转移,至于主备服务器的数据库同步,可以用redis提供的主从机制,也可以自己crontab+aof日志,可以再redis数据库上再封装一层insert或者update操作,对外提供api接口,需要操作时访问该接口即可

解决方案2:

根据楼主想要使用一致性哈希算法来看,基本上是把redis当做缓存使用,而不是数据库;

而使用一致性哈希的主要目的通常都是:当集群中机器数量发生变化时,减少缓存失效范围,防止“雪崩”;

在这种情况下,我想到了另一个问题:是不是一定要用哈希一致性算法?

按照我的想法,根据redis目前提供的一些特性,或许使用下面这种常见架构,就能解决刚才的问题;

1台master,n台slave,然后采取读写分离的方式,master处理写请求,slave负责处理读请求(负载均衡)

这种部署方式有什么优势?

  • 当业务访问量猛增时,我们可以快速新增一台redis机器,连上master,当完成主从复制后, 放入到slave集群,开始对外提供服务;

  • 当slave集群中有一台机器挂掉后,可以通过某种机制被识别(借鉴sentinel),并将它从slave集群中踢出;

这样子无论slave集群如何变化,都不会出现cache失效或者部分失效问题;

这种部署方式有什么劣势?

  • redis目前主从复制过程有个很不好的地方就是:当slave和master在同步过程中,网络出现问题,这时候slave要求master重传而不是续传(重新生成一份RDB文件然后传输);这样当master中数据很多的时候,影响会很大,所以一个master下挂多个slave稳定性会下降;

以上仅为个人一点想法,拿出来和楼主探讨


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一致性关于一致性哈希算法的问题
  • 一致性哈希的实际应用
  • 一致性哈希算法怎么保证数据的一致性

相关文章

  • 2017-06-07 python如何将utf-8字符正确的存入mssql2008中不会有乱码?
  • 2017-06-07 django(python)django中的model
  • 2017-06-07 (shell)linux我现在想要一个命令实现如下功能:首先打印输出第一行然后对后面剩余行输出grep‘java’匹配的内容
  • 2017-06-07 我想在ios里使用C的数组,如何能把空间开到最大?
  • 2017-06-07 关于上传加速的问题
  • 2017-06-07 请问申请域名绑定一般需要多久?
  • 2017-06-07 (flask)2006,'MySQLserverhasgoneaway'错误
  • 2017-06-07 七牛能否设置暂停空间?如果超出限额太多会怎样?
  • 2017-06-07 mac安装jekyll一定要先安装Xcode吗?
  • 2017-06-07 如何正则匹配成对标签对中的内容?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • [新手问题求助]Python关于print结尾功能的
    • (python)新手nginx和gunicorn是什么样的关系?
    • github拒绝了我的访问,如何解决?
    • avconv:convertfailed
    • 嚣张吹牛打气提神的VFPGrid,VFP不NB,哪个NB?(第四季)
    • 使用qwebtest测试结果badtoken是什么情况?
    • golang怎么用一个小的图形去匹配一张大的图片里的位置?
    • 关于memset的归属问题
    • python正则,斜杠无法匹配到
    • laravel52如何在中间件中向视图传递变量?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有