目录
2.1 零售和电子商务应用 – 基于Cosmos DB 的零售业和电子商务应用场景
2.3 无服务器应用 – 基于Cosmos DB 的无服务器应用场景
2.4 物联网(IoT)应用 – 使用 Cosmos DB 的 IoT
2.5 应用程序开发 – 基于 Cosmos DB 的全球分布式应用程序开发场景
1.Azure CosmosDB概述
Azure Cosmos DB 是一种任何规模的全球分布式多模型数据库服务。该服务从一开始就将全球分布和横向缩放作为其核心。
通过跨任意数量的 Azure 区域的统包全球性分布,Azure Cosmos DB 可以以透明方式缩放和复制数据(无论用户位于何处)。在全球范围内对写入和读取进行弹性缩放,并仅对所需资源付费。Azure Cosmos DB 为 NoSQL 和 OSS API 提供本机支持,包括 MongoDB、Cassandra、Gremlin、etcd、Spark 和 SQL。它还提供多种定义完善的一致性模型,保证 99% 情况下低至个位数的毫秒级读写延迟,并保证全球任意位置的 99.999% 多宿主高可用性 – 所有功能均由业界领先的综合 SLA 提供支持。
Azure Cosmos DB 是一种完全托管的服务,使你可将操作和缩放分布式数据库的管理负担卸载到 Azure,因此不必担心管理 VM、硬件预配、设置和配置、容量、复制、软件修补或群集缩放。
通过 Azure Cosmos DB,可将数据库配置为全球分布式,并使其可在任何 Azure 区域中使用。为了最小化延迟,请将数据放置在更靠近用户的位置。
Azure Cosmos DB 以透明方式将数据复制到与 Azure Cosmos DB 帐户关联的所有区域。它提供全球分布式 Azure Cosmos DB 数据库和容器的单个系统映像,使应用程序能够在本地读取和写入。
使用统包全球性分布可以随时添加或删除与帐户关联的区域。无需暂停或重新部署应用程序即可添加或删除区域。通过由服务本机提供的多宿主功能来维持高可用性。
Azure Cosmos DB 通过某种选择范围来实现数据一致性,而不是走非常一致性和最终一致性这两种极端。从一致性范畴的五个定义完善的模型中进行选择:
- Strong
- 有限过期
- 会话
- 一致前缀
- 最终
每个模型都由综合 SLA 提供支持。
作为全球分布式数据库,Azure Cosmos DB 提供综合性的 SLA,涵盖了吞吐量、99% 时间内的延迟、一致性和高可用性。
Azure Cosmos DB 以透明方式在与 Azure Cosmos DB 帐户关联的所有 Azure 区域之间复制数据。该服务为数据应用多层冗余
2.基于Azure CosmosDB解决方案架构与应用场景
2.1零售和电子商务应用 –基于Cosmos DB 的零售业和电子商务应用场景
支持对各种产品目录、流量峰值和快速变化的库存进行深入查询。
弹性缩放数据库,使之适应不可预测的流量突增情况,并在全球范围内提供低延迟的多玩家体验。
2.3无服务器应用 –基于Cosmos DB 的无服务器应用场景
使用 Azure Functions 和 Azure Cosmos DB 构建可缩放的全球分布式无服务器应用程序。
2.4物联网(IoT)应用 – 使用Cosmos DB 的 IoT
即时进行弹性缩放,以适应各种不可预测的 IoT 工作负载,不影响引入或查询性能。
2.5应用程序开发– 基于 Cosmos DB 的全球分布式应用程序开发场景
利用 Microsoft 全球数据中心内置的高可用性和低延迟功能,保证世界各地用户的访问权限。
利用CosmosDB的低延迟特性和可优化的一致性设置为客户实时生成个性化的建议,以提供即时见解
适用于 Redis 的 azure 缓存完全补充了 Azure 数据库服务,如 Cosmos DB。 它提供经济高效的解决方案来扩展数据层的读取和写入吞吐量。 使用公共缓存端模式存储和共享数据库查询结果、会话状态、静态内容等。
- 预见性维护
- 维护资产(例如在从小型钻井平台到深水平台中使用的压缩机)是一项复杂的工作。 这些资产位于全球,生成数 PB 的数据。 可以使用 Azure Cosmos DB 构建端到端预测性数据管道,该管道使用 Spark 流式处理来处理大量的传感器遥测数据、存储资产部件以及传感器映射数据。
- 可以构建并部署机器学习模型,以便在资产故障发生之前预测它们,以及在故障发生之前发出维护工作订单。
- 制造和 IoT
可以通过 Azure Cosmos DB 的内置分析平台对来自全球数百万台设备的 IoT 数据进行实时分析。 可以进行各种现代创新,例如天气模式预测、预测分析、能源优化。
- 可以使用 Azure Cosmos DB 来挖掘数据(例如实时资产指标和天气因素),然后应用智能电网分析来优化现场连接设备的性能。 智能电网分析是控制运营成本、提高电网可靠性以及向使用者提供个性化能源服务的关键。
- 零售和日用消费品
- 可以使用 Azure Cosmos DB 中的 Spark 支持提供实时建议和套餐。 可以通过实时个性化和产品建议帮助客户发现所需商品。
- 可以使用 Apache Spark 运行时提供的内置机器学习支持跨产品目录生成实时建议。
- 可以通过挖掘点击流数据、购买数据和客户数据,提供可以提高顾客终生价值的针对性建议。
- 可以利用 Azure Cosmos DB 的全球分布特性,在数毫秒内分析完大量分布在多个区域的产品数据。
- 可以快速获取分布在各地的用户和数据的见解。 可以在正确的时间为正确的用户提供正确的广告,提高促销转化率。
- 可以利用内置的 Spark 流式处理功能,将其与静态客户数据组合使用,以便丰富实时数据。 这样就可以根据客户当前的操作提供更个性化且更具针对性的实时广告。
- 游戏
- Azure Cosmos DB 内置了Spark 支持,可以用来轻松地快速构建、缩放和部署高级分析和机器学习模型,尽可能构建最佳游戏体验。
- 你可以分析玩家、购买和行为数据,创建相关的个性化套餐,以便获得高转化率。
- 可以使用Spark 机器学习分析游戏遥测数据并获得相关见解。 可以诊断和预防加载时间过长的问题以及游戏中的问题。
3.Azure CosmosDB特点
如今的应用程序需要具备高响应能力并始终联机。 若要实现低延迟和高可用性,需要在靠近用户的数据中心部署这些应用程序的实例。 这些应用程序通常部署在多个数据中心,称为全球分布式应用程序。 全球分布式应用程序需要全球分布式数据库,以便在全球范围内以透明方式复制数据,从而确保应用程序能在靠近用户的数据副本上执行操作。
Azure Cosmos DB 是一个全局分布式数据库服务,旨在提供低延迟、吞吐量弹性缩放和明确定义的语义,以实现数据一致性和高可用性。 简而言之,如果你的应用程序需要在世界各地的任何地方保证快速响应时间,则如果要求始终处于联机状态,并且需要吞吐量和存储的无限制和弹性可伸缩性,则应 Azure Cosmos DB 上生成应用程序。
可将数据库配置为全局分布,并使其可在任何 Azure 区域中使用。 若要降低延迟,请将数据放置在用户所在的位置附近。 选择所需的区域数目取决于应用程序的全球覆盖范围以及用户所处的位置。 Cosmos DB 以透明方式将数据复制到与 Cosmos 帐户关联的所有区域。 它提供全局分布式 Azure Cosmos 数据库和容器的单个系统映像,使应用程序能够在本地读取和写入。
使用 Azure Cosmos DB 可以随时添加或删除与帐户关联的区域。 无需暂停或重新部署应用程序即可添加或删除区域。 由于服务提供本机提供的多宿主功能,因此它一直是高度可用的。
图: Azure Cosmos DB作为一种多模型,多API的全球分布式数据库平台
Azure Cosmos DB本机支持多个数据模型,如图所示;Azure Cosmos DB数据库引擎的核心类型系统是基于原子记录序列(ARS)的。原子由少量原始类型(例如字符串,布尔值,数字等)组成,记录是结构,而序列是由原子,记录或序列组成的数组。Azure Cosmos DB的数据库引擎能够有效地将数据模型转换和投影到基于ARS的数据模型上。Azure Cosmos DB的核心数据模型可以通过动态类型化的编程语言进行本地访问,并且可以使用JSON或其他类似表示形式按原样公开。该设计还使本地支持流行的数据库API进行数据访问和查询。Azure Cosmos DB的数据库引擎当前支持DocumentDB SQL,MongoDB,Azure表存储和Gremlin图查询API。我们打算将其扩展为也支持其他流行的数据库API。关键好处是,开发人员可以继续使用流行的OSS API来构建其应用程序,但可以获得经过实战测试和全面管理的全球分布式数据库系统的所有好处。
开发人员可以通过使用Azure订阅配置数据库帐户来开始使用Azure Cosmos DB 。一个数据库帐户管理一个或多个数据库。Azure Cosmos DB数据库依次管理用户,权限和容器。Azure Cosmos DB 容器是与模式无关的容器,其中包含任意用户生成的实体以及存储过程,触发器和用户定义的函数(UDF)。客户数据库帐户下的实体(数据库,用户,权限,容器等)被称为资源。
每个资源均由稳定且逻辑的URI唯一标识,并表示为JSON文档。使用Azure Cosmos DB的应用程序的整体资源模型是根植于数据库帐户下的资源的分层覆盖,可以使用超链接进行导航。除了用于表示用户定义的任意内容的项目资源外,所有其他资源都具有系统定义的架构。项目资源的内容模型基于前面所述的原子记录序列(ARS)。容器和物料资源都将进一步预测如表1所示,作为特定类型API接口的资源化类型。例如,在使用面向文档的API时,容器和项目资源分别被投影为集合(容器)和文档(项目)资源;同样,对于面向图的API访问,将基础容器和项目资源分别投影为图(容器),节点(项目)和边缘(项目)资源;使用键值API进行访问时,将投影表(容器)和项目/行(项目)。
API | 集装箱预计为… | 项目预计为… |
DocumentDB SQL | 采集 | 文献 |
MongoDB | 采集 | 文献 |
Azure表存储 | 表 | 项目 |
格林姆林 | 图形 | 节点和边缘 |
Azure Cosmos DB 容器内的所有数据(例如集合,表,图形等)均由资源分区进行水平分区和透明管理。资源分区是由客户分区的一致且高度可用的数据容器指定的分区键; 它为其管理的一组资源提供单个系统映像,并且是可伸缩性和分布的基本单位。Azure Cosmos DB旨在让客户根据不同地理区域的应用程序流量模式灵活地扩展吞吐量,以支持随地理位置和时间而变化的不断变化的工作负载。系统透明地管理分区,而不会影响Azure Cosmos DB容器的可用性,一致性,延迟或吞吐量。
客户可以通过以编程方式在Azure Cosmos DB容器上以每秒或每分钟的粒度配置吞吐量来灵活地扩展容器的吞吐量。在内部,系统透明地管理资源分区,以在给定容器上交付吞吐量。使用资源的水平分区来弹性扩展吞吐量需要每个资源分区能够为给定的系统资源预算交付总吞吐量的一部分。由于Azure Cosmos DB容器是全局分布的,因此Azure Cosmos DB确保容器的吞吐量可在其值更改后的几秒钟内在分布容器的所有区域中使用。客户可以预配置吞吐量(使用货币单位衡量)两者都在Azure Cosmos DB容器上称为请求单位或RU)。
- 逻辑分区
逻辑分区包含一组具有相同分区键的项。 例如,在所有项都包含 City 属性的容器中,可以将 City 用作容器的分区键。 具有特定值 City的项的组,如 London、Paris和 NYC,构成不同的逻辑分区。 删除基础数据时,不必担心删除分区。
在 Azure Cosmos DB 中,容器是基本的缩放单元。 添加到容器中的数据以及在容器上预配的吞吐量会自动(水平)分区在一组逻辑分区中。 数据和吞吐量根据你为 Azure Cosmos 容器指定的分区键进行分区。 有关详细信息,请参阅创建 Azure Cosmos 容器。
逻辑分区还定义数据库事务的作用域。 您可以通过使用带有快照隔离的事务来更新逻辑分区内的项。 将新项添加到容器时,系统将以透明方式创建新的逻辑分区。
- 物理分区
通过跨大量逻辑分区分配数据和吞吐量,可对 Azure Cosmos 容器进行扩展。 在内部,一个或多个逻辑分区映射到由一组副本(也称为副本集)组成的物理分区。 每个副本集托管 Azure Cosmos 数据库引擎的一个实例。 副本集使存储在物理分区中的数据持久、高度可用且一致。 物理分区支持最大存储量和请求单位(ru)。 构成物理分区的每个副本都继承分区的存储配额。 物理分区的所有副本共同支持分配给物理分区的吞吐量。
客户的资源沿两个维度分布:在给定区域内,所有资源都使用资源分区(本地分布)进行水平分区。每个资源分区也跨地理区域(全球分布)进行复制。
当客户灵活地扩展吞吐量或存储时,Azure Cosmos DB透明地在所有区域中执行分区管理操作。与规模,分布或故障无关,Azure Cosmos DB继续提供全局分布资源的单个系统映像。Azure Cosmos DB中的资源的全球分配是交钥匙的:在任何时候单击几下按钮(或通过编程调用一个API),客户都可以将任何关联数据库帐户所在的地理区域数。无论数据量或区域数量如何,Azure Cosmos DB都保证每个新关联的区域都可以在一个小时内以99%的百分比开始处理客户端请求。这是通过并行处理从所有源资源分区到新关联区域的种子数据和复制数据来完成的。客户还可以删除现有区域或采用先前与其数据库帐户“脱机”相关联的区域。
客户还可以将“优先级”动态关联到与其数据库帐户关联的区域。优先级用于在区域发生故障时将请求定向到特定区域。万一发生区域性灾难,Azure Cosmos DB将按照优先级自动进行故障转移。为了测试应用程序的端到端可用性,客户可以手动触发故障转移(速率限制在一小时内进行两次操作)。在客户触发区域故障转移的情况下,Azure Cosmos DB保证零数据丢失;在区域灾难期间,如果系统触发了自动故障转移,则Azure Cosmos DB保证了数据丢失的上限。区域故障转移时无需重新部署应用程序,并且维护可用性SLA。为了这,Azure Cosmos DB允许开发人员使用逻辑(与区域无关)或物理(与区域特定)终结点与资源进行交互。前者确保在故障转移的情况下可以透明地将应用程序多宿主。后者为应用程序提供细粒度的控制,以将读取和写入重定向到特定区域。Azure Cosmos DB保证每个数据库帐户具有99.99%的可用性SLA。可用性保证与规模(与客户数据库关联的吞吐量和存储),区域数量或与给定数据库关联的区域之间的地理距离无关。后者为应用程序提供细粒度的控制,以将读取和写入重定向到特定区域。Azure Cosmos DB保证每个数据库帐户具有99.99%的可用性SLA。可用性保证与规模(与客户数据库关联的吞吐量和存储),区域数量或与给定数据库关联的区域之间的地理距离无关。后者为应用程序提供细粒度的控制,以将读取和写入重定向到特定区域。Azure Cosmos DB保证每个数据库帐户具有99.99%的可用性SLA。可用性保证与规模(与客户数据库关联的吞吐量和存储),区域数量或与给定数据库关联的区域之间的地理距离无关。
作为其SLA的一部分,Azure Cosmos DB确保向客户提供99%的端到端低延迟。对于典型的1KB项,Azure Cosmos DB保证在同一Azure区域内第99个百分位处的10ms以下读取和15ms以下的索引写入的端到端延迟。平均等待时间明显较低(不到5毫秒)。通过对每个数据库事务进行请求处理的上限,Azure Cosmos DB允许客户端清楚地区分高延迟事务与数据库不可用之间的区别。
当前可用的商业分布式数据库分为两类:(1)不提供定义明确,可证明的一致性选择的数据库,或(2)提供两个极端一致性选择的数据库-强一致性还是最终一致性。以前的系统给应用程序开发人员带来了复制协议的细节,并希望他们在一致性,可用性,延迟和吞吐量之间进行艰难的权衡。后一种系统给应用程序开发人员施加压力,要求他们在这两种极端之间进行选择。尽管对众多一致性模型进行了大量的研究和提议,但商业分布式数据库服务仍无法实现超出强大且最终一致性的一致性级别。强大,有限的陈旧性,会话,一致的前缀和最终的。
使用Azure Cosmos DB的开发人员可以在其数据库帐户上配置默认一致性级别(并在以后的特定读取请求中覆盖一致性)。在内部,默认一致性级别适用于分区集中可能是跨度区域的数据。我们约73%的客户使用会话一致性,而20%的客户则喜欢有限的陈旧性。我们观察到,大约有3%的客户最初会尝试各种一致性级别,然后再为其应用程序选择特定的一致性选择。我们还观察到,平均而言,每个请求中只有2%的客户超过了一致性级别。为了向客户报告任何违反一致性SLA的情况,我们采用了线性化检查器,该检查器可通过我们的服务遥测不断进行操作。为了避免陈旧,我们会监控并报告对k和t范围的任何违反情况。对于所有四个宽松的一致性级别以及其他指标,我们还跟踪并报告了概率有界陈旧度(PBS)指标。
Azure Cosmos DB旨在允许客户根据跨不同区域的应用程序流量模式来弹性扩展吞吐量,以支持随地理位置和时间而变化的不断变化的工作负载。要经济高效地运行成千上万的全球分布式工作负载,需要细粒度的多租户,其中数百个客户共享同一台计算机,而成千上万个共享同一集群。为了在为每个客户提供性能隔离的同时,以经济高效的方式运营,我们从头开始设计整个系统,同时考虑了资源管理。作为资源控制的系统,Azure Cosmos DB是一个大规模分布的排队系统,具有级联的组件阶段,每个组件均经过仔细校准以提供可预测的吞吐量,同时在分配的系统资源预算范围内运行。为了优化利用给定群集中可用的系统资源(CPU,内存,磁盘和网络),群集中的每台计算机都能够动态托管10到100的客户。速率限制和背压贯穿整个堆栈,从准入控制到所有I / O路径。我们的数据库引擎旨在利用细粒度的并发并在不消耗大量系统资源的情况下提供高吞吐量。
在一个时间单位(即吞吐量)内发出的数据库操作数是保留和消耗系统资源的基本单位。客户可以根据他们的数据执行各种数据库操作。根据操作类型和(请求和响应)有效负载的大小,操作可能会消耗不同数量的系统资源。为了提供规范化的模型来计算请求消耗的资源,与给定资源分区需要交付的吞吐量相对应的预算系统资源,并以与硬件无关的方式一致地向客户收取各种数据库操作的吞吐量已经为吞吐量定义了一种基于抽象费率的货币,称为请求单位或RU(复数,RU(请参阅图7),根据时间粒度有两种面额可用- 请求单位/秒(RU / s)和每分钟请求单位(RU / m)。客户可以通过在容器上以编程方式配置RU / s(和/或RU / m)来弹性地扩展容器的吞吐量。在内部,系统管理资源分区以在给定容器上交付吞吐量。使用资源的水平划分来弹性地扩展吞吐量要求每个资源分区能够为给定的系统资源预算提供全部吞吐量的一部分。
作为准入控制的一部分,每个资源分区都采用自适应速率限制。如果资源分区在一秒钟内收到的请求数量超过了其校准的数量,则客户端将收到“请求速率太大”的退避间隔,在此间隔之后客户端可以重试。在每秒内,资源分区在RU(如果有)的备用容量内执行(限速)后台杂事(例如日志结构化数据库引擎的后台GC,进行定期快照备份,删除过期项等)。一旦请求被接受,我们将考虑每个微操作(例如,分析项目,读/写页面或执行查询运算符)消耗的RU。
- SQL(核心)API
轻松构建新应用。Azure Cosmos DB 包括对 SQL(核心)API 和 JavaScript 的本机支持。Azure Cosmos DB SQL API 提供正式的编程模型,用于对 JSON 项进行丰富查询。Azure Cosmos DB 查询语言基于 JavaScript 编程模型,SQL API 根植于 JavaScript 类型系统、表达式计算和函数调用。
- Cassandra API
使用 Azure Cosmos DB 的功能将 Cassandra 作为服务提供。使用 Cassandra SDK 和工具(包括现有驱动程序),通过 Azure Cosmos DB 平台的 SLA 支持功能,在近乎无限的全球范围内生成应用程序。
- 适用于 MongoDB 的 Azure Cosmos DB API
使用 Azure Cosmos DB 作为 MongoDB 应用的完全托管的数据库服务,几乎无需更改代码,并为 MongoDB 数据提供本机 API 支持,让应用享有云本机平台带来的好处。
- Gremlin API
无需更改任何代码即可利用 Azure Cosmos DB 上的本机图形数据模型支持,并使用 Gremlin API 发出全球分布式图形查询。
- 表 API
使用 Azure Cosmos DB 作为基于 Azure 表存储的应用程序全球分布式数据库,通过使用表 API 无需更改任何代码。可获得辅助索引、全球分布、基于策略的故障转移以及许多其他功能。