Link

AWS 数据库

目录

  1. AWS 数据库
    1. 参考文档
    2. 数据库设计考量
    3. 关系型数据库
      1. RDS
      2. Amazon Aurora
      3. 数据库加密
      4. Amazon ElastiCache
        1. 写入策略
    4. 非关系型数据库 DynamoDB
      1. DynamoDB Accelerator (DAX)
    5. RDS 备份
    6. Redshift
      1. Redshift Spectrum

参考文档

http://d0.awsstatic.com/whitepapers/aws-overview.pdf

数据库设计考量

  • 可扩展性
  • 存储要求
  • 对象大小和类型
  • 持久性

关系型数据库

RDS

一般可以平滑纵向扩展,支持一写多读的集群方式,支持跨 AZ 部署。

支持在区域内配置 S3 备份,同时此 S3 备份可以跨区做备份,以此实现数据库的双备份。

提供 6 种后端引擎:Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle, and Microsoft SQL Server.

Amazon Aurora

兼容 PostgreSQL 和 MYSQL 的关系型数据库,性能比 MYSQL 高 5 倍。分层架构。按需付费。

跨三个可用区,六种方法复制。

支持全局数据库。

数据库加密

适合于 RDS 和 Aurora。

启用加密后,实例和快照都会被进行加密,使用 AES256 算法。

AWS 默认集成 KMS(Key Management Service)进行密钥管理,来对 DB 进行加密。一个 KMS key 会包含很多信息,例如:key id、创建时间、描述、key 状态、密钥等。

KMS key 由 AWS service 代表个人来进行密钥的管理。用户无法对 key 进行修改、删除、更新操作。(即,这个key 是给 AWS 服务用的,用户不能管理)

限制:

  • 只能在创建实例时选择是否加密,创建完成后不能加密。但可以复制一个快照,然后给快照加密,然后使用加密快照恢复一个加密的实例出来

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html

  • 开启加密后,不能关闭加密功能
  • 如果实例未加密,不能给其快照加密
  • 一个区域内所有实例及其 replica 需要使用同样的 KMS key

在一些场景下,企业希望 IT 管理员不能够访问数据库,这时候可以启用 Client side 加密,在用户上传数据时就进行加密:

https://aws.amazon.com/cn/blogs/database/performing-sql-database-client-side-encryption-for-multi-region-high-availability/

Amazon ElastiCache

通过内存实现的缓存服务,与 Redis 和 Memcached 兼容。

对比MemcachedRedis
通过缓存提升读取性能okok
横向扩展以提升写入能力ok不支持
多线程性能ok不支持
高级数据类型不支持ok
数据集排序/排名不支持ok
发布、订阅功能不支持ok
多 AZ 自动故障转移不支持ok
持久性不支持ok

写入策略

  • 直写:每此都需要向数据库和缓存写入数据。缓存中的数据永不过时,但开销大,缓存中可能会有大量不使用的数据,新增节点时可能出现数据不一致(可以通过惰性缓存来填充这些数据)

  • 延迟加载:仅在需要时加载到缓存。对于没有缓存的读写,会有三次操作(读取未命中、从 DB 读取、写入缓存),性能会降低。此模式允许使用过时的数据,可以设置 TTL 来使得缓存较新。

非关系型数据库 DynamoDB

速度非常快,可以横向扩展,适合简单,但量大的数据。

DynamoDB 全局表:一个账户下的多个副本表,多个表之间是异步进行复制的,可以跨区域部署。

一致性选项:最终一致读取(写入时其他副本可能不会立即同步,一段时间后才同步完成)和强一致性读取(一个读取会始终用最新的数据)

场景:游戏排行榜、购物车缓存

可以通过设置 TTL 使得 item 自动删除,无额外开销。

使用 Dynamo DB 给 web 可以提供 session sticky 的特性,比如用户的登陆状态信息可以让 web 服务器转到 Dynamo DB 来进行查询。

DynamoDB Accelerator (DAX)

用于给 DynamoDB 提供缓存加速。主要用于读取加速。

使用 DAX 不需要修改应用程序,DAX 兼容 DynamoDB 的 API。

DynamoDB 可以通过 10ms 左右的访问延迟。

DAX 则可以在微秒内提供百万请求。

DAX 支持多节点部署,3~10节点

RDS 备份

可以在其他区域创建 read replica,然后在发生灾难时将 read replica 提升为 write。

Redshift

Redshift 是个 PB 级别的数据仓库。一般起步是几百 GB。

支持通过 SQL 来进行快速查询。

Redshift 集群由多个节点组成,起步可以是一个节点,根据需求增加节点。

支持集群快照。

支持通过 KMS 加密。

Redshift 不支持多 AZ 部署,灾备需要使用跨区域快照。

详见:https://aws.amazon.com/cn/blogs/big-data/building-multi-az-or-multi-region-amazon-redshift-clusters/

https://aws.amazon.com/cn/redshift/faqs/

Redshift Spectrum

Amazon Redshift Spectrum 是 Amazon Redshift 的一项功能,借助这项功能,您可以对 Amazon S3 中的数据湖运行查询,而无需进行数据加载或 ETL 操作。当您发布 SQL 查询时,查询会进入 Amazon Redshift 终端节点,该端点会生成查询方案并对其进行优化。Amazon Redshift 会确定哪些数据存储在本地以及哪些数据存储在 Amazon S3 中,然后生成一种方案来尽可能减少需要读取的 S3 数据量,从共享资源池中请求 Amazon Redshift Spectrum 工件来读取和处理 S3 中的数据。

借助 Redshift Spectrum,您可以对 Amazon S3 中的 EB 级数据运行查询,且无需进行加载或 ETL 操作。即使没有在 Amazon Redshift 中存储任何数据,您仍然可以使用 Redshift Spectrum 查询 Amazon S3 中的 EB 级数据集。