PERF04-BP02 评估可用的选项
在选择数据管理解决方案之前,需要了解可用的数据库选项及其如何优化性能。使用负载测试确定与您的工作负载相关的重要数据库指标。在研究数据库选项时,要考虑各种方面,如参数组、存储选项、内存、计算、只读副本、最终一致性、连接池和缓存选项。尝试使用这些不同的配置选项来改进指标。
期望结果: 基于数据类型,工作负载可以使用一个或多个数据库解决方案。数据库功能和优势与数据特征、访问模式和工作负载要求完美匹配。要优化您的数据库性能和成本,您必须评估数据访问模式以确定适当的数据库选项。评估可接受的查询时间,以确保选定的数据库选项可以满足要求。
常见反模式:
-
未识别数据访问模式。
-
不了解所选数据管理解决方案的配置选项。
-
仅依赖于增加实例大小,而不考虑其他可用的配置选项。
-
不测试所选解决方案的扩展特征。
建立此最佳实践的好处: 通过探索和试用数据库选项,您也许能够降低基础设施成本,提高性能和可扩展性,并减少维护工作负载所需的工作量。
未建立这种最佳实践的情况下暴露的风险等级: 高
-
必须针对 一刀切类型的 数据库进行优化意味着做出不必要的妥协。
-
由于没有配置数据库解决方案以匹配流量模式,导致成本增加。
-
扩展问题可能会导致运维问题。
-
数据的保护级别可能达不到要求。
实施指导
了解您的工作负载数据特征,以便配置数据库选项。运行负载测试以确定您的关键性能指标和瓶颈。使用这些特征和指标来评估数据库选项并尝试使用不同的配置。
AWS 服务 | Amazon RDS、Amazon Aurora | Amazon DynamoDB | Amazon DocumentDB | Amazon ElastiCache | Amazon Neptune | Amazon Timestream | Amazon Keyspaces | Amazon QLDB |
---|---|---|---|---|---|---|---|---|
扩展计算 | 增加实例大小,Aurora 无服务器实例自动扩展以响应负载变化 | 按需容量模式下的自动读/写扩展,或预置容量模式下的预置读/写容量自动扩展 | 增加实例大小 | 增加实例大小,将节点添加到集群 | 增加实例大小 | 自动扩展以调整容量 | 按需容量模式下的自动读/写扩展,或预置容量模式下的预置读/写容量自动扩展 | 自动扩展以调整容量 |
横向扩展读取 | 所有引擎都支持只读副本。Aurora 支持只读副本实例的自动扩展 | 增加预置的读取容量单位 | 只读副本 | 只读副本 | 只读副本。支持只读副本实例的自动扩展 | 自动扩展 | 增加预置的读取容量单位 | 自动纵向扩展到规定的并发限制 |
横向扩展写操作 | 增加实例大小,批处理应用程序中的写操作,或在数据库前面添加队列。通过跨多个实例的应用程序级分片进行横向扩展 | 增加预置的写入容量单位。确保最佳分区键,以防止分区级写操作节流 | 增加主实例大小 | 在集群模式下使用 Redis 跨分片分布写操作 | 增加实例大小 | 扩展时,写请求可能会受到限制。如果遇到节流异常,请继续以相同(或更高)吞吐量发送数据,以自动扩展。批量写入以减少并发写入请求 | 增加预置的写入容量单位。确保最佳分区键,以防止分区级写操作节流 | 自动纵向扩展到规定的并发限制 |
引擎配置 | 参数组 | 不适用 | 参数组 | 参数组 | 参数组 | 不适用 | 不适用 | 不适用 |
缓存 | 内存中的缓存,可通过参数组进行配置。与 ElastiCache for Redis 等专用缓存结合使用,分流对经常访问项的请求 | DAX 完全托管式缓存可用 | 内存中的缓存。(可选)与 ElastiCache for Redis 等专用缓存结合使用,分流对经常访问项的请求 | 主要功能是缓存 | 使用查询结果缓存来缓存只读查询的结果 | Timestream 有两个存储层;其中之一是高性能内存中存储层 | 部署单独的专用缓存(如 ElastiCache for Redis),分流对经常访问项的请求 | 不适用 |
高可用性/灾难恢复 | 对于生产工作负载,推荐的配置是在第二个可用区中运行备用实例,以在一个区域内提供弹性。 对于跨区域的弹性,可以使用 Aurora 全球数据库 | 在一个区域内高度可用。可以使用 DynamoDB 全局表跨区域复制表 | 跨可用区创建多个实例以实现可用性。 快照可以跨区域共享,集群可以使用 DMS 进行复制,用于提供跨区域复制/灾难恢复 | 对于生产集群,推荐的配置是在备用可用区中至少创建一个节点。 ElastiCache 全局数据存储可用于跨区域复制集群。 | 其他可用区中的只读副本用作失效转移目标。 快照可以跨区域共享,集群可以使用 Neptune 流进行复制,用于在两个不同区域的两个集群之间复制数据。 | 在一个区域内高度可用。跨区域复制需要使用 Timestream SDK 进行自定义应用程序开发 | 在一个区域内高度可用。 跨区域复制需要自定义应用程序逻辑或第三方工具 | 在一个区域内高度可用。 要跨区域复制,请将 Amazon QLDB 日志的内容导出到 S3 存储桶,并配置该存储桶以进行跨区域复制。 |
实施步骤
-
哪些配置选项可用于选定的数据库?
-
利用 Amazon RDS 和 Aurora 的参数组,您可以调整常见的数据库引擎级别设置(例如为缓存分配的内存),或调整数据库的时区
-
对于预置的数据库服务(如 Amazon RDS、Aurora、Neptune、Amazon DocumentDB)以及在 Amazon EC2 上部署的数据库服务,您可以更改实例类型、预置存储和添加只读副本。
-
DynamoDB 允许您指定两种容量模式:按需和预置。考虑到不同的工作负载,您可以在这两种模式之间进行更改,并在预置模式下随时增加所分配的容量。
-
-
工作负载是否包含大量的读取或写入操作?
-
哪些解决方案可用于分流读取操作(只读副本、缓存等)?
-
对于 DynamoDB 表,您可以使用 DAX 缓存功能来分流读取操作。
-
对于关系数据库,您可以创建一个 ElastiCache for Redis 集群,并将应用程序配置为首先从缓存中读取,并在请求的项目不存在时返回到数据库。
-
关系数据库(如 Amazon RDS 和 Aurora)以及预置的 NoSQL 数据库(如 Neptune 和 Amazon DocumentDB)全部支持添加只读副本,以分流工作负载的读取部分。
-
DynamoDB 等无服务器数据库将自动扩展。确保您预置了足够的读取容量单位(RCU,Read Capacity Unit)来处理工作负载。
-
-
哪些解决方案可用于扩展写入操作(分区键分片、引入队列等)?
-
对于关系数据库,您可以增加实例的大小以适应增加的工作负载,或增加预调配 IOPS 以增加底层存储的吞吐量。
-
您还可以在数据库前面引入队列,而不是直接写入数据库。此模式允许您将摄取操作与数据库解耦,并控制流量,这样数据库就不会过载。
-
对写入请求进行批处理,而不是创建许多短期事务,这样有助于提高有大量写入的关系数据库的吞吐量。
-
-
像 DynamoDB 这样的无服务器数据库可以自动扩展写入吞吐量,也可以根据容量模式调整预置的写入容量单位(WCU,Write Capacity Unit)。
-
但是,当达到给定分区键的吞吐量限制时,仍然会遇到 热 分区问题。这可以通过选择更均匀分布的分区键或对分区键进行写分片来缓解。
-
-
-
-
当前或预期的每秒事务数(TPS)峰值是多少? 使用此流量和此流量 +X% 进行测试,以了解扩展特征。
-
适用于 PostgreSQL 的 pg_bench 等原生工具可用于对数据库进行压力测试,以了解瓶颈和扩展特征。
-
应该捕获类似生产的流量,以便重放这些流量,从而在合成工作负载之外模拟真实世界的情况。
-
-
如果使用无服务器或弹性可扩展计算,请测试此扩展对数据库的影响。如果合适,引入连接管理或池技术以降低对数据库的影响。
-
RDS 代理可与 Amazon RDS 和 Aurora 结合使用,以管理与数据库的连接。
-
DynamoDB 等无服务器数据库没有与之关联的连接,但会考虑预置容量和自动扩展策略来处理负载峰值。
-
-
负载是否可预测,是否会出现负载峰值和不活动时段?
-
如果有一段时间处于不活动状态,请考虑在这段时间内缩减预置的容量或实例大小。Aurora Serverless V2 将根据负载自动纵向扩展和缩减。
-
对于非生产实例,请考虑在非工作时间暂停或停止这些实例。
-
-
您是否需要根据访问模式和数据特征对数据模型进行分段和拆分?
-
考虑使用 AWS DMS 或 AWS SCT 将您的数据移动到其他服务。
-
实施计划的工作量级别:
要建立此最佳实践,您必须了解当前的数据特征和指标。收集这些指标,建立基线,然后使用这些指标来确定理想的数据库配置选项,这需要 低 到 中等 工作量。这最好通过负载测试和实验来验证。
资源
相关文档:
相关视频:
相关示例: