一致性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. 4、python常用基础类型介绍

    1.字符串 str 描述性质的一种表示状态的例如名字 word='helloworld' print(type(word),word) <class 'str'> helloworld2. ...

  2. Spring注解方式配置Redis

    @Configuration public class RedisConfiguraion { @Bean public JedisConnectionFactory redisConnectionF ...

  3. day41 mysql详细操作

    复习 create table 表名( id int primary key auto_increment, 字段名 数据类型[(宽度) 约束] )engine=innodb charset=utf8 ...

  4. gdbserver

    这里写下gdbserver的用法: 两台机子,宿主机A和目标机B. step1: 我们在B上安装gdbserver,在A上编译可执行程序a.out,把a.out拷贝到B上面去. step2: 在A上打 ...

  5. 二维树状数组poj1195

    题目链接:https://vjudge.net/problem/POJ-1195 题意:一开始输入0和一个s,0代表开始,s代表这是一个s*s的图,接下来会输入1或2,1代表进行单点修改,后面会接3个 ...

  6. webapi 重复提交问题

    https://izen.live/Blog/info/13.html /// <summary> /// action方法过滤器 /// </summary> public ...

  7. Python开发——解释器安装

    Python(解释器)安装 Windows 1.Python(解释器)下载链接 2.选择好安装路径,点击安装即可 3.环境变量配置 [右键计算机]-->[属性]-->[高级系统设置]--& ...

  8. leetcode3:无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. 给定 &q ...

  9. dbus 消息和消息总线实例讲解-一

    应用程序A和消息总线连接,这个连接获取了一个众所周知的公共名(记作连接A).应用程序A中有对象A1提供了接口I1,接口I1有方法M1. 应用程序B和消息总线连接,要求调用连接A上对象A1的接口I1的方 ...

  10. 使用虚拟机VM12安装REHL7

    转载https://blog.csdn.net/qq_19467623/article/details/52869108 转载http://www.07net01.com/2016/03/141198 ...