分布式系统的一致性与共识算法(一)

前言

etcd是线性一致性读,而zk却是顺序一致性读,再加上各种共识、强弱一致的名词,看到欸度时候总会混淆,这里会给出一些例子来帮助理解。

什么是一致性?

在谈到一致性这个词时,你会想到CAP理论的consistency,或者ACID钟的consistency,或者cache一致性协议的coherence,还是Raft/Paxos钟的consensus?
一致性这个词在不同的领域具有不同的含义,毕竟这个中文词在英文词对应了不同的术语,consistency,coherence,consensus三个单词统一翻译为"一致性"。因此在谈一致性之前,有必要对这几个概念做一个区分,否则很容易让人迷惑。

coherence

Coherence只出现在Cache Coherence一词中,称为"缓存一致性",研究多核场景,即怎么保证多个核上的CPU缓存数据是一致的。一般是单机维度的,不算分布式领域

consensus

consensus准确的翻译是共识,即多个提议者达成共识的过程,例如Paxos,Raft就是共识算法,Paxos是一种共识理论,分布式系统是他的场景,一致性是他的目标。
一些常见的误解:使用了Raft或者Paxos的系统都是线性一致的(Linearizability即强一致),其实不然,共识算法只能提供基础,要实现线性一致还需要在算法之上做出更多的努力。因为分布式系统引入了多个节点,节点规模越大、宕机、网络时延、网络分区就会成为常态,任何一个问题都可能导致节点之间的数据不一致,因此Paxos和Raft准确来讲是用来解决一致性问题的共识算法,用于分布式场景,而非"缓存一致性"这种单机场景。所以很多文章也就简称"Paxos是分布式系统中的一致性算法"。
一致性(Consistency)的含义比共识(Consensus)要宽泛,一致性指的是多个副本对外呈现的状态。包括顺序一致性、线性一致性、最终一致性等。而共识特指达成一致的过程,但注意,共识并不意味着实现了一致性,一些情况它是做不到的

Paxos与Raft

Paxos其实是一类协议,Paxos中包含Basic Paxso、Multi-Paxos、Cheap Paxos和其他的变种。Raft就是Multi-Paxos的一个变种,Raft通过简化
Multi-Paxos的模型,实现了一种更容易让人理解和工程实现的共识算法,Paxos是第一个被证明完备的共识算法,能够让分布式网络中的节点出现错误时仍然保持一致,当然前提是没有恶意节点,也就是拜占庭将军问题。在传统的分布式系统领域是不需要担心这种问题的。因为不论是分布式数据库、消息队列、分布式存储,你的机器都不会故意发送错误信息,最常见的问题反而是节点失去响应,所以它们在这种前提下,Paxos是足够用的

复制状态机

Consensus共识在实现机制上属于复制状态机(Replicated State Machine)的范畴,复制状态机是一种很有效的容错技术,基于复制日志来实现,每个Server存储着一份包含序列的日志文件,状态机会按顺序执行这些命令。因为日志中的命令和顺序都相同,因此所有节点会得到相同的数据。因此保证系统一致性就简化为保证操作日志的一致,这种复制日志的方式被大量运用,如果GSF、HDFS、ZooKeeper和etcd都是这种机制。

区块链

共识算法还有一个很重要的领域,就是比较火的区块链,比如工作量证明(POW)、权益证明(POS)和委托权益证明(DPOS)、置信度证明(POB)等等,都是共识算法。大家熟知的zk、etcd这种之所以叫"传统分布式",就是相对于区块链这种"新型分布式系统"而言的,都是多节点共同工作,只是区块链有几点特殊:

  • 1.区块链需要解决的是拜占庭将军问题,Paxos之类的一致性算法无法对抗欺诈节点
  • 2.区块链中不存在中央空置房,没有一个节点可以控制或协调账本数据的生成
  • 3.区块链中的共识算法如果达不到一致性,则任何人都可以硬分叉,另建一个社区、一条链
  • 4.分布式系统的性能理论上可以无限提升,但是区块链是以相对的低效率来换取公正,主流的公有链每秒只能处理几笔到几十笔交易

consistency

介绍完了Coherence和Consensus共识,我们来看consistency一致性,也就是我们平时说的最多的CAP、BASE、ACID之类。
最简单的,客户端C1将系统中的一个值K由V1更新为V2,客户端C2/C3/C4需要立即读取到K的最新值。

一致性要求的是一致,并不是正确,如果所有节点给出一个"错误"的答案,那也叫一致性

对于不同的场景,用户角度对于一致性的要求是不一样的,例如:

  • 1.银行系统:你在柜台存了一笔钱,同时你的朋友转账给你一笔钱,你的女朋友同时又在淘宝消费了一笔钱,你可能会感觉很乱,但你相信,最后你的余额一定是对的,银行可以慢一点,但不会把钱搞错。
  • 2.电商系统:你在淘宝看到一个库存为5的衣服,然后你快速下单,但是被提示"库存不足,无法购买",你会觉得自己动作太慢,被人抢走了,不太关心库存为啥显示5
  • 3.论坛小站:你注册一个论坛,需要手机验证码,点完发送之后,一直没有响应,过了一天你才收到了这条短信,不过小站而已,不注册也就罢了。

上面是夸张了的用户情况,在实际业务中,一致性也是分等级的,如强一致行和弱一致性,怎么使用要看具体和系统的容忍度。
强一致性和弱一致性只是一种统称,按照从强到弱,可以划分为:

  • 1.线性一致性Linearizability consitency,也叫原子性
  • 2.顺序一致性Sequential consistency
  • 3.因果一致性Causal consistency
  • 4.最终一致性Eventual consistency

强一致性包括线性一致性和顺序一致性,其他的如最终一致性都是弱一致性。
关于强和弱的定义,可以参考剑桥大学的slide

Strong consistency
- ensures that only consistent state can be seen.
* All replicas return the same value when queried for the attribute of an object. This may be achieved at a cost - high latency.Weak consistency
- for when "fast access" requriement domainates
* update some replica, e.g. the closest or some designated replica
* the update replica sends up date messages to all other replicas.
* different replicas can return different values for the queried attribute of the value should be returned ,or "not known", with a timestamp
* in the long term all updates must propagte to all replicas ....

强一致性集群中,对任何一个节点发起请求都会得到相同的回复,但将产生相对高的延迟。而弱一致性具有更低的响应延迟,但可能会回复过期的数据,最终一致性即是经过一段时间后会达到一致的弱一致性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级炫酷的个人主页or引导页

高级炫酷个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html><html lang"zh-CN"><head><meta charset"utf-8"><meta content"yes" name"apple-mobile-web-app-capable"> &l…

shiro_attack工具-shiro反序列化漏洞的快速检测和利用

shiro反序列化漏洞的快速检测和利用 前言 今天分享一个好用的渗透测试工具&#xff0c;主要是针对shiro框架漏洞的&#xff0c;它可以自动的爆破shiro密钥&#xff0c;同时可以写入大马&#xff0c;本人实战中觉得很好用&#xff01;&#xff01;&#xff01; 工具名称 shi…

2024年网络安全威胁

随着2024年的到来&#xff0c;数字世界的版图正在以前所未有的速度扩张&#xff0c;引领我们进入一个技术革新的新时代。然而&#xff0c;这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代&#xff0c;深入了解这些新兴的威…

相约蓉城 | 全视通邀您参加 CHCC 2024第25届全国医院建设大会

第25届全国医院建设大会暨国际医院建设、装备及管理展览会&#xff08;CHCC2024&#xff09;&#xff0c;将于5月17日-19日在成都中国西部国际博览城盛大启幕。 全视通将携智慧病房、智慧门诊、智慧手术室、智慧后勤、智慧康养等产品方案亮相11号厅K05展位&#xff0c;期待与您…

乡村振兴与农村基础设施建设:加大投入力度,提升建设水平,完善农村基础设施网络,打造宜居宜业的美丽乡村

一、引言 乡村振兴战略是我国在新时代推进农业农村现代化的重大战略部署&#xff0c;其核心目标是实现乡村的全面振兴&#xff0c;促进农业强、农村美、农民富。农村基础设施建设作为乡村振兴的基石&#xff0c;其建设水平直接关系到乡村经济的持续健康发展、乡村环境的改善以…

vue-pure-admin项目内复制文字粘贴到word中之后存在边框问题

vue-pure-admin项目内复制文字粘贴到word中之后存在黑色边框是由于reset.scss文件内设置了通配符的border样式 修改前 代码 *, ::before, ::after {box-sizing: border-box;// 添加这个样式会导致复制的文字粘贴到word中带有边框问题border-color: currentColor;border-styl…

mxnet.image.resize_short()函数详解

mx.image.resize_short是MXNet中用于调整图像大小的一个函数。它将图像的短边调整到指定的长度&#xff0c;同时保持图像的宽高比。函数定义如下&#xff0c; mx.image.resize_short(src, size, interp2) src&#xff1a;输入的图像&#xff0c;可以是NDArray或者numpy.ndarr…

数据结构链表详解(不仅顺序表可以,我链表也可以)

目录 顺序表的缺点&#xff1a; 链表 链表的概念及其结构 链表的分类 链表的实现 链表形式&#xff1a; 节点的创建: 链表的增删&#xff1a; 尾插 头插 尾删 头删 查找 打印 链表的重点 1、尾删&#xff1a;则是需要找到尾节点&#xff0c;进行删除 2、头删&a…

智能决策引擎架构设计

智能决策引擎概述 智能决策引擎系统是在大数据支撑下,根据行业专家经验制定规则策略、以及机器学习/深度学习/AI领域建立的模型运算,对当前的业务进行全面的评估,并给出决策结果的一套系统。 一套商业决策引擎系统动辄百万而且需要不断加钱定制,大多数企业最终仍会走上自研…

Springboot整合 Spring Cloud OpenFeign

1.OpenFeign简介 1.相比于Netflix Feign&#xff0c;OpenFeign支持Spring MVC注解&#xff0c;整合了Ribbon(springcloud在Hoxton.M2 RELEASED版本之后舍弃Ribbon。需手动引入spring-cloud-loadbalancer)和Nacos。 2.使得开发人员调用远程接口或者服务之间相互调用就像调用本地…

威纶通触摸屏下载项目文件后,文本都变成了框框的解决办法

威纶通触摸屏下载项目文件后,文本都变成了框框的解决办法 我们在用Easy builder pro编辑某些项目的情况下,编译没问题,为什么下载到触摸屏之后,文本都变成了框框了呢? 分析:: 不能正常显示文本的原因是字体文件缺失。 解决办法: 如下图所示,在Easy builder pro软件中,…

丑萌的黏土滤镜爆火,这款APP冲到了排行榜第一

你最近是否在社交软件上看到过黏土风格图片呢&#xff1f;突出的面部线条&#xff0c;宛如橡皮一样富有弹性的质感&#xff0c;不少人都用自己的照片或者一些出名表情包进行了恶搞。而掀起这股风潮的&#xff0c;就是一款Remini的AI修图软件。 聊起AI作图&#xff0c;相信不少人…

C++知识点总结(32):STL(vector)练习

STL&#xff08;vector&#xff09;练习题单 一、vector 基本操作题目描述输入描述输出描述样例参考答案 二、杨辉三角三、中位数题目描述输入描述输出描述样例参考答案 一、vector 基本操作 题目描述 给定一个长度为 n n n 的序列 a a a。现在有 m m m 次操作&#xff1a;…

Qt自定义QpushButton分别在c++/python中实现

//.h文件#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPainter> #include<QMouseEvent> #include<QPropertyAnimation> #include<QResizeEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; }class Widget : public QWi…

ue引擎游戏开发笔记(38)——实现敌人接收攻击伤害,并作出反应

1.需求分析&#xff1a; 现在已经显示造成实际伤害&#xff0c;但敌人对实际伤害并未产生反馈&#xff0c;例如还击&#xff0c;或者死亡倒地等等&#xff0c;实现敌人对于受击的反馈。 2.操作实现&#xff1a; 1.思路&#xff1a;在动画蓝图中添加死亡动画&#xff0c;并通过…

食堂供餐 - 二分查找

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、补充说明四、java代码五、测试用例前言 本人最近再练习算法,所以会发布自己的解题思路,希望大家多指教 一、题目描述 某公司员工食堂以盒饭的方式供餐。 为将员工取餐排队时间降为0,食堂…

ESP8266-01模块继电器制作手机APP远程遥控智能开关

资料下载地址&#xff1a; ESP8266-01模块继电器制作手机APP远程遥控智能开关 这是一款使用ESP8266-01模块继电器制作手机APP远程遥控智能开关&#xff0c;它能实现远程遥控、定时、倒计时控制。电路简单&#xff0c;适合新手入门制作&#xff0c;下图是用这个智能开关制作的小…

OpenAI 推出 GPT-4o:实现多模态 AI 交互

一、前言 OpenAI 推出了其最新的 AI 模型——GPT-4o&#xff0c;此次发布的并非 GPT-4.5 或 GPT-5&#xff0c;而是一款全新的“全模态模型(Omnimodel)”。这是一个将文本、语音和视觉能力集成到单一无缝 AI 体验中的突破性发展。 GPT-4o 于 2024 年 5 月 14 日发布&#xff0…

Ubuntu 配置Samba

Ubuntu 配置&#xff1a; 安装 Samba &#xff1a; sudo apt-get install samba添加用户并设置密码&#xff08;可与ubuntu用户密码相同方便记忆&#xff09; sudo smbpasswd -a root这里我设置的密码为123456 sudo vi /etc/samba/smb.conf注意这个共享的目录一定要存在\ho…

WSL2-Ubuntu(深度学习环境搭建)

1.在Windows的WSL2上安装Ubuntu 流程可参考&#xff1a;https://www.bilibili.com/video/BV1mX4y177dJ 注意&#xff1a;中间可能需要使用命令wsl --update更新一下wsl。 2.WSL数据迁移 按照下面流程&#xff1a;开始菜单->设置->应用->安装的应用->搜索“ubun…