《Windows Azure Platform 系列文章目录

  为了保证分布式数据库的高可用性和低延迟性,我们需要在可用性、延迟和吞吐量之间进行权衡。

  绝大部分的商业分布式数据库,要求开发人员选择两个极端的数据库一致性:强一致性(Strong Consistency)最终一致性(Eventual Consistency)

  强一致性(Strong Consistency)是数据库编程的黄金标准。但是却需要更高的延迟,且在故障期间可用性较低。

  另一方面,最终一致性(Eventual Consistency)提供更高的可用性,和更好的性能,但是应用编程的难度很大。

  Azure Cosmos DB 通过某种选择范围来实现数据一致性,而不会走两种极端。

  虽然强一致性和最终一致性处于极端,但在整个范围中有许多一致性选择。 开发人员可以使用这些选项在高可用性或性能方面做出精确的选择和细致的取舍。

  借助 Azure Cosmos DB,开发人员可以在一致性范围内从五个明确定义的一致性模型中进行选择。

  从最强到最弱,这些模型为“Strong”、“Bounded Staleness”、“Session”、“Consistent Prefix”和“Eventual Consistency”。

  模型定义明确且直观。 它们可用于特定的真实场景。 每个模型均提供可用性和性能权衡,并由综合 SLA 提供支持。 下图以范围区间形式显示了不同的一致性级别。

  

  一致性级别与区域无关。 无论从哪个区域提供读取和写入、与 Azure Cosmos 帐户关联的区域数量是多少或帐户是配置了单个还是多个写入区域,所有读取操作都保证 Azure Cosmos DB 帐户的一致性级别。

  与一致性级别关联的保证

  Azure Cosmos DB 提供的综合 SLA 可保证 100% 的读取请求满足所选任何一致性级别的一致性保证。 如果满足与一致性级别关联的所有一致性保证,则读取请求满足一致性 SLA。

  

  下面描述了5种一致性级别的描述:

  Strong (强一致性): 强一致性保证读取操作,总是返回最新提交的版本。客户端永远不会看到未提交或者不完整的写入。始终保证用户读取最新提交的写入操作

  Bounded Staleness: 读取操作(Read)可以晚于写入操作(Write) 最多K个版本,或者T个时间。如果我们选择Bounded Staleness,Staleness可以通过两种方式设置:

  - 版本号K

  - 读取操作可以滞后于写入操作的时间间隔 (T)

  强一致性(Strong)的场景,和Bounded Staleness的概念类似,但是过期窗口(Staleness Windows)为0

  当客户端在接受写入的区域中执行读取操作时,Bounded Staleness的一致性提供的保证与强一致性的保证相同。

  Session(会话一致性):会话一致性的范围限制在客户端会话。

  举个例子,假设我们支持多会话(Multi Session)的场景。其中一个客户端A对CosmosDB执行增删改查操作,那该客户端仅能看到自己提交的内容。

  其他客户端B、C等,不能看到客户端A执行的操作结果

  Consistent prefix(一致性前缀):返回的更新包含所有更新的一些前缀,不带间隔。 一致前缀保证读取永远不会看到无序写入

  最终一致性(Eventual Consistency):不保证读取的顺序。 如果缺少任何进一步的写入,则副本最终会收敛。

  接下来我们举个例子:

  我们以棒球比赛为例。这场比赛目前处于第七局的中段。这是第七局的比赛。目前客队以2比5的比分落后。

  1 2 3 4 5 6 7 8 9 比分
客队 0 0 1 0 1 0 0     2
主队 1 0 1 1 0 2       5

  

  Azure CosmosDB保存主队和客队的比分。下表列出了使用五种不同的一致性情况下,读取主队和客队比分的情况。

一致性级别 说明 分数
Strong (强一致性) 返回最新提交的版本 2-5
Bounded Staleness 最多一个已过期的回合比分 2-3、2-4、2-5
Session(会话一致性) 会话一致性的范围限制在客户端会话
  • 写入者:2-5
  • 写入者以外的任何人:0-0、0-1、0-2、0-3、0-4、0-5、1-0、1-1、1-2、1-3、1-4、1-5、2-0、2-1、2-2、2-3、2-4、2-5
  • 读取 1-3 后:1-3、1-4、1-5、2-3、2-4、2-5
Consistent prefix(一致性前缀) 所有过去的写入操作 0-0、0-1、1-1、1-2、1-3、2-3、2-4、2-5
最终一致性(Eventual Consistency) 不保证读取的顺序 0-0、0-1、0-2、0-3、0-4、0-5、1-0、1-1、1-2、1-3、1-4、1-5、2-0、2-1、2-2、2-3、2-4、2-5

  

  

  如果大家有兴趣,可以参考这篇文章:https://www.microsoft.com/en-us/research/wp-content/uploads/2011/10/ConsistencyAndBaseballReport.pdf

Azure CosmosDB (2) CosmosDB中的数据一致性的更多相关文章

  1. Windows Azure 上 Linux VM 中的交换空间 – 第 2 部分

    本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 在前一篇文章 Windows Azure 上Linux VM 中的交换空间第 1 部分中,我介绍了在默认情况下, ...

  2. 【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)

    问题描述 在Azure Key Vault中,我们可以从Azure门户中下载证书PEM文件到本地. 可以通过OpenSSL把PFX文件转换到PEM文件.然后用TXT方式查看内容,操作步骤如下图: Op ...

  3. 【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式 - mv-expand

    问题描述 想对Azure中全部VM的NSG资源进行收集,如果只是查看一个VM的NSG设定,可以在门户页面中查看表格模式,但是如果想把导出成表格,可以在Azure Resource Graph Expl ...

  4. Azure CosmosDB (13) CosmosDB数据建模

    <Windows Azure Platform 系列文章目录> 我们在使用NoSQL的时候,如Azure Cosmos DB,可以非常快速的查询非结构化,或半结构化的数据.我们需要花一些时 ...

  5. 跟我学Windows Azure 四 Cloud Service中的WebRole与WorkRole,及他们之间的通信

    Cloud Service 中WebRole就相当与我们的WebSite,而WorkRole相当与我们在服务器上写了个Windows Service,站在高可用的角度上来讲,Cloud Service ...

  6. Cassandra中的数据一致性

       Cassandra中数据一致性指的是数据行在各个复制节点(replicas)上的更新和同步程度.通过提供tunable consistency,Cassandra扩展了eventual cons ...

  7. Azure开发者任务之四:在Azure SDK 1.3中挂载调试器的错误

    我安装了Windows Azure SDK的1.3版本.我试着创建了一个Azure的“Hello World”应用程序. 我按了“F5”,然后我得到了下面这个错误: 我尝试了“Ctrl+F5”:不使用 ...

  8. 还原Azure DevOps Server (TFS)中误删除的生成流水线

    流水线历史记录 DevOps Server流水线的历史记录有完善的版本日志,用户可以随时回退到修改过程中的任何一个版本,还能比较差异.这个历史记录功能可以和代码库中的版本控制媲美. 图一:生成历史记录 ...

  9. 在 Azure Resource Manager 模板中使用托管磁盘

    本文介绍使用 Azure Resource Manager 模板预配虚拟机时托管与非托管磁盘之间的差异. 这有助于将现有模板从使用非托管磁盘更新为使用托管磁盘. 我们将使用 101-vm-simple ...

随机推荐

  1. linux存储管理之文件系统

    EXT3/4文件系统 ====================================================================================Ext3: ...

  2. 正则表达式中pw、IDCard和EM匹配

    1密码强度正则 //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])( ...

  3. ProtoBuf3.3 安装记录

    翻了很多教程,下载了 PB 的源码在自己的 mac 上编译及安装,记录下新的 1. 首先是下载源码了 https://github.com/google/protobuf/releases 虽然是 g ...

  4. django2_开发web系统接口

    1.单独创建.../sign/views_if.py文件,开发添加发布会接口 from django.http import JsonResponse from cmdb.models import ...

  5. day050 django第一天 自定义框架

    1.简单的web框架 1. 创建一个简单的python文件: import socket sever=socket.socket() sever.bind(('127.0.0.1',8001)) se ...

  6. 事务理解及Spring中的事务

    一.隔离级别理解 1.脏读 首先理解,一个事务对数据进行了改变,尽管该事务尚未提交,但此时其他事务中的查询语句(注意一定是处于事务中的语句,不处于事务中的语句查到的是正常的)查到的数据,是该事务修改之 ...

  7. [转] MySql 数据类型

    转自:http://blog.csdn.net/anxpp/article/details/51284106 1.概述 要了解一个数据库,我们也必须了解其支持的数据类型. MySQL支持所有标准的SQ ...

  8. MySQL免安装版错误解决方案

    在进行mysql zip版本的安装时,遇到如下的错误 一.提示 无法启动此程序,丢失 msvcr140.dll 解决方法 下载Visual C++ Redistributable for Visual ...

  9. springcloud Eureka学习笔记

    最近在学习springcloud,抽空记录下学习笔记;主要记录Eureka的实现过程和高可用性的实现 Eureka是一个服务治理框架,它提供了Eureka Server和Eureka Client两个 ...

  10. centos7.4 可远程可视化桌面安装

    先啰嗦一下VNC是什么( Virtual Network Computing)VNC允许Linux系统可以类似实现像Windows中的远程桌面访问那样访问Linux桌面.本文配置机器是兴宁市网络信息中 ...