Azure Cosmos DB浅析
Azure Cosmos DB 是第一个全球分布式的多模型数据库服务, 用于构建全球范围规模应用。多年来, 它一直在为微软的互联网规模服务提供动力, 现在该数据库可供所有 Azure 开发者使用。该服务旨在允许客户在任意数量的地理区域上弹性和水平地扩展吞吐量和存储, 它提供了有保证 99% 小于10ms的延迟, 99.99% 高可用性和五种一致性模型。Cosmos DB 是当今市场上第一个全球分布式数据库服务, 并为吞吐量、延迟、可用性和一致性提供全面的服务级别协议(SLA)
优势
提供了一个简单的全球分配的NoSQL数据库,只需要点击按钮就可以在所有任意数目的Azure区域进行分发。
支持存储和吞吐量的弹性扩展。
保证低滞后时间:10 ms读取和 15 ms 索引写入。
多模型 + 多 API: 只有Cosmos DB 允许您在一个服务中使用 key-value、图形和文档数据, 在全球范围内, 无需担心模式或索引管理, 并允许您使用您喜欢的 API, 包括 SQL、JavaScript、Gremlin、MongoDB和 Azure 表存储来查询您的数据。
一致性选择: 5 种定义明确、直观和实用的一致性选择, 以最佳地优化延迟、可用性和吞吐量。
完全管理的服务与整体服务的SLA达99%, Monthly Read Availability Percentage 99.999%,
满足开发人员和企业 "无论他们在哪里"-使用您熟悉的 api。选择任何自然适合您的数据的模型-没有后端困扰
架构
全球分布式多模型数据库服务
"开发现代云应用程序为企业建立敏捷性和进入新市场提供了独特的机会。这些应用程序不仅必须能够从任何地方访问, 而且为了赢得客户的忠诚度, 他们必须是低延迟和高可用性 "
Cosmos DB 是一个托管的全球分布式多模型数据库服务。它利用 Azure 云基础结构来支持全球规模的应用程序工作负载:
自动数据索引 (不考虑数据模型)。不需要管理次级索引, Cosmos DB 是真正的模式不可知的。
Cosmos DB 可以很容易地扩大或缩减, 以满足应用程序的需要;存储和吞吐量可以独立进行缩放。
可以在全球范围内复制数据, 在全球规模上构建应用程序。允许使用 SQL 或 LINQ. NET 运算符进行聚合查询。
全球范围的高可用性, 具有明确定义的一致性、企业级安全性和全面的 SLA。
快速和保证的低延迟性能与快速随机读取
易于配置和维护已分区的集合和全局数据库, 并具有全局扩展和自动索引
"无闩锁" 属性确保线程不阻塞, 并且读取器不会与作者冲突, 从而支持高度的并发性。
Cosmos DB 的数据库引擎利用完整的存储写入带宽进行索引更新 (即写操作不会因读取而减慢)
客户可以利用服务端可编程性, 例如 UDFS和使用事务性 Javascript 代码的过程。
索引和查询
Cosmos DB 的自动索引索引所有数据属性。客户不需要预先决定他们可能查询的元素。Cosmos DB 不期望或要求任何架构或辅助索引定义来索引数据的规模。它是真正的透明架构。可以根据需要对索引进行自定义, 以删除未使用的属性和元素。
Cosmos DB 提供了一个丰富的查询功能 (SQL, MongoDB, Gremlin(图), 表) 与投影, 过滤器, 聚合, 排序和拼合运算符, 表达式 (算术, 逻辑, 和各种数据转换)。提供了空间数据类型和查询。
Cosmos DB 查询的操作具有高度的并发性、架构不可知的索引和从存储中分离的吞吐量。开发人员可以通过任何 API 引用任何数据模型, 并且仍然获得相同的核心价值支柱--全球分布、存储和吞吐量的弹性扩展、一致性选择和全面的 SLA。
复制、一致性和事务
五个一致性级别模型提供了一系列的一致性:从类似于 SQL 的“强”一致性到类似于 NoSQL 的“终极”一致性,以及介于二者之间的其他一致性。
允许客户指定单个分区集合或分区集合。单个分区集合仅限于 10 gb/10 krus。另一方面, 分区集合对缩放没有理论限制。查询可能跨越多个分区, 但事务总是在单个分区内绑定到。
全球数据库客户可以轻松地支持地理本地读写、弹性缩放吞吐量、故障转移优先级和一致的数据库架构和索引迁移
分析, 全文搜索和移动支持
Power BI, 包括Power BI Desktop, 通过Cosmos DB 连接器支持Cosmos DB 。目前不支持从Tableau、Qlik 和其他报告工具直接连接。
Azure 搜索和Cosmos DB 通过使用索引器来提供本地集成。创建和管理数据源 (包括Cosmos db) 和对这些数据源进行操作的索引器, 可以从 Azure 搜索中对Cosmos DB 内容进行索引和查询。请注意, Azure 搜索索引只能够实现最终的一致性。
Xamarin 和Cosmos DB 提供本地集成。大多数移动应用程序都需要在云中存储数据, 而 Azure Cosmos DB 是移动应用程序的云数据库。它拥有移动开发者所需要的一切
价格体系
Cosmos DB 是为可预知的性能而设计的, 因为这样的客户在请求单位 (RU) 每秒购买一个保留的容量吞吐量水平。
在Cosmos DB 中的每一个操作, 都有一个确定性的 RU 值, 它是基于内存、i/o 和 CPU 处理成本, 或者是用来完成的查询、存储过程或 JavaScript 操作的 "吞吐量"。用户应提供足够的RUs, 以弥补其峰值使用。
在集合被分区的地方, 调配的RUs在分区之间均匀分布。即每个分区的吞吐量 = (每个集合的总吞吐量)/(分区数)。良好的分区策略是成本效率的关键。
客户还应支付其索引存储的使用率。尽管这是按每个月的每 GB 价格计算的, 但实际的存储和吞吐量表是按小时比例的。
RUs是根据用户提供的容量来计费的, 而不管它是否实际使用。另一方面, 存储只在一个使用的基础上计费。文档 DB 支持弹性伸缩, 从而可以在任何时候方便地调配/解除吞吐量。
管理和监视
Azure 门户提供了对语法突出显示和其他类似 IDE 的功能 ,包括数据浏览器 (图形、文档、表) 的 CRUD 支持。Microsoft Visual Studio IDE 还提供对 "Cosomo DB" 的支持。
查询执行返回有关消耗的资源单位的基本统计信息, 但没有查询计划机制可从服务中返回详细的查询执行计划 (Cosmos DB 支持无状态、short-lived的执行模型)。
Cosmos DB 有一个全自动的在线备份, 每4小时完成一次, 最后2备份存储在任何时候。这些存储在 Azure Blob 存储中, 以保证低延迟和高效的上载。
防火墙支持对CosmosDB 和 MongoDB api 的 IP 过滤和防火墙规则。
安全性和加密
对Cosmos DB 的身份验证是通过主密钥和委派的资源标记来进行的。可以通过管理门户检索和重置主密钥。此时, Cosmos DB 与 Azure 活动目录不集成。Cosmos DB 提供了一种机制, 用于创建用户并为这些用户提供一组权限;它还没有提供一种机制来定义 "group" 本身。
可以在资源层次结构的任何级别授予权限。数据库、收集、文件或附件;这提供了项目级别的权限粒度。权限要么是授予完全 CRUD 访问权, 要么是只读的。执行过程需要集合上的所有权限标记。
必须使用 SSL 来保护客户端到服务连接。要求审核功能的客户需要使用触发器来实现。
客户
Rolls Royce
Telenor
Tuku
NewsRepublic
Breeze
Xomni
Astute
相关工具
PowerBI
Azure Stream Analytics
Azure Blob Storage
Azure Data Factory
Azure Search
Azure Machine Learning
Azure Functions
Azure HDInsight/Spark
Azure IoT Hub
Azure Cosmos DB与Mongo DB、AWS Dynamo DB评比
Cosmos DB优势
全球分布: 无需复杂的多数据中心配置, 就可以轻松构建全球分布式应用程序。
跨一个或多个全局区域的弹性缩放存储和吞吐量。
保证的个位数毫秒滞后时间: 在读取时少于10毫秒的延迟, (索引) 上的延迟小于15毫秒 (99%)。
业界领先的 99.99% SLA, 用于第九十九百分点的延迟, 保证吞吐量、一致性和高可用性。
Cosmos DB弱势
只支持在云端Azure使用。与DynamoDB,Mongo&Cassandra可以自己部署使用
不支持客户密钥在静止/移动时对数据进行加密
目前, 不支持关系数据模型和符合 ANSI 标准的 SQL。
Cosmos DB功能性评比
下表是对相关的数据库功能包括索引、查询、分析、全文检索、构架、数据类型、程序、工具调优、SDK、安全、法规支持等的评分。可以看到Cosmos DB的评分都非常高。
Mango DB 优势
非常流行;很多社区和商业工具
良好的索引支持。空间、唯一性、全文
灵活的聚合选项;pipeline & Map-Reduce
支持地理分布, 包括位置感知切分和复制路由
提供强一致性 (虽然没有语句原子性)
自动地理故障切换, 停机时间极少
Mango DB 弱势
GPL 许可证可能会导致某些组织的问题
BSON 格式为每个文档存储字段名称的开销
没有多写机制问题
商业支持很昂贵。Gartner 对定价持谨慎态度。
MongoDB 企业企业版似乎是相当昂贵的〜 $ 1.2万/服务器
无原子事务
Mango DB功能性评比
下表是对相关的数据库功能包括索引、查询、分析、全文检索、构架、数据类型、程序、工具调优、SDK、安全、法规支持等的评分。可以看到Mango DB在复制、事务、管理、监控这几项的能力都非常弱。
AWS Dynamo DB 优势
' 作为一个服务 ' 运行,快速创建, ' 无限规模 '
免费提供 (25GB, 25 单位的读写)
弹性伸缩;可以添加/删除读/写容量
跨 AWS 服务的通用安全框架
存储价格合理 (25 c/GB vs EBS + PIOPs 或实例 ssd 为三重复制)
广泛的集成到其他服务。
AWS Dynamo DB 弱势
非常基本的性能;有限的数据类型和查询支持。
无聚合函数。没有原子事务功能。
没有本机地理复制
数据模型效率低下 (存储所有属性名称)
写容量昂贵;比Cassandra "写优化" 少
必须非常小心的数据模型和查询计划, 以保持成本下降
与非 AWS 服务有限集成
AWS Dynamo DB功能性评比
下表是对相关的数据库功能包括索引、查询、分析、全文检索、构架、数据类型、程序、工具调优、SDK、安全、法规支持等的评分。可以看到Dynamo DB在索引查询、分析和全文检索的能力是极弱,复制、事务、构架、数据类型支持也非常弱,SLA和加密的能力也不强。
Azure Cosmos DB与Mongo DB、AWS Dynamo DB 详细对比表
SLA对比
对于一个云服务来说,具备良好的SLA 是非常重要的。Cosmos DB在高可用方面提供财务保证的月度99.99%的SLA ,而读的可用性提供月度99.999%的SLA。Azure Cosmos DB 向其客户保证了 99% 的情况下端到端的低延迟。 对于典型的 1 KB 项,Cosmos DB 保证,在 99% 的情况下,同一 Azure 区域内读取操作的端到端延迟和已索引写入操作的端到端延迟分别低于 10 毫秒和 15 毫秒。 中间延迟明显更低(低于 5 毫秒)。
在延迟、一致性、吞吐量这些项目的只有微软的Cosmos DB 提供相应的SLA保证。
更多信息参考:https://azure.microsoft.com/zh-cn/support/legal/sla/cosmos-db/v1_1/
安全性和法规遵从性
Azure服务于全球企业,在相应的安全性保证和法律的遵从都表现良好,以下是相关项目的对比表。在如加密选项,IP filtering等选项上,cosmosdb都优于其他产品。
全球分布
Cosmos DB了全球分布,这是最大的优势之一,因此我们具备在全球的区域任意数量的数据分布,并且我们包括在中国,德国,美国的政府云也提供相应的cosmos db 服务。另外在故障转移、多主写入等特性中,dynamo db和mongodb都不具备这些功能。另外在一致性方面,我们提供了类似关系型数据库的强一致性级别,也提供了类似NOSQL的最终一致性,并且提供介于两者之间的5种不同的一致性水平。
查询和索引
对于一个数据库来说,如何管理查询和索引对于数据库的性能和应用的使用有非常大的影响。首先Cosmos DB使用SQL 的语法和JS的语言进行查询,这样对于工程师来说更加熟悉和易于掌握。
查询计划说明、地理空间查询、聚合、构架不可知、可变索引定义、自动索引方面Cosmos DB 都提供了相应的功能。而AWS DynamoDB都未提供。
性能和扩展
在性能和扩展上,Cosmos DB 在多个项目上由于AWS DynamoDB 和Mongo DB,Cosmos DB提供了独立的扩展存储和吞吐量。Cosmos DB写延迟保证为保证99%为15ms内,读保证在10ms内。
数据建模
在数据建模上,文档和Columnar 模型 Aws DynamoDB是不支持的。
编程和集成
变成和集成方面,Cosmos DB表现也非常的优异,对于udfs、多API 、服务器端执行都不支持
操作管理
Cosmos DB支持项目 Multi-Item Transactions、存储过程、upsert、触发器、自动分层。这些重要的功能在进行管理和开发时候非常重要,这些功能。Aws Dynamo DB都是不支持的。
总结
以上对Azure Cosmos DB、AWS DynamoDB、Mongo DB各方面进行了一个对比和分析。在很多方面Cosmos DB表现出来都是一个优秀的分布式数据库,具备全球分发的能力。
总之:Azure Cosmos DB 是一种全球分布式多模型数据库服务。可通过使用常用 API 和编程模型开发文档数据库、键值数据库、宽列数据库和图形数据库。 然后了解在受益于全面 SLA 的同时,如何在任意数量的 Azure 区域之间复制数据,以及如何缩放吞吐量而不受你的存储影响。
由于云计算更新很快,以上信息仅供参考,如未及时更新,本人不对此承担引发的任何后果