一致性hash理解、拜占庭将军问题解读和CAP理论总结
一致性hash理解
- 白话概述:
- 比如说存储图片,有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服务器,虚拟节点越多,分布也就越均匀
拜占庭将军问题
- 问题白话概述:10支军队攻城,必须至少5支以上一起攻击才能成功,10支军队通过通信兵互相传递消息决定要不要进攻和进攻时间。但是需要考虑通信兵中可能存在间谍会改变攻击时间和意图。所以问题归结就是将军能否找到一种分布式协议能够让他们远程协调10支军队有效进攻。(前提假设通信不会被中断,消息传递可靠性有保障)
- 两军问题:A军队分为A1和A2分隔两地,只有两军同时进攻中间的B军队才能获胜。现在需要通信兵实现A1、A2通信,表达何时进攻的意图。A1通知A2,A2收到通知后,需要确认信息,通知A1我收到了,A1收到消息后又要通知A2,告诉它我收到你的确认消息了,A2收到后同样要确认A1我收到了,这样无休止循环,不能保证消息的可靠性。
- 由两军问题,可以看出TCP协议就是为了解决两军问题消息的一致性。A发送随机数x给B,B收到后把x+1,再生产随机数y,把两数都发给A,A收到后确认了B收到了消息,再把y+1,返回给B。这样B也确认了A收到了消息。这就是TCP协议的重点,但它任然不能够绝对的保证消息的可靠性,因为传输途中可能被拦截修改内容。
CAP理论
- C一致性,比如客户端请求服务端,获取的数据要么是最新数据,要么返回错误,==强调数据正确性==
- A可靠性,比如客户端请求服务端,一定会获得数据,但不保证最新,==强调不错出==
- P分区容错性,不管分布式系统内部出现何种问题,大量数据丢失,数据同步延迟,但系统持续工作,==强调不挂掉==
详细参考 https://blog.csdn.net/guitar___/article/details/80656681
一致性hash理解、拜占庭将军问题解读和CAP理论总结的更多相关文章
- 一致性hash理解
在做memcached分布式集群时往往要用到一致性hash算法来调节缓存数据的分布. 通常的hash算法是以服务器数量N作为模数,使用key%N的值来获得最终位置,显然当服务器数量发生变化即N发生变化 ...
- CAP理论解读
经历过技术面试的小伙伴想必对这个两个概念已经再熟悉不过了! 我当年参加面试的时候,不夸张地说,只要问到分布式相关的内容,面试官几乎是必定会问这两个分布式相关的理论. 并且,这两个理论也可以说是小伙伴们 ...
- CAP理论与MongoDB一致性、可用性的一些思考
大约在五六年前,第一次接触到了当时已经是hot topic的NoSql.不过那个时候学的用的都是mysql,Nosql对于我而言还是新事物,并没有真正使用,只是不明觉厉.但是印象深刻的是这么一张图片( ...
- [梁山好汉说IT] 如何理解一致性Hash
[梁山好汉说IT] 如何理解一致性Hash 0x00 摘要 用梁山酒店分配客人为例来理解一致性Hash. 0x01. 与经典哈希方法的对比 经典哈希方法:总是假设内存位置的数量是已知且固定不变的.因为 ...
- 一致性hash的理解
参考: http://www.blogjava.net/hello-yun/archive/2012/10/10/389289.html http://blog.csdn.net/cywosp/art ...
- 分布式缓存一致性hash算法理解
今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的 ...
- redis一致性hash算法理解
一般算法: 对对象先hash然后对redis数量取模,如果结果是0就存在0的节点上. 1.2同上,假设有0-3四个redis节点.20个数据: 进行取模后分布如下: 现在因为压力过大需要扩容,增加一台 ...
- 【高并发解决方案】7、一致性hash解读
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 ...
- 对一致性hash原理的理解
一致性hash算法解决的核心问题是,当solt数发生变化的时候能够尽量少的移动数据.该算法最早在<Consistent Hashing and Random Trees:Distributed ...
随机推荐
- Python入门:Anaconda和Pycharm的安装和配置
Python入门:Anaconda和Pycharm的安装和配置 转自:https://www.cnblogs.com/yuxuefeng/articles/9235431.html 子曰:“工欲善其 ...
- ajax-json,遇到的一个问题,jquery var ,加载顺序。JS对象,json格式转换。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- elasticsearch数据结构
无论是关系型数据库还是非关系型数据库,乃至elasticsearch这种事实上承担着一定储存作用的搜索引擎,数据类型都是非常重要而基础的概念.本文基于elasticsearch 5.x版本. 核心数据 ...
- 加NONCLUSTERED INDEX索引,在ON了之后还要INCLUDE
之前加了索引,但效果不大 SET STATISTICS TIME ON --执行时间 SET STATISTICS IO ON --IO读取 DBCC DROPCLEANBUFFERS --清除缓冲区 ...
- [leetcode]297. Serialize and Deserialize Binary Tree 序列化与反序列化二叉树
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- 校验金额、大小写字母、大写字母、合法uri、email
/* 合法uri*/ export function validURL(url) { const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0- ...
- 用户认证--auth模块实现
转载文章,如有不妥之处请谅解 相关介绍 auth auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管 ...
- CITROEN C8 BSI HC12 Mileage Correction with Digiprog3
CITROEN C8 BSI HC12 odometer correction pinout to Digiprog III Digiprog 3 mileage programmer. The BS ...
- [Hadoop]Hadoop章1 Hadoop原理解析
Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...
- Matching Networks for One Shot Learning
1. Introduction In this work, inspired by metric learning based on deep neural features and memory a ...