乐趣区

关于nosql:TA业界领先的全球分布式多模型-NoSQL-数据库

游戏开发者越来越关注全托管 NoSQL 云数据库服务。NoSQL 云数据库服务宽泛应用在游戏玩家信息和状态治理、配对、排行榜、配备财产清单、社交、埋点数据捕捉与剖析等场景,它能够在寰球范畴内提供更低提早的多玩家体验,并大幅缩小数据库治理运维工作。

《我的世界:地球(Minecraft:Earth)》、《酒囊饭袋: 无人之地(The Walking Dead: No Man’s Land)》、《光环 5:守护者》、《World War Z》、《Magic the gathering: Arena》等游戏,以及 Xbox Live、Windows Store 都采纳了 Azure Cosmos DB 数据库服务。

一句话定义:“Azure Cosmos DB is Microsoft’s globally distributed, horizontally partitioned, multi-model database service。”

Azure Cosmos DB 诞生于 2010 年,目前数以万计的客户应用 Cosmos DB 并将其配置为多区域进行寰球复制。Cosmos DB 是用于任何规模的寰球分布式多模型 NoSQL 数据库服务。所谓多模型数据库服务,意思是说数据能够以多种不同的形式存储。目前,Cosmos DB 提供 4 种数据模型,开发者能够应用 Azure 原生及开源 API、多种 SDK、主动 Schema-Agnostic 索引、寰球散布多主写入、non-ETL HTAP 剖析(无需数据抽取即可实现 OLAP)等性能个性,实现简化开发的指标。

Azure Cosmos DB 提供无可比拟的、SLA 财务承诺的性能、可用性和一致性的保障(留神:性能和一致性也有 SLA),即任何规模下 99% 工夫内读写响应工夫 <10 毫秒的性能,99.999% 的可用性以及逻辑分区范畴内 100% 读取申请满足所选一致性级别。Azure Cosmos DB 能够主动即时扩大伸缩,能够满足每秒几亿 QPS 的拜访申请。
Azure Cosmos DB 引擎应用快照隔,反对满足 ACID 的事务以及乐观并发管制(OCC)。在逻辑分区范畴内反对多记录事务,即基于 JavaScript 的存储过程、触发器、UDF 蕴含的所有数据库读写操作都能够囊括在一个满足 ACID 事务中,该事务在逻辑分区内的所有记录(我的项目)之间应用快照隔离。快照隔离能够保障读操作读取的行是事务开始时可用的最初提交版本,保障读取的是曾经提交过的数据,并且能够实现可反复读,也能确保不会幻读。

目前市场上大多数商业用途的分布式 NoSQL 数据库只能提供强一致性(Strong)和最终一致性(Eventual)。Azure Cosmos DB 复制协定提供 5 种一致性级别,按最强到最弱的程序,一致性级别别离为:强、无限过期、会话、统一前缀、最终。每个级别在可用性与性能方面各有利弊,开发者能够依据须要在 PACELC 定理定义的读取一致性、可用性、提早和吞吐量之间进行衡量。

(请留神,此处所谓一致性,是指分布式数据库多正本之间复制协定的一致性,与 ACID 中的一致性不是一回事)

Azure Cosmos DB 反对两种备份模式:间断备份和定期备份,反对 30 日以内任意工夫点复原(PIT Recovery)。

Cosmos DB 资源模型

Cosmos DB 的资源模型包含数据库账户(databaseaccount)、数据库(database)、容器(container)和记录我的项目(item)。

用户 Azure 租户订阅下能够创立一个或多个数据库帐户;一个数据库帐户治理一个或多个数据库;Cosmos DB 数据库治理用户、权限和容器,一个数据库治理一个或多个 Container;Container 治理用户的数据 items(以 JSON 格局)、和基于 JavaScript 的存储过程、触发器和用户定义函数(UDF)等。

用户能够在 Database 和 Container 高低两个层面配置解决能力资源(CPU,IOPS, 和 Memory),预配吞吐量 (RequestUnits)。Container 能够提供有限的预配吞吐量(RU/s)和存储。Container 和 item 在不同模型和 API 接口下被投射成不同资源类型。例如,在应用面向文档的 API 时,底层的 container 和 item 别离被投影为汇合(Collection)和文档(Document);对于面向图(Graph)API 拜访,底层的 container 和 item 别离投影为图(Graph)、节点(node)和边(edge);应用 Key-Value API,底层的 container 和 item 别离投影为表(table)和行(row)。

Cosmos DB 寰球散布零碎拓扑

Cosmos DB 服务部署在寰球所有 Azure 区域。如下图所示,咱们从宏观到宏观来逐渐理解它的拓扑架构。

Cosmos DB 部署在 Azure Service Fabric 之上,应用 Service Fabric 进行命名、路由、集群和容器治理、滚动降级协调、故障检测、领导者选举和负载平衡性能。Cosmos DB 部署在一个或多个 Service Fabric 群集中,每个群集都可能运行多代硬件和不同数量的机器(在 60-800 台机器之间)。

Azure Service Fabric 是微软的开源我的项目,它是 Azure 分布式系统基础架构治理服务。Azure Cosmos DB、Azure SQL 数据库、Azure Event Hubs、Azure Data Factory、Dynamics 365、Skype for Business、Intune、Cortana 等都应用 Service Fabric 作为管制立体进行调度管制治理。Service Fabric 提供云规模的高可用性和持久性服务,从实质上理解应用程序的可用基础架构和资源需要,反对主动扩大、滚动降级和故 障产生时的自我修复。

部署 Cosmos DB 服务的每台服务器都有专用的本地 SSD。与近程存储相比,本地 SSD 存储提供无可比拟的性能,能够提供 <10 微秒的提早和几百万 IOPS。集群中的机器通常散布在 10-20 个故障域(FaultDomain)中。每个故障域蕴含若干机架,它们共享电源供应和网络交换机,多正本部署于多故障域保障同一区域(Region)内硬件故障状况下集群的高可用。

每台服务器上运行成千盈百个 replica,replica 通过动静负载平衡搁置在每台服务器上。每个 replica 都托管一个 Cosmos DB 数据库引擎的实例,数据库引擎治理资源以及关联的索引。Cosmos DB 数据库引擎由组件包含:资源管理器、JavaScript 语言运行时、查问处理器、复制状态治理(RSM)、索引管理器、存储引擎、日志和 IO 管理器等。为了提供持久性和高可用性,数据库存储引擎将数据以及索引长久化存储到本地 SSD,并且在多个 Replicas 上进行备份。

Container 是一个逻辑概念,相当于一个表、文档数据库的汇合(Collection)或图(Graph)。Container 对 Schema 齐全不可知,它只提供了一个查问范畴。数据加载如 Cosmos DB 的 Container 会被主动索引。Azure Cosmos DB 应用分区来横向扩大 Container,以满足性能须要。Container 通过 hash 分区键(PartitionKey)进行数据分布,雷同 partition key 的 item 散布在一个逻辑分区(LogicPartition),每个 logic partition 存储最大 20GB 数据(设计抉择 partition key 时须要留神)。一个或多个 logic partition 映射到底层物理分区(physicalpartition),物理分区由零碎主动治理,对用户是通明的。用 container 对应的 physicalpartition 数量由预配吞吐量(RU/s)和存储的数据容量决定,每个 physicalpartition 的限度为 10000RU/s 和 50GB 数据,物理分区的总数量没有任何限度。

物理分区(physicalpartition)由一组跨多个故障域的自我管理和动静负载平衡的正本(replica)实现,称为正本集(replica-set),其中包含 1 个 leader、2 个 follower 和 2 个 forwarder。也就是说,一份数据有 4 个正本,所以读取数据用一个 1RU 的话,写入则须要 5 个 RU。每个物理分区跨天文区域复制,实现跨区域冗余。

寰球散布只读 replication 实现了就近读取数据;寰球散布多主写入(Multi-Master)replication 则实现了就近写入数据。实现 Multi-Master 的要害是解决抵触(Conflict),包含:insert conflicts、replaceconflicts、delete conflicts。Cosmos DB 提供 LastWrite Wins(LWW)和自定义抵触解决策略。

基于上述 Cosmos DB 寰球散布零碎架构,Azure Service Fabric 通过 partition 实现了 Cosmos DB 简直有限的计算和存储容量横向扩大。Cosmos DB 疾速的、SLA 反对的 <10ms 的数据读写性能,还和底层数据结构和索引设计无关。

Cosmos DB 数据结构与索引

Cosmos DB 将 JSON 数据构建成树(tree),间接对 tree 进行读写操作(而不是关系数据库中的行和列)。JSON 与 XML 不同,XML 有 Schema 规格定义阐明,JSON 没有 schema 定义。Cosmos DB 将 JSON 数据的标签(label)与值(value)交融在一起构建树,label 作为树的子 interiornode, value 作为树的 leafnode,同时减少一个虚构 root。

Cosmos DB 对树的每一个 path 进行主动索引,无论 JSON 数据是 10 层嵌套,还是 1 层键值对,零碎解决是一样的。因而,规范化的门路示意是主动索引和查问子系统实现的根底。索引与 JSON 数据的映射有两种,正排索引映射(forwardindex mapping)和倒排索引映射(invertedindex mapping)。forwardindex 保护一个(documentid, path)方向的元组映射;invertedindex 保护一个(path,document id)方向的元组映射。Forwardindex 适宜范畴或不等式条件的查问,例如过滤或排序。invertedindex 则适宜点读。

对模式不可知(SCHEMAAGNOSTIC)数据主动索引是 Cosmos DB 独特的机制,它满足了各种条件查问 <10ms 的疾速性能,而无需开发者设计 secondary indexes,从而简化了开发。

总结

Comos DB 是业界领选的具备残缺且立刻可用的寰球分布式数据库。它提供海量存储和吞吐量的可扩展性能力,99.999% 的高可用性,<10ms 的拜访提早,原生反对大规模不同类型的数据,定义明确的 5 种一致性模型,以及当先的 Non-ETL HTAP 能力。

[i] Microsoft Security: https://www.microsoft.com/en-…

[ii] IDC: 中国私有云服务市场增长领跑寰球,https://www.idc.com/getdoc.js…

[1] 信赖核心合规性文档:https://www.trustcenter.cn/en…

[2] Microsoft Azure 官方网站:https://www.azure.cn/

退出移动版