分布式系统(三)——分布式共享内存和顺序一致性
来源:互联网 发布:怎么才能加入淘宝 编辑:程序博客网 时间:2024/06/18 18:51
本文主要介绍分布式中的一致性原则和分布式共享内存
文章中的内容全部来源于清华大学分布式课程网站,课程主页http://thu-cmu.cs.tsinghua.edu.cn/curriculum/dscourse/index.html
什么是一致性
简单的来说,一致性就是一方面保证所有的读取都能看到正确的写入内容,即数据的正确性或者说是完整性(这点类似于数据库中的事务),另一方面,在分布式系统中,一致性还意味着同一数据的副本应该保持一致。
分布式共享内存
这里,我们介绍两种分布式共享内存,一种是分布式共享内存,另外一种是naive分布式共享内存
简单的分布式共享内存
所有的进程去访问一个共享内存,这个共享内存是虚拟的,他可能分布在不同的物理机上,其实可以理解为一种抽象,他整合了所有的存储资源,然后所有的调度、分配、读写都对程序员是隐藏的,他提供给程序员的就是一个虚拟的内存块(或者内存管理平台),程序员就可以向操作一块磁盘一样去在上进行编程或者其他的行为,这有点类似于云计算的思想。
naive分布式共享内存
每一个机器都有一个存储内容的本地副本,读取操作我们可以从本地内存进行读取,写入操作我们可以现在本地下入之后,再通过广播向其他的内存块发送update消息。
我们可以看到naive方式的共享内存速度是非常快的,因为他不需要去跟其他的用户进行交流,省去了通信的消耗。
但是,假设我们由下面这样一段待执行的代码
M0: v0=f0(); done0=1;M1:while(done0==0) ; v1=f1(v0); done1=1;M2:while(done1==0); v2=f2(v0,v1);
m0、M1、M2分别表示这段代码执行位置,分别在三块不同的内存上执行,而且我们会看到这段代码有着严格的执行顺序的,那就是M0M1M2,假设我们用naive分布式共享内存,那么就可能出现下面两种情况:
1、m0已经完成了,但是由于网络错误,done0==1,但是v0的值没有更新
2、M2在M0写之前看到了M1写入的内容
严格一致性
严格一致性是每一次读取都能读到最近写入的一切数据,前提条件是每一个操作都会顺时完成,不存在网络延迟等。
因此,单机编程实现的永远是严格一致性模型所表现的,但是下面这段代码却不是严格一致性所允许的。因为,我们读取了0值,但是w(x)已经把X更新为1了
P0: w(x) 1P1: r(x)0 r(x)1
顺序一致性
由于严格一致性太过于严格,在分布式系统中太难保存,因此,我们需要一个相对宽松的一致性模型,那就是顺序一致性,顺序一致性需要保证两点
一、在单机内部(在一个机器内),操作的执行是按序执行,而且单机产生的结果必定是一定的
二、所有的机器看到的执行顺序是一致的,但是允许有延迟存在,即机器B把x变成了,但是其他的机器读的是0,这是符合要求,但是如果有一个机器读的是1,那么这就违反了顺序一致性
- 分布式系统(三)——分布式共享内存和顺序一致性
- 分布式系统常见问题总结(三)- 一致性协议和算法
- 分布式系统一致性问题和一致性算法
- 分布式系统架构(二)——一致性协议
- 分布式系统---分布式一致性协议
- 分布式系统基本概念-----副本一致性和分布式系统衡量指标
- 分布式系统中的一致性
- 分布式系统一致性研究
- 分布式系统一致性
- 分布式系统一致性
- 分布式系统事务一致性
- 分布式系统一致性、可用性
- 分布式系统事务一致性
- 分布式系统阅读笔记(十五)-----协调和一致性
- 分布式系统中的一致性和可用性
- 分布式系统中的一致性和可用性
- 分布式系统副本复制和一致性
- 分布式系统中的一致性和可用性
- strcpy
- linux下线程的分离状态和结合状态
- 50道编程小题目之【水仙花数】
- 系统内存不足,安装软件失败
- HTML5+规范:Downloader(管理网络文件下载任务)
- 分布式系统(三)——分布式共享内存和顺序一致性
- Java 多线程学习笔记 (一)interrupt
- Android 编码问题
- 【FFMPEG】网络流媒体协议
- 使用node.js的Crypto模块Hmac算法对信息进行认证
- QT串口通信(1)
- TMS320C6748数据手册中文版第三章
- 我的PHP笔记(杂二)
- 傅里叶变换和逆变换公式的我理解意义