了解 Azure Cosmos DB 中的多区域写入

适用对象: NoSQL MongoDB Cassandra Gremlin

在不需要保证读取一致性的部分或全部中断情况下,实现近乎零停机时间的最佳方法是将帐户配置为多区域写入。 本文介绍了在配置多区域写入帐户时需要注意的关键概念。

中心区域

在具有两个或两个以上区域的多区域写入数据库帐户中,用来创建帐户的第一个区域称为“中心”区域。 添加到帐户的所有其他区域都称为“附属”区域。 如果中心区域已从帐户中删除,则会按照区域添加的顺序自动选择下一个区域作为中心区域。

到达附属区域的任何写入都是在本地区域中提交的仲裁,随后会以异步方式发送到中心区域进行冲突解决。 写入到达中心区域并解决了冲突后,将成为“已确认”写入。 在此之前,称为“暂定”写入或“未确认”写入。 从中心区域提供的任何写入都会立即成为已确认的写入。

了解时间戳

多区域写入帐户的一个主要差异是,存在两个与每个实体关联的服务器时间戳值。 第一个是在该区域中写入实体的服务器 epoch 时间。 此时间戳在单区域写入帐户和多区域写入帐户中均可使用。 第二个服务器时间戳值与确认无冲突或中心区域冲突得以解决的 epoch 时间相关联。 已确认或冲突已解决的写入具有分配的冲突解决时间戳 (crts),而未确认或暂定的写入没有 crts。 服务器设置的 Cosmos DB 中有两个时间戳。 主要区别在于帐户的区域配置是单写入还是多写入。

时间戳 含义 公开情况
_ts 写入实体的服务器 epoch 时间。 始终由所有读取和查询 API 公开。
crts 已解决多写入冲突或确认无冲突的 epoch 时间。 对于多写入区域配置,此时间戳定义了更改源的更改顺序:

  • 用于查找更改源请求的开始时间
  • 用作更改源响应中的排序顺序。
在响应更改源请求时公开,并且仅当请求启用“新建线路模型”时公开。 这是所有版本和删除更改源模式的默认设置。

后续步骤

接下来,可以阅读以下文章: