一致性hash理解

  1. 白话概述:

    • 比如说存储图片,有10台服务器用来存储,对图片名进行hash(pic_name)%10得到的值就是图片存放的服务器序号。这是正常的hash算法分散图片存储。但是有一天,你觉得服务器不够了,需要加几台机器扩容存储。这时候,假设加了10台,变成20台,那么原先譬如11%10=1现在11%20=11,则存取图片会跑到11号服务器,如果仍旧用原来的算法,那所有图片几乎都要重新移动位置,这明显非常消耗性能。
    • 一致性hash就是为了解决这一问题,它建立了hash环的概念,2^32个点,围城一个环,表示从0-2^32-1的数,比如3台服务器,根据ip地址hash后%2^32余数就是hash环上的位置A,B,C,假设按从小到大顺时针排序,存储图片的时候同样算出图片位置,如果在A,B之间,按顺时针则放在B,在B,C之间顺时针放C,CA之间,顺时针放A,理想情况下,A,B,C均匀排列则图片均匀分布在ABC三台服务器上。这时候,若多加了台服务器D,算出位置为 CA之间那么,落在CD之间的图片存在D,落在DA之间的图片依旧存在A,这台服务器D只是负担了一部分资源存储,减少了A的负担,并不会影响其他服务器
    • 当然以上算法都是理想状态,实际情况可能A,B,C都挤在一起,靠的比较近,使大部分资源都落到一个服务器上,为了解决这一问题,它引入了虚拟节点,也就是说,A可以创建多个A1,A2...节点分散在整个hash环,存入的图片位置,顺时针若落入A1,则代表它粗怒A服务器,虚拟节点越多,分布也就越均匀

详细参考 http://www.zsythink.net/archives/1182

拜占庭将军问题

  1. 问题白话概述:10支军队攻城,必须至少5支以上一起攻击才能成功,10支军队通过通信兵互相传递消息决定要不要进攻和进攻时间。但是需要考虑通信兵中可能存在间谍会改变攻击时间和意图。所以问题归结就是将军能否找到一种分布式协议能够让他们远程协调10支军队有效进攻。(前提假设通信不会被中断,消息传递可靠性有保障)
  2. 两军问题:A军队分为A1和A2分隔两地,只有两军同时进攻中间的B军队才能获胜。现在需要通信兵实现A1、A2通信,表达何时进攻的意图。A1通知A2,A2收到通知后,需要确认信息,通知A1我收到了,A1收到消息后又要通知A2,告诉它我收到你的确认消息了,A2收到后同样要确认A1我收到了,这样无休止循环,不能保证消息的可靠性。
  3. 由两军问题,可以看出TCP协议就是为了解决两军问题消息的一致性。A发送随机数x给B,B收到后把x+1,再生产随机数y,把两数都发给A,A收到后确认了B收到了消息,再把y+1,返回给B。这样B也确认了A收到了消息。这就是TCP协议的重点,但它任然不能够绝对的保证消息的可靠性,因为传输途中可能被拦截修改内容。

详细参考 https://www.cnblogs.com/zpfbuaa/p/6846966.html

CAP理论

  1. C一致性,比如客户端请求服务端,获取的数据要么是最新数据,要么返回错误,==强调数据正确性==
  2. A可靠性,比如客户端请求服务端,一定会获得数据,但不保证最新,==强调不错出==
  3. P分区容错性,不管分布式系统内部出现何种问题,大量数据丢失,数据同步延迟,但系统持续工作,==强调不挂掉==

详细参考 https://blog.csdn.net/guitar___/article/details/80656681

一致性hash理解、拜占庭将军问题解读和CAP理论总结的更多相关文章

  1. 一致性hash理解

    在做memcached分布式集群时往往要用到一致性hash算法来调节缓存数据的分布. 通常的hash算法是以服务器数量N作为模数,使用key%N的值来获得最终位置,显然当服务器数量发生变化即N发生变化 ...

  2. CAP理论解读

    经历过技术面试的小伙伴想必对这个两个概念已经再熟悉不过了! 我当年参加面试的时候,不夸张地说,只要问到分布式相关的内容,面试官几乎是必定会问这两个分布式相关的理论. 并且,这两个理论也可以说是小伙伴们 ...

  3. CAP理论与MongoDB一致性、可用性的一些思考

    大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片( ...

  4. [梁山好汉说IT] 如何理解一致性Hash

    [梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为 ...

  5. 一致性hash的理解

    参考: http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html http://blog.csdn.net/cywosp/art ...

  6. 分布式缓存一致性hash算法理解

    今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的 ...

  7. redis一致性hash算法理解

    一般算法: 对对象先hash然后对redis数量取模,如果结果是0就存在0的节点上. 1.2同上,假设有0-3四个redis节点.20个数据: 进行取模后分布如下: 现在因为压力过大需要扩容,增加一台 ...

  8. 【高并发解决方案】7、一致性hash解读

       一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 ...

  9. 对一致性hash原理的理解

    一致性hash算法解决的核心问题是,当solt数发生变化的时候能够尽量少的移动数据.该算法最早在<Consistent Hashing and Random Trees:Distributed ...

随机推荐

  1. position:fix相对父元素定位

    大家都知道,当position的值为fix时,生成绝对定位的元素,相对于浏览器窗口进行定位. 它常常应用的场合是,当下拉滚动条时固定导航栏到顶部,将广告固定在页面两侧或浏览器中间. 如果需要将导航栏d ...

  2. python--第九天总结

    python 多进程和多线程 多线程可以共享全局变量,多进程不能.多线程中,所有子线程的进程号相同:多进程中,不同的子进程进程号不同. [多进程] Python在2.6引入了多进程的机制,并提供了丰富 ...

  3. Python基础-python基本语法(二)

    一.注释 分类:单行注释和多行注释 1.单行注释 单行注释以#开头,在当前行内,#后面的内容就是注释内容 2.多行注释 被两个   '''    或     ''''''    包括起来的内容就是注释 ...

  4. 联想RD450带Read10服务器操作系统密码忘记

    联想RD450带Read10服务器操作系统密码忘记 可以用U盘PE进入重写密码 按F1进入BIOS界面设置如下 进入BOOT选项卡,设置U盘第一启动,也就是图中 Boot Option #1 设置为 ...

  5. Solidity类型Uint类型区分?

    1. Solidity中默认 Uint 也就是Uint256, 也就是 无符号 256位整数范围,即 2的 256次方 减一的 10进制范围, 预计大小为: 115792089237316195423 ...

  6. kubernetes namespace Terminating

    1.kubectl get namespace annoying-namespace-to-delete -o json > tmp.jsonthen edit tmp.json and rem ...

  7. 3H - 进制转换

    输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). Outpu ...

  8. ipv6 docker

    DOCKER, IPV6 BASIC CONFIGURATION OF DOCKER ENGINE WITH IPV6 SEPTEMBER 21, 2015 EYEPV6(AT)GMAIL(DOT)C ...

  9. linux学习第八天 (Linux就该这么学)

    今天学了,mount 挂载,umount撤销挂载,.fdisk 命令 管理硬盘 交换分区swap,硬盘配额 xfs_quota命令 今天工作,手机看了,看的不全,回头看录播了.

  10. docker日志设置定期清理

    1.新建/etc/docker/daemon.json,若有就不用新建了 2.添加log-dirver和log-opts参数,样例如下 "log-driver":"jso ...