一致性算法介绍(二)

1.4. NWR

N :在分布式存储系统中,有 多少份备份数据
W :代表一次成功的更新操作要求至少有 w 份数据写入成功
R : 代表一次成功的读数据操作要求至少有 R 份数据成功读取
NWR值的不同组合会产生不同的一致性效果,当W+R>N的时候,整个系统对于客户端来讲能保
证强一致性。而如果 R+W<=N,则无法保证数据的强一致性。以常见的 N=3、W=2、R=2 为例:
N=3,表示,任何一个对象都必须有三个副本(Replica),W=2 表示,对数据的修改操作
(Write)只需要在 3 个 Replica 中的 2 个上面完成就返回,R=2 表示,从三个对象中要读取到 2
个数据对象,才能返回。

 1.5. Gossip

Gossip 算法又被称为反熵(Anti-Entropy),熵是物理学上的一个概念,代表杂乱无章,而反熵
就是在杂乱无章中寻求一致,这充分说明了 Gossip 的特点:在一个有界网络中,每个节点都随机

地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一致。每个节点可
能知道所有其他节点,也可能仅知道几个邻居节点,只要这些节可以通过网络连通,最终他们的
状态都是一致的,当然这也是疫情传播的特点。

1.6. 一致性 Hash

一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法,常用于负载均衡。
Memcached client 也选择这种算法,解决将 key-value 均匀分配到众多 Memcached server 上
的问题。它可以取代传统的取模操作,解决了取模操作无法应对增删 Memcached Server 的问题
(增删 server 会导致同一个 key,在 get 操作时分配不到数据真正存储的 server,命中率会急剧下
降)。

1.6.1. 一致性 Hash 特性

 平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得
所有的缓冲空间都得到利用。
 单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,
又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到新的缓
冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。容易看到,上面的简单求余算法
hash(object)%N 难以满足单调性要求。
 平滑性(Smoothness):平滑性是指缓存服务器的数目平滑改变和缓存对象的平滑改变是一致
的。

1.6.2. 一致性 Hash 原理

1. 建构环形 hash 空间 :
1. 考虑通常的 hash 算法都是将 value 映射到一个 32 为的 key 值,也即是 0~2^32-1 次方的
数值空间;我们可以将这个空间想象成一个首( 0 )尾( 2^32-1 )相接的圆环。
2. 把需要缓存的内容 ( 对象 ) 映射到 hash 空间
2. 接下来考虑 4 个对象 object1~object4 ,通过 hash 函数计算出的 hash 值 key 在环上的分

3. 把服务器 ( 节点 ) 映射到 hash 空间
3. Consistent hashing 的基本思想就是将对象和 cache 都映射到同一个 hash 数值空间中,并
且使用相同的 hash 算法。一般的方法可以使用 服务器(节点) 机器的 IP 地址或者机器名作为
hash 输入。
4. 把对象映射到 服务节点
4. 现在服务节点和对象都已经通过同一个 hash 算法映射到 hash 数值空间中了,首先确定对象
hash 值在环上的位置,从此位置沿环顺时针“行走”,第一台遇到的服务器就是其应该定位
到的服务器。

 拟节点”,这个对应个数也成为“复制个数”,“虚拟节点”在 hash 空间中以 hash
值排列。
仍以仅部署 cache A 和 cache C 的情况为例。现在我们引入虚拟节点,并设置“复制个数”为 2 ,
这就意味着一共会存在 4 个“虚拟节点”, cache A1, cache A2 代表了 cache A; cache C1,
cache C2 代表了 cache C 。此时,对象到“虚拟节点”的映射关系为:
objec1->cache A2 ; objec2->cache A1 ; objec3->cache C1 ; objec4->cache C2 ;
因此对象 object1 和 object2 都被映射到了 cache A 上,而 object3 和 object4 映射到了 cache
C 上;平衡性有了很大提高。
引入“虚拟节点”后,映射关系就从 { 对象 -> 节点 } 转换到了 { 对象 -> 虚拟节点 } 。查询物体所
在 cache 时的映射关系如下图 所示。

2 分布式

1、什么是分布式系统

分布式系统是一个硬件或软件组成分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统

2、分布式系统的特征

  • 分布性
    分布式系统的多台计算机都会在空间上随意分布的,同时,机器的分布情况也会随时变动
  • 对等性
    分布式系统中的计算机没有主/从之分,既没有控制整个系统的主机,也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的。副本 (Replica)是分布式系统最常见的概念之一,指的是分布式系统对数据和服务提供的一种冗余方式。 在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理。数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题 最为有效的手段。另一类副本是服务副本,指多个节点提供同样的服务,每个节点都有能力接收来自外部的请求并进行相应的处理
  • 并发性
    在“问题的提出”部分,我们已经提到过与“更新的并发性”相关的内容。在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统中的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等,如何准确并高效地协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一。
  • 缺乏全局时钟
    前面提到,一个典型的分布式系统是由一系列在空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换消息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竞谁先谁后,原因就是因为分布式系统缺乏一个全局的时钟序列控制。关于分布式系统的时钟和事件顺序中已经做了非常深刻的讲解.
  • 故障总是会发生
    组成分布式系统的所有计算机,都有可能发生任何形式的故障。一个被大量工程实践所检验过的黄金定理是:任何在设计阶段考虑到的异常情况,一定会在系统实际运行中发生,并且,在系统实际运行过程中还会遇到很多在设计时未能考虑到的异常故障。所以,除非需求指标允许,在系统设计时不能放过任何异常情况。

3、分布式环境的各种问题

  • 通信异常
    从集中式向分布式演变的过程中,必然引人了网络因素,而由于网络本身的不可靠性、因此也引人了额外的问题。分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,网络光纤、路由器或是 DNS等硬件设备或是系统不可用都会导致最终分布式系统无法顺利完成一次网络通信。 另外,即使分布式系统各节点之间的网络通信能够正常进行,其延时也会远大于单机操作。通常我们认为在现代计算机体系结构中,单机内存访问的延时在纳秒数量级(通常是10ns左右),而正常的一次网络通信的延迟在0.1- 1ms左右(相当于内存访问延时的105~106倍),如此巨大的延时差别,也会影响消息的收发的过程,因此消息丢失和消息延迟变得非常普遍
  • 网络分区
    当网络由于发生异常情况,导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式系统的所有节点中,只有部分节点之间能够进行正常通信。而另一些节点则不能我们将这个现象称为网络分区,就是俗称的“脑裂”。当网络分区出现时 分布式系统会出现局部小集群,在极端情况下,这些局部小集群会独立完成原本需要整个分布式系统才能完成的功能,包括对数据的事务处理,这就对分布式一致性提出了非常大的挑战。
  • 三态
    前面提到,在分布式系统环境下,网络可能存在各种各样的问题;因此分布式系统的每一次请求和响应,存在特有的“三态”概念,即成功、失败与超时。 在传统的单机系统中,应用程序在调用一次函数之后,能够得到一个非常明确的响应,成功或失败;而在分布式系统中,由于网络是不可靠的,虽然在绝大部分情况下,网络通信也能接收到成功或失败的响应,但是当网络出现异常时,就可能出现超时的情况,通常有以下两种情况:
    • 请求时消息丢失
    • 响应时消息丢失
  • 节点故障
    节点故则是分布式环境下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或“死”现象。通常根据经验来说,每个节点都有可能会出现故障,并且每天都在发生

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/130942.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:141. 环形链表

一、题目 函数原型&#xff1a; bool hasCycle(struct ListNode *head) 二、算法 判断不是环形链表&#xff0c;只需遍历链表找到空结点即可。 判断是环形链表&#xff0c;由于链表是环形的&#xff0c;遍历不会永远不会结束。所以要设置快慢指针&#xff0c;慢指针一次走一步&…

解锁潜在商机的钥匙——客户管理系统公海池

在竞争激烈的市场环境下&#xff0c;企业需要更智能、高效的方式管理客户&#xff0c;从而挖掘潜在商机。客户管理系统的公海池&#xff0c;就是为此而生的利器&#xff0c;让你轻松解锁商机&#xff0c;提升客户管理效能。 公海池&#xff0c;打破信息孤岛&#xff0c;释放潜在…

最新itvboxfast源码如意itvbox影视仓二开会员版新增支持多线路仓库自动换源等功能支持对接苹果CMS和tvbox接口搭建教程

此套源码包含前后端源码&#xff0c;也有打包好的APK&#xff0c;不知道打包的也可以反编译&#xff0c;有视频教程 这次更新支持自动换源以及支持多线路仓库&#xff0c;首页轮播图优化&#xff0c;新增主题&#xff0c;积分签到还有很多新增功能,由于这里不能发太多详细的东…

新浪微博一键删除所有内容

亲自测试用 具体操作如下&#xff1a; 对应的 1 2 如下&#xff0c;进入这个界面是按F12 就可以看到 最后画横线的位置 替换自己的id 对应的就是 3 具体代码如下 //向删除接口发起请求&#xff0c;删除对应节点 function del_weibo(id) {var myHeaders new Headers();myHea…

Vuex:模块化Module

由于使用单一状态树&#xff0c;应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时&#xff0c;store 对象就有可能变得相当臃肿。 这句话的意思是&#xff0c;如果把所有的状态都放在/src/store/index.js中&#xff0c;当项目变得越来越大的时候&#xff0c;Vue…

C#,数值计算——函数计算,Epsalg的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Convergence acceleration of a sequence by the algorithm.Initialize by /// calling the constructor with arguments nmax, an upper bound on the /// number of term…

软件工程的舞台上,《人月神话》的美学纷飞

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天给大家分享一本书&#xff1a;《人月神话》——软件工程的经典之作。 《人月神话》是一本具有深远影响力的软件工程著作&#xff0c;无论是软件开发者、管理者还是学习软件工程的人士&#xff0c;都能从中获得宝贵的启…

高性能网络编程 - 解读3种线程模型

文章目录 Pre线程模型1&#xff1a;传统阻塞 I/O 服务模型线程模型2&#xff1a;Reactor 模式Reactor 模式的基本设计思想Reactor 模式中的关键组成3种典型实现单 Reactor 单线程单 Reactor 多线程主从 Reactor 多线程 小结 线程模型3&#xff1a;Proactor 模型 Pre 高性能网络…

深入理解 TCP;场景复现,掌握鲜为人知的细节

握手失败 第一次握手丢失了&#xff0c;会发生什么&#xff1f; 当客户端想和服务端建立 TCP 连接的时候&#xff0c;首先第一个发的就是 SYN 报文&#xff0c;然后进入到 SYN_SENT 状态。 在这之后&#xff0c;如果客户端迟迟收不到服务端的 SYN-ACK 报文&#xff08;第二次…

管易云与电商平台的无代码集成:实现API连接与用户运营

管易云简介及其与电商平台的合作 金蝶管易云是金蝶集团旗下以电商为核心业务的子公司&#xff0c;是国内最早的电商ERP服务商之一&#xff0c;总部在上海&#xff0c;与淘宝、天猫、 京东、拼多多、抖音等300多家主流电商平台建立合作关系&#xff0c;同时管易云是互联网平台首…

MATLAB中deconvwnr函数用法

目录 语法 说明 示例 使用 Wiener 滤波对图像进行去模糊处理 deconvwnr函数的功能是使用 Wiener 滤波对图像进行去模糊处理。 语法 J deconvwnr(I,psf,nsr) J deconvwnr(I,psf,ncorr,icorr) J deconvwnr(I,psf) 说明 J deconvwnr(I,psf,nsr) 使用 Wiener 滤波算法对…

操作系统 | 编写内核

&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《操作系统实验室》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1. 操作系统实验之编写内核 1.1 实验目的 1.2 实验内容 1.3 实验步骤 1.4 实验过程 …

1.linux极速进阶

目录 概述文件相关vi文件编辑查找字符串查找某一行内容复制粘贴快速删除快速跳到文件首行和末行 进程相关ps/netstatjpstopkill linux三剑客grepsed添加方面操作删除方面替换操作 awk 结束 概述 身为后端开发&#xff0c;大数据平台搭建&#xff0c;对 linux 系统的操作最起码…

高阶组件和Hooks

目录 1. 高阶组件&#xff08;Higher-Order Components&#xff09; 1.1 创建高阶组件 1.2 使用高阶组件 2. Hooks 2.1 使用useState Hook管理状态 2.2 创建自定义Hook 结论 1. 高阶组件&#xff08;Higher-Order Components&#xff09; 高阶组件是一个接受一个组件作为…

面向对象--------三巨头

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶个人主页&am…

Apache Airflow (四) :Airflow 调度shell命令

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

Unity 制作血量滑动条(Slider)

1.创建UI slider 层级面板点击右键-UI-slider 2.调整UI位置 选择2D视图&#xff0c;调整锚点和滑动条位置 3.PS中制作UI 导出2个图层&#xff0c;PNG格式。 4.改成精灵模式&#xff08;sprite2d&#xff09; 把两个PNG导入Unity仓库中&#xff0c;选中两个图&#xff0c;右…

【LeetCode刷题笔记】堆和优先级队列

358. K 距离间隔重排字符串 解题思路: 大根堆 + 队列 , 1)首先 计数数组 统计 每个字符出现的次数 ,然后将 计数 > 0 的 字符 和 次数 一起放入 大根堆 ,大根堆中

Matlab的多项式留数与极点的计算

Matlab的多项式留数与极点的计算 以下面的多项式为例&#xff1a; 运算代码&#xff1a; clc clear closesyms p % 定义多项式 Zp(5*p^571*p^370*p)/(2*p^635*p^4117*p^236); % 提取分子与分母 [I,D]numden(Zp); Idouble(coeffs(I,p,"All"));%分子 Ddouble(coeffs…

Git系列之Git集成开发工具及git扩展使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《Git实战开发》。&#x1f3af;&#x1f3af; &a…