Azure CosmosDB (5) 高可用性

Stella981
• 阅读 454

Windows Azure Platform 系列文章目录

Azure Cosmos DB 透明地复制与您的Cosmos帐户关联的所有Azure区域中的数据。 Cosmos DB 对数据采用多层冗余,如下图所示:

   Azure CosmosDB (5) 高可用性

  1.CosmosDB容器中的数据已经水平分区

  2.在每个区域中,每个分区受副本集的保护,该副本集中的大多数副本将复制并以持久方式提交所有写入内容。 副本分布在最多 10 到 20 个容错域中。

  3.将复制所有区域中的每个分区。 每个区域包含某个 Cosmos 容器的所有数据分区,可接受写入并为读取提供服务。

  如果 Cosmos 帐户分布在 N 个 Azure 区域之间,则所有数据至少有 N x 4 个副本。 除了在与 Cosmos 帐户关联的区域之间提供低延迟数据访问和缩放写入/读取吞吐量以外,部署更多的区域(N 值较高)还能提高可用性。

服务的可用性SLA保障

  作为跨数据多个Azure数据中心的分布式数据库,Cosmos DB 提供综合性的 SLA,涵盖了吞吐量、99% 情况下的延迟、一致性和高可用性。 下表显示了 Cosmos DB 针对单区域和多区域帐户提供的高可用性保证。 为实现高可用性,请将 Cosmos 帐户配置为使用多个写入区域

操作类型

单区域

多区域 (单区域写入)

多区域 (多区域写入)

写入

99.99

99.99

99.999

读取

99.99

99.999

99.999

   在实践中,Bounded Staleness,Session (会话一致性),Consistent prefix (一致性前缀)和最终一致性 (Eventual Consistency)的实际下入可用性明显高于发布的SLA。所有一致性级别的实际读取可用性明显高于发布的 SLA。

使用 Cosmos DB 在遇到区域性服务中断时提供高可用性

  区域性服务中断并不少见,而 Azure Cosmos DB 可确保你的数据库始终可用。 下面根据 Cosmos 帐户配置详细汇总了 Cosmos DB 在服务中断期间的行为:

  1.使用 Cosmos DB 时,在客户端确认写入操作之前,数据将由接受写入操作的区域中的副本仲裁持久提交

  2.配置有多个写入区域的多区域帐户对于写入和读取都将具有高可用性。 区域性故障转移可在瞬间完成,不需要在应用程序中进行任何更改。

  3.配置为使用单个写入区域的多区域帐户:在发生写入区域服务中断期间,这些帐户将保持很高的读取可用性。 但是,对于写入,必须在 Cosmos 帐户中“启用自动故障转移”,才能将受影响区域故障转移到关联的另一区域。 故障转移将按指定的区域优先级顺序进行。 最终,当受影响的区域重新联机时,将通过冲突源提供在服务中断期间保留在受影响写入区域中的未复制数据。 应用程序可以读取冲突源,根据应用程序特定的逻辑解决冲突,并相应地将更新后的数据写回 Cosmos 容器。 以前受影响的写入区域恢复后,它将自动用作读取区域。 可以调用手动故障转移,并将受影响的区域配置为写入区域。 可以使用 Azure CLI 或 Azure 门户执行手动故障转移。 在手动故障转移之前、期间或之后,没有数据丢失或可用性丢失。 应用程序仍然高度可用。

  4.配置为使用单个写入区域的多区域帐户:在发生读取区域服务中断期间,这些帐户将保持很高的读写可用性。 受影响的区域将自动从写入区域断开连接,并标记为脱机。 Cosmos DB SDK 会将读取调用重定向到首选区域列表中的下一个可用区域。 如果首选区域列表中没有区域可用,则会自动让调用返回到当前的写入区域。 处理读取区域服务中断不需要对应用程序代码进行更改。 最终,当受影响区域重新联机时,以前受影响的读取区域将自动与当前写入区域同步,并再次可用于为读取请求提供服务。 后续的读取会重定向到恢复的区域,不需更改应用程序代码。 在故障转移和重新加入以前发生故障的区域期间,Cosmos DB 会持续遵循读取一致性保证。

  5.发生区域性服务中断时,单区域帐户可能会失去可用性。 建议对 Cosmos 帐户至少设置两个区域(最好是至少设置两个写入区域),以确保始终保持高可用性。

  6.即使在极其罕见的不幸事件中,发生了 Azure 区域永久无法恢复的情况,如果为多区域 Cosmos 帐户配置了默认的强一致性级别,也不可能丢失数据。 在写入区域永久无法恢复的情况下,对于配置了有限过期一致性的多区域 Cosmos 帐户,可能的数据丢失时间范围限于过期时间范围;对于会话、一致的前缀和最终一致性级别,可能的数据丢失时间范围限于最多五秒。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Azure SQL Database (26) 使用Query Store对Azure SQL Database监控
《WindowsAzurePlatform系列文章目录(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fthreestone%2Farchive%2F2012%2F01%2F06%2F2382322.html)》我们在使用Azure
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Azure EA (1) 查看国内Azure账单
《WindowsAzurePlatform系列文章目录(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fthreestone%2Farchive%2F2012%2F01%2F06%2F2382322.html)》本文介绍的是国内
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这