AWS数据库作弊表/写作
#aws #database #techlead #solutionsarchitect

在我们深入研究AWS的不同数据库产品之前,让我们快速了解数据的管理和存储方式(关系与非关系)和不同用例的差异 - 操作/交易(OLTP)与分析(分析)( OLAP))

关系 非关系
表,行和列 许多不同的数据存储模型(键值对,文档或图形)
刚性模式(SQL) 灵活模式(NOSQL)
数据库中强制执行的规则 在应用程序代码中定义
垂直可伸缩性 水平
支持加入和复杂查询 非结构化简单查询语言
提供了功能
OLTP(在线交易处理) olap(在线分析处理
面向交易的任务 分析和决策的任务
OLTP通常涉及在数据库中插入,更新和/或删除少量数据 OLAP对业务数据进行多维分析,并为复杂数据建模
简短的交易和简单查询 长交易和复杂查询
IE生产DB IE Data-Warehouse

OLTP vs OLAP

OLAP中的数据通常来自多个OLTP来源(汇总)。

OLTP to ETL to OLAP

OLAP数据软件有助于避免在原始源上的性能打击,但是,对于非常简单的方案,具有读取副本将可以完成工作。


与许多其他服务一样,AWS为我们提供了非常广泛的数据存储产品,以适合不同要求,可伸缩性,性能和价格。

  • Amazon RDS(OLTP)
  • dynamodb(oltp)
  • documentdb
  • 红移(OLAP)
  • Elasticache
  • emr(hadoop)(olap)
  • EC2上的数据库(上面未列出的其他数据库可以直接安装在EC2上)

亚马逊RDS

Amazon RDS是一项由AWS管理的服务,允许您使用流行的开源和商业数据库引擎在AWS云中自动安装和提供关系数据库:

  • mysql
  • Microsoft SQL Server
  • Oracle
  • PostgreSQL
  • Mariadb 和
  • Amazon Aurora是MySQL和PostgreSQL兼容数据库,该数据库为云由AWS构建。

使用RDS旋转新数据库时,AWS将负责所有典型的管理任务(供应,安全性,高可用性,备份,备份,修补和更新次要版本)。

可伸缩性

使用Aurora RDS,我们可以通过增加实例类型的大小来垂直扩展。
水平缩放仅适用于使用RDS读取副本的读取 /查询。< / p>

是从您主实例中创建的读取副本,然后保持更新异步。只读流量可以直接转移到读取副本以卸载主数据库,然后只照顾写信。

RDS Multi AZ - Primary and Standby

Multi Az 部署的情况下,待机实例是与主要区域一起创建的。
备用实例不是一个简单的读取副本,因为复制发生了同步

在发生故障的情况下,可以将复制品升级为主要,但这不会自动发生。
Multiaz部署提供自动故障转移(写入和读取会自动重定向),因此建议使用 灾难恢复

加密

可以在休息处进行加密(在创建过程中配置)
也可以加密连接。
加密使用kms。

您不能拥有未加密DB的加密复制品,同样,您可以拥有加密db的未加密复制品。

备份和恢复选项

每天执行自动备份,并具有保留期(最大35天),可用于还原和创建 new 数据库。

手动(按需)备份称为快照,没有保留期(它们不到期,必须手动删除)。他们备份整个DB实例,不仅是单个DB,并且在单个AZ(从几秒钟到几分钟)的情况下可能导致I/O的暂停。
如果是多动物,则没有打ic(除了SQLServer以外),因为备份是从Standyby实例中获取的。

快照可以从RDS出口到S3,并允许与雅典娜,萨格人或EMR等其他工具进行进一步分析。
您可以选择简单地导出特定数据库,表或模式。

极光

Aurora是RDS家族中的数据库产品,与PostgreSQL和MySQL兼容,为云构建,因此更快。
它是分布的,自我修复,容错的(在3个AZ 上具有6种方法复制),每个实例的自动体最多为128TB。

可以使用多达15个读取副本(在同一区域)的多个AZ上配置单个主实例。
在失败的情况下,可以将读取副本晋升为主的角色,并允许在约60秒内重新启动(故障转移选项)。

跨区域副本量表从MySQL数据库引擎 - (仅适用于Aurora mysql),遍及逻辑异步复制区域读取操作 - 主。

全局数据库功能允许跨区域 cluster 读取缩放(从Aurora存储层中复制物理异步复制 ) - 这意味着它跨越多个区域,以供低潜伏期全球读取和灾难恢复。 (可用于MySQL和Postgres)

Multi Master 特征在区域内的写入(也仅适用于MySQL) - 这意味着它在跨AZS的写入一致性后提供了读取。如果一个AZ中的中断,所有DB写入将自动重定向到另一个实例,而无需执行故障转移。

您可以通过4种方式连接到Aurora:

  • 群集端点:将执行对主实例的读写访问。
  • 读取器端点:读取复制品舰队的负载平衡连接。
  • 自定义端点:加载余额在您注册的一组实例上连接,并且要用于特定角色或任务。
  • 实例端点:群集中的每个实例,包括您的主要和读取副本实例,每个实例都将拥有自己的独特实例端点,可以指向自身。出于负载平衡原因有用。

Aurora无服务器

  • 无缝缩放容量
  • 应用程序通过routerfleet连接。
  • acus(Aurora容量单元)是每个2GB的内存。

Aurora Serverless配置了单个连接端点(您没有写入和副本端点的端点,因为它是无服务器的,并且会自动缩放)

>

这是

的理想选择
  • 不经常使用的应用程序
  • 用法所在的新应用程序 - 尚不知道或可预测
  • 非常可变的工作负载

RDS代理

完全托管的数据库代理,当无服务器应用程序访问RDS时,它会共享不经常使用的连接(因为它创建了连接池)并提高了降低CPU/内存的效率压力。


它还控制身份验证方法。

当不使用RDS时

在某些用例中,采用RD可能证明是对抗的。

  • 如果关键/值数据结构或数据结构是不可预测的,或者尚未确定的,并且当自动可伸缩性是必需的时 - > dynamoDB更合适。
  • 大型二进制对象的情况下 - > S3 可能是一个更好的选择。
  • 如果其他数据库平台(例如IBM DB2或SAP HANA )或如果您需要root Access ,则EC2将是解决方案。 由于RDS是托管服务,因此您无法访问OS,因此您无法安装诸如管理工具之类的软件,如果这是您的要求,EC2将为您提供更大的控制DB和基础服务器OS ,但是您必须自己管理一切(备份,冗余,扩展 - 以及我们上面已经看到的所有管理任务)。

RDS购买选项

  • 按需
  • 保留实例
  • 无服务器
  • BYOL(携带您自己的许可证) - 仅适用于Oracle DB,均用于按需或保留实例

可以在几分钟内随时启动按需实例。
价格取决于实例类型。如果进行多AZ部署,您将付出额外费用(通常是两倍)。

使用无服务器,没有实例可以管理,因此定价以ACUS(Aurora容量单元:2GB的内存)每小时测量。

保留实例允许您购买一定时间(从1到3年)的实例类型的折扣,并取决于付款方式(所有前期,局部,部分上游,无上游)可以进一步减少。

存储和I/O的定价在不同的DB发动机上有所不同,也必须考虑。
Aurora使用A 共享群集存储架构,而所有其他DB类型都使用 ebs(Elastic Block Store)
您可以检查我的previous post about EBS以找出不同的存储选项及其定价。

在Aurora和共享群集存储架构的情况下,您无法配置任何存储选项,因为它将自动为您管理,这就是为什么定价指标在GB月中 + I/OS的数量处理(每百万要求计费)

DynamoDB

这是一个完全管理的示意性NOSQL数据库服务。
非关系,密钥/价值和文档存储
它有四个9s。 (99.99%)可用性(5个全球表格)
数据会自动在单个区域内的3个不同的可用性区域中复制。

  • 项目 - >基本上是一行(最大记录大小为 400kb ) 分区键和排序键组成表中的主要键使用的访问项(两个属性都存在时,主键也称为复合键 - 您还可以指定没有SK的PK)
  • 属性 - >与该项目相关的信息(列)

由于DynamoDB是示意性的,一旦定义了主键的结构(分区和排序键),每个项目/行都可以具有自己的结构。

ttl(timetolive)定义表格中的项目何时到期,并且将自动删除(**无需额外费用,因为它们不使用wcu / rcu)
WCU和RCU(写入和读取容量单元)是每秒读数和写入数量的度量。计费与RCU和 / < / p>不同

备份和还原

按需备份可以安排并在几秒钟内执行,没有影响对桌面性能和可用性的影响 - 它们不会到期。

可以启用第二个时间点恢复到第二个,并允许在当前时间到过去35天之间将表的数据还原到任何状态。将在A 表上进行在同一区域或其他区域上进行

发电机索引

dynamoDB使您可以创建其他索引,以便可以运行查询以通过其他属性搜索数据,但是请记住, dynamo索引的工作方式与关系数据库中的数据差异很大(并且您必须运行您的运行方式对该索引的查询)。
辅助索引可以是本地的(与单个分区密钥相关)或全局(让您在整个表中查询)。

DynamoDB流

每当从DynamoDB表中插入/更新/删除项目时,写入流到流并存储长达24小时的记录。

流允许捕获项目级修改的时序序列

根据您的用例,您可以定义要将哪些数据放入流中:

  • 新图像
  • 旧图像
  • 旧图像和新图像(含义修改之前和之后的整个属性)

全局表

dynamoDB以跨区域复制的形式提供辅助层(全局表)
使用全局表,dynamoDB变为多主机数据库和
数据在位于不同区域的表中复制了异步(通过当您创建全局表时自动创建的DynamoDB流),每个表都包含相同的数据集(不像具有具有的Memcached节点数据的不同分区)。
除了增加区域停电的情况外,全局表还会降低延迟,因为您的用户将从最接近的表副本(数据局部性)访问数据

DynamoDB加速器(DAX)

dax(完全管理的内存中缓存,可以提高从毫秒到 _micro_second 延迟的性能。
提高读写性能。

dax是针对DynamoDB进行了优化的,并且不需要代码中的更改,因为它只是将其放在Dynamo DB面前,您的要求只需指向此处即可。
如果发生Elasticache,则有更多的管理开销(例如缓存无效)。

dax是DynamoDB的独立实体,并将其放置在VPC中。

Amazon Elasticache

密钥/值存储在内存数据库,以及Redis和Memcached的托管实现。
一个非常常见的用例是将其放在RDS或DynamoDB面前,以提高性能并减少延迟

有益:

  • 不经常更改但经常访问的数据
  • 可以容忍陈旧数据的应用
  • 数据被原始源而不是缓存检索时会更昂贵和较慢的数据
  • Elasticache通常用于存储会话状态(DynamoDB的替代方案)

一些示例是WebSesses商店,用于卸载DB的流行查询数据库缓存,排行榜和流数据仪表板。
除了缓存之外,内存数据层也可用于分析和建议引擎。

,由于弹性气节点在EC2计费上运行时是基于实例类型的,因此它们被配备时。

纪念与Redis

memcached是内存的密钥存储,它是多线程和支持分区(可以用作数据存储之外的缓存
另一方面,REDIS不仅仅是一个缓存层,因为它支持更高级的数据结构,提供数据持久性,加密和复制(这是纯粹是内存的数据存储)。

两者都具有高毫米潜伏期的高性能。

Image description

Elasticache可伸缩性:

节点是安全网络连接的RAM的固定尺寸块。
节点可以使用不同的实例类型启动。更改实例类型允许垂直缩放。

由于模因和redis的不同性质,Elasticache对它们进行了不同的管理。

shard(redis)是一组最多6个Elasticache节点
群集(REDIS)是1组(禁用群集模式)或在单个或多个可用性区域中最多90个redis shards(启用群集模式时)。
数据在该集群中的所有碎片中分区。

启用了群集模式,您可以拥有多个碎片(在相同或跨不同的可用性区域内),其中主节点和零至5副本。
启用了群集模式,您还可以在线或离线resharding

之间进行选择
  • 在线重新设备您可以添加或删除碎片 您可以通过添加新的副本
  • 水平扩展

群集(模因)是一个或多个节点的集合。 Amazon Elasticache自动检测并替换失败的节点。
通过将节点添加到群集中水平缩放。
为了提高容差,请在集群的AWS区域内找到跨多个可用性区域(AZS)的模因节点(但请记住,每个节点都是数据的分区,并且没有副本也没有备份)。

其他数据库服务

DocumentDB

DocumentDB是一个完全管理的非关系文档数据库,具有完整的mongoDB兼容性,这意味着它对JSON数据非常有用,它可以自动扩展到64TB。

  • 集群端点 - 对于需要读写和写入数据库的应用程序
  • 阅读器端点:用于连接以读取副本
  • 实例端点:群集中的每个实例,包括您的主要和读取副本实例,每个实例都将拥有自己的独特实例端点,可以指向自身。出于负载平衡原因有用。

钥匙空间(用于Cassandra)

Keyspaces是可扩展的完全管理的apache cassandra兼容数据库服务(无服务器),它允许您使用CQL(Cassandra Query语言)。

Cassandra是一个免费的开源分布式,宽列商店,NOSQL数据库管理系统。

按键基本上是一组表,表是您写数据的位置。与DynamoDB类似,您可以定义已提供或按需容量模式。

海王星

Neptune是一个完全管理的图形数据库服务,其用例用于欺诈检测,推荐引擎,社交网络和应用使用Gremlin,OpencyPher和Sparql等开源API。

像DocumentDB一样,它具有群集,读取器和实例端点

QLDB

Quantum Ledger Database
QLDB是一个完全管理的,无服务器的分类帐数据库,用于透明不可变和密码验证的交易日志。
数据只能将数据附加(不覆盖或删除)到期刊上,因此,当需要诚信保证时,QLDB很棒。

App to QLDB to Kinesis to Lambda