随着应用程序的增长,其数据库上的加载也是如此。无法跟上需求的数据库会导致响应时间,超时和中断缓慢。扩展数据库涉及进行更改以处理增加的工作负载,同时保持绩效和可用性。
在本文中,我们将探讨通用数据库缩放技术,规模数据库的步骤以及在计划数据库缩放策略时的关键注意事项。
什么是数据库缩放范围及为什么重要?
数据库缩放是指increasing a database's capacity的方法和处理能力以处理更多数据和工作负载。
数据是新油,分析是燃烧引擎。
ð½
可扩展的数据库允许您处理大量数据,减少延迟,提高性能并确保无缝数据可访问性。它使企业能够做出明智的决定,促进创新并保持竞争优势。
有两种缩放数据库的主要方法:
a)垂直缩放
单个数据库服务器的垂直scaling involves increasing the processing power and memory capacity。例如,您可以使用更强大的CPU升级到服务器,添加更多RAM或增加存储空间。
_垂直缩放的主要优点是简单性 - 您通过对单个服务器进行硬件改进来缩放。 _但是,您可以垂直扩展多少限制。在某个时刻,您达到硬件限制并减少回报。
b)水平缩放
水平缩放意味着distributing the database workload across multiple servers. 示例包括数据库复制,碎片,聚类和其他分布式数据库体系结构。
水平缩放范围几乎允许无限的扩展,因为您可以添加更多服务器来处理增加的负载。它还提供冗余和故障转移功能。但是 扩大规模可以在数据库给药,查询优化和maintaining data consistency across servers.
方面增加复杂性。缩放方法 | pros | cons |
---|---|---|
垂直缩放 | - 易于实现 - 单个服务器更易于维护 - 无需编码更改 - 将性能提高到点 |
- 规模上的硬件限制 - 单点故障 - 需要更昂贵的硬件 - 退货减少 |
水平缩放 | - 无限扩大容量 - 内置冗余 - 成本效益的商品硬件 - 改善多个服务器的性能 |
- 分布式系统的复杂性 - 查询路由和优化 - 数据一致性挑战 - 更多用于管理 | 的服务器
缩放数据库时要考虑的因素
#1。监视和分析当前使用情况
首先监视关键指标,例如CPU利用率,内存和存储使用情况,并发连接,缓存命中率和查询响应时间。分析您需要扩展时的使用趋势以预测。
#2。识别性能瓶颈
配置文件数据库工作负载以查找bottlenecks holding back performance。缓慢的查询,小连接池和低内存或I/O带宽是常见的限制因素。
#3。选择正确的缩放方法
根据瓶颈,数据量和应用程序体系结构确定是垂直还是水平扩展。 hybrid approach通常效果最好。
#4。实施缩放更改
添加servers, increase hardware specs, adjust database configuration,碎片或复制数据等。在维护窗口期间进行更改以最大程度地减少停机时间。
#5。测试和优化
负载测试缩放基础架构,调整数据库,优化查询并进行配置调整。迭代直到系统处理投影工作负载舒适为止。
缩放的关键注意事项
#1。硬件限制
您可以垂直缩放单个数据库服务器是有限制的。在某个时候,您需要水平扩展。
#2。数据量变化
如果数据量迅速增长,诸如碎片之类的水平缩放方法允许无限的存储扩展和I/O。
#3。查询模式
通常可以通过添加读取副本和缓存层来缩放读取重量的工作负载。查询敲击不同表的查询可能需要碎片。
#4。费用
平衡硬件和许可成本与绩效需求。扩展添加您必须购买,配置和维护的服务器。
通用缩放技术
#1。数据库碎片
数据库碎片是一种缩放技术,可将大型数据库划分为称为碎片的多个较小的数据库。碎片有助于improve performance和读取和写入的可用性。
有两种主要分片方法:
- 水平碎片将数据库table拆分,使每个碎片都包含独特的数据行。这个distributes the data load across servers。
- 垂直碎片将一个表分隔为具有唯一列和重叠行的碎片。这可以优化针对特定列的查询的访问。
碎片的关键优势是高可用性 - 如果一个碎片降低,数据库的其余部分仍然可以运行。中断与单个碎片隔离。
碎片引入了查询路由,交易管理和维护整个碎片的数据一致性方面的复杂性。还具有大量的设置和维护成本,并具有碎片拓扑。
碎片提供了性能和可用性,其他方法无法轻易地与大型数据集和工作负载匹配。但这对于大规模规模来说是一项关键技术,即使需要开销。
阅读有关Database Sharding here的更多信息。
#2。读取复制
阅读复制使用主要数据库进行写入,而read-only replicaDatabases则处理查询。分发读取的读取提高了阅读速度和整体性能。
将读取副本放在不同区域也可以优化延迟。但是,如果尚未传播,则存在权衡 - 复制品可能没有最新的数据。
虽然功能强大,但请阅读复制增加了管理复制传播和滞后的复杂性。
但是,对于大规模阅读性能,阅读复制是一种有效的技术。它将跨服务器扩散到handle spikes in traffic and usage。
#3。缓存
缓存是改善频繁查询数据库性能的简单方法。 caching layer reduces database load by returning frequently accessed data from fast in-memory caches而不是基于磁盘的数据库。
通常,应用程序将具有一些构成大多数数据库负载的常见查询。可以将结果缓存在应用程序服务器上的内存中。进行缓存查询时,该应用将首先检查缓存,并在可用的情况下从内存中返回结果。这避免了重复的数据库往返。通过从数据库中获取数据并将其存储的数据来填充缓存。
缓存通过将通常访问的数据保持在低延迟内存中而不是从数据库中检索它来提高速度。它减少了经常查询的未改变数据的数据库上的负载。只是缓存频繁的查询可以显着改善吞吐量和响应时间。
#4。移动会话数据
许多应用程序存储session IDs in cookies,但将会话数据本身保存在数据库表中。这可能会为数据库带来频繁阅读和写作会话管理的负担。
减少此负载的一种选项是使用快速内存高速缓存,例如Redis或Memcach以存储会话数据而不是数据库。但是,如果缓存下降,则可能会丢失数据。
-
另一种方法是使用JWT代币将会话详细信息直接存储在客户端cookie而不是服务器端。这避免了恒定的数据库命中会话。但是JWT代币具有诸如令牌尺寸限制和安全考虑因素之类的缺点。
选择方法时的潜在缺点,例如数据丢失或令牌安全需要评估。
使用缓存或客户端令牌优化会话存储可以显着减轻数据库负载。 会话数据可以从数据库移动到缓存。这避免了恒定读取/写入数据库进行会话管理。
#5。数据库索引
数据库索引通过优化数据查找来改善查询性能。索引允许数据库快速从表中找到并检索数据,而无需扫描每一行。
当在列上创建索引时,数据库维护单独的索引数据结构,以使列值有序和可搜索。当查询过滤或在该列上排序时,可以快速搜索和排序。
性能增长取决于表的大小。对于具有数百万行的大桌子, 正确的索引在优化数据访问方面具有巨大的不同。 >
#6。 NOSQL数据库
NoSQL databases与内置碎片水平缩放。 NOSQL数据库跨碎片分发数据。查询被路由到适当的碎片。
NOSQL数据库,例如Cassandra and MongoDB使用内置的碎片和复制水平缩放。
云中的扩展数据库
cloud platforms(如Amazon Web Services (AWS),Google Cloud和Microsoft Azure)的灵活性和按需可伸缩性为扩展数据库性能提供了许多优势。云不是对本地基础架构进行大量的前期投资,而是从较小的数据库实例开始,并根据需要无缝扩展资源来处理不断增长的数据量和用户。
#1。云中的扩展数据库
- 概述AWS,Google Cloud和Azure等云平台提供的灵活性和可扩展性。
- 能够从小型资源开始并根据需要无缝扩展。
- 避免在本地基础设施上进行大量的前期投资。
#2。利用自动缩放
- 诸如AWS Aurora之类的云数据库可以根据需要自动扩展计算和存储。
- 设置基于CPU利用或吞吐量等指标的自动缩放策略。
- 随着数据的增长,有助于保持交通峰值的性能。
#3。托管数据库服务
- 诸如AWS RDS和DynamoDB之类的服务在幕后为您提供缩放。
- 抽象管理缩放的操作负担。
- 内置的容错耐受性和高可用性。
- 自动缩放,读取复制品,缓存等的选项
#4。数据库群集
- 像Amazon RDS这样的工具允许在EC2实例的簇上运行数据库。
- 通过添加读取副本和分区数据来水平缩放。
- AWS会照顾复制数据,失败。
- 可以在EC2上实现用于缩放NOSQL数据库的碎片。
#5。选择云数据库模型
- 关系数据库,例如AWS RDS用于交易和复杂查询。
- DynamoDB用于高扩展性和键值数据的吞吐量。
- EC2上的Elasticsearch用于可扩展的全文搜索。
- 像Neptune这样的图形数据库如果关系至关重要。
#5。测试并迁移到云
- 迁移到云之前的基准性能。
- 完整开关之前的负载下的测试缩放功能。
- 使用复制和逐渐剪切迁移到云数据库。
维护缩放数据库
#1。监视和警报
- 设置监视工具以跟踪所有数据库实例的性能指标。监视CPU,内存,I/O,网络用法,查询延迟,错误等。
- 配置警报规则以通知使用阈值是否越过或出现问题。 迅速检测到问题。
#2。自动故障转移
- 使用MySQL和PostgreSQL等数据库的自动禁用和冗余功能来减少停机时间。如果主要节点失败,则可以接管自动辅助实例。
#3。备份和恢复
- 实施定期备份并跨碎片和副本进行测试还原。备份防止数据丢失,并测试还原验证恢复过程。
#4。查询性能
- 通过调整和缓存不断优化慢速查询。一个碎片上的不良查询可以陷入整个数据库。
#5。容量规划
- 提前计划数据量和工作量的预期增长。在达到限制之前,主动监视使用趋势并主动扩展碎片/复制品。
#6。维护窗口
- 有停机窗口可以执行数据库修补,升级,重新索引和其他维护任务。
通过仔细监控,冗余,备份和容量计划,缩放数据库拓扑可以提供高性能和可用性。但是维护任务对于防止问题的问题至关重要。
结论
缩放数据库需要仔细的容量计划,工作量分析和性能基准测试。结合垂直缩放,水平缩放,缓存,查询优化和数据库体系结构更改允许支持高工作负载。密切监视工作负载,迭代并调整您的缩放配置,并计划维护窗口以防止停机。有了正确的数据库缩放策略,您可以构建一个数据基础架构,该数据基础结构可以顺利处理需求。
常见问题解答
扩大和扩展之间有什么区别?
扩展(或垂直缩放)意味着增加单个服务器的资源。扩展(或水平缩放)是指在多个服务器上分配负载。
何时推荐数据库?
当您拥有大量数据,高写入吞吐量或可以隔离的复杂/长期查询时,碎片会有所帮助。
缓存如何帮助刻度数据库?
缓存通过避免磁盘阅读来改善阅读性能。它减少了用于经常访问的未改变数据的数据库负载。
测试缩放数据库的哪些技巧?
带有预期高峰工作负载,监视性能指标,检查查询响应时间的负载测试,并迭代解决瓶颈。
NOSQL数据库如何帮助扩展?
许多NOSQL数据库具有专门设计的内置水平缩放,复制和碎片。