垂直扩展方法,有时也称为“向上扩展”,侧重于向一台机器添加更多资源或更多处理能力。这些添加可能包括CPU和RAM资源的升级,这将提高单个服务器的处理速度或增加单台机器的存储容量,以应对不断增长的数据需求。
垂直扩展的一个优点是,它比替代的横向扩展方法更容易。具体来说,由于硬件资源或计算资源仅添加到一台机器,因此涉及的复杂性较少。这包括现有机器或现有服务器的初始垂直扩展,以及后续的维护更加简单。此外,由于只升级一台机器,因此垂直扩展在短期内通常比横向扩展方法更经济。
尽管如此,垂直扩展方法也有一些缺点。由于只有一台机器,升级或扩展的幅度有限。这意味着如果组织的单台机器没有必要的扩展容量,其可扩展性需求可能无法得到满足。
MongoDB Atlas使您能够根据需要轻松地垂直扩展或缩减。您甚至可以启用自动扩展,以确保您的可用资源始终满足您的需求。
优点
垂直扩展的主要好处是,除了运行数据库的硬件规格外,您的数据库基础设施没有任何变化。
因此,对应用程序来说是透明的。唯一的区别是您有更多的CPU、内存和/或存储空间。
如果不需要大量的存储和处理能力,垂直扩展是一个值得尝试的好选择。
缺点
扩展的缺点是,具有更多存储和处理能力的服务器可能要贵得多。
单个机器上可用的CPU、内存、网络接口和硬盘数量也有物理限制。对于在云平台提供商上扩展的用户,最终将达到可用的最高机器级别。
云提供商提供的可用配置选项可能有限,这意味着您可能只需要10%更多的资源,但下一个可用的级别有50%更多的资源,成本也增加50%。
如果垂直扩展需要在硬件之间迁移,可能会导致停机或服务中断。
当成本和/或机器限制成为问题时,请务必考虑<强>水平扩展强>。
水平扩展方法,有时称为“扩展”,包括添加更多机器以进一步分散数据库的负载,并增加整体存储和/或处理能力。执行水平扩展有两种常见方法——它们包括分片,这增加了系统的整体容量,以及复制,这增加了系统的可用性和可靠性。
优点
水平扩展是“无限可扩展”的,因为您总是可以添加另一台机器,而如果您已经使用可用的最大机器,可能无法购买更大的机器。
价格增长更可预测。添加额外机器的成本是可预测的,而升级到更大的机器可能会因为性能的小幅提升而带来越来越高的成本。
水平扩展还可以提供更好的性能和客户体验。一个例子是使用全球集群进行分发,以在每个地区提供更好的性能。
缺点
由于数据的分布式特性,水平扩展可能需要更改应用程序架构和代码。您存储和查询数据的方式可能会显著影响应用程序性能。
水平扩展的数据库系统可能更难以管理和维护,导致您和您的团队需要做更多的工作。
MongoDB使用称为<强>分片强>的方法实现水平扩展。
水平扩展的分片方法涉及将大型数据库划分为更小、更易于管理的部分(称为分片),然后将分片分布在多台机器上。每个分片包含数据的一个子集,每台机器负责存储和执行特定集合的分片请求。
例如,在下图中的数据分片数据子集是根据价格范围划分的。
这种方法通过提高系统的容错性和可用性来改进系统,因为单个机器的故障不会影响其他机器。然而,这种方法也增加了额外的复杂性,因为确保数据在分片中均匀分布并且没有重复或丢失数据很重要。
部署和管理分片集群最简单、最方便、最经济的方法是通过MongoDB Atlas,它简化了分片集群的实现。
只要您在一个足够大的专用集群(M30或更大)上,您只需要启用它
水平扩展的复制方法在多台机器上创建相同数据库的多个副本。通常,一台机器被指定为主机(例如,第一个进行数据库更改的机器),对该数据库所做的所有数据库更改都会传播到所有其他数据库副本(例如,其他具有相同数据库的机器)。这确保了所有数据库实例都是最新的。
这种水平扩展方法的优势在于大大提高了系统的可用性和容错性。具体来说,如果主机出现故障,其他现有机器中的一台可以被提升为主机。而且,由于所有机器都有相同的数据库和相同的数据存储,系统可以继续不间断地运行。此外,由于机器数量的增加,性能也可以得到提升,因为数据请求可以分布到多台机器上。
复制的缺点包括引入了额外的复杂性以及数据重复或丢失的风险(与分片类似)。此外,由于复制需要在多台机器上使用多个数据库副本,因此还会增加额外的系统流量和存储需求,这也可能导致额外的系统和人员成本。
复制默认包含在MongoDB Atlas中,无需额外的复杂性或设置工作即可提供更高的可用性和容错性。
虽然垂直扩展和水平扩展都可以增加系统的容量并优化性能,但在选择组织适用的正确方法之前,了解这些差异是很重要的。
垂直扩展:由于垂直扩展侧重于增强一台机器的存储和处理能力,因此这些增强的幅度是有限的。这个限制取决于被增强机器的规格。云提供商提供的选项也有局限性,这意味着你可能只需要10%更多的资源,但下一个可用的层级可能需要50%的资源,成本却增加50%。
水平扩展:由于水平扩展侧重于添加额外的机器(例如,向外扩展),在技术上,系统增强的幅度是没有限制的。当然,预算和系统可管理性是关键因素,但从技术上讲,有更大的容量来满足组织需求。
垂直扩展:使用一台增强的机器意味着,当进行必要的维护或升级时,很可能会有一段时间的系统停机或对用户访问和体验的影响。此外,如果发生硬件或软件故障,由于只有一个机器承载组织的工作负载,系统停机几乎是必然的。尽管如此,由于只有一台机器,停机时间可能较短,因为只需要检查、修复或恢复一台机器。
水平扩展:与垂直扩展不同,系统维护或升级通常可以以这种方式完成,即在维护一台机器或系统的一部分不可用时,其他机器可以承担该机器的负载。这意味着用户通常不会意识到某些机器正在被工作。
垂直扩展:由于垂直扩展与单一机器的增强相关,因此在扩展时复杂性有限是有道理的。
水平扩展:为了进行水平扩展,需要添加更多机器,因此增加系统复杂性是这种扩展策略的特征。尽管如此,所涉及的复杂性是可调节的,这意味着谨慎的扩展规划和发展内部技能集可以帮助管理组织在决定水平扩展时遇到的增加的复杂性。
在考虑与垂直扩展和水平扩展相关的内部技能集要求时,有一些共同之处。例如,无论选择哪种方法,所需的内部技能集包括
系统管理:对系统管理的深入了解对于管理和配置基础设施至关重要,无论是涉及单台机器(垂直扩展)还是机器集群(水平扩展)。
自动化和脚本:熟悉自动化工具和脚本语言(例如,Bash、Python)有助于简化管理任务,管理配置以及部署两种扩展方法中的部署。
然而,有些技能集是专门针对垂直扩展或水平扩展的。
熟悉与安装和升级单台机器以扩展容量相关的硬件和组件
单个服务器配置和优化
虚拟化软件和熟悉微服务、容器等
网络和分布式系统管理
分布式计算和负载均衡
网络流量、瓶颈和性能故障排除
容器化和编排,包括使用容器管理、扩展和部署应用程序。
与数据库扩展相关的成本在某种程度上较为复杂,因为必须考虑总体成本以及成本的时机。具体而言,从成本角度来看,垂直扩展可能具有吸引力,因为仅增强了一台机器,且不需要管理多台机器的内部技能集增强。这意味着短期内成本较低。然而,当增强的单台机器的容量达到(例如,可扩展性和存储)时,组织将不得不在机器更换或扩展(例如,水平扩展)之间做出选择,这可能会产生更高的成本。对于一些人来说,这可能是首选的,因为在此期间可能没有足够的资金进行扩展(例如,垂直扩展),但可以通过预算或预期收入在未来获得。
相反,其他组织可能会发现与水平扩展相关的成本与其整体IT战略和预算更为一致。这是因为可以一台机器一次进行扩展,从而允许有计划的扩展,同时避免伴随大量支出和潜在系统中断的意外可扩展性限制事件。
在考虑为组织选择正确的数据库扩展策略时,重要的是要考虑许多因素。
首先需要考虑的是数据库扩展的催化剂。是由于短期内预期将得到解决的短期情况,还是由于存储和处理需求的增加预计将在长期内继续增长?沿着同样的思路,是否预计用户需求将波动或将会有不断增加的稳定工作量?与可用预算相比,规划长期容量限制有多重要?
下一个需要考虑的问题是正在扩展的数据库对业务的紧迫性。是否可以接受间歇性、计划外的中断,或者数据库必须在任何时候都可用?除了采取适当的风险管理步骤以确保在关键硬件或软件故障发生时恢复数据库外,这种停机时间对用户和整个组织有多大的损害?
从预算角度考虑,需评估现有资金是作为短期解决方案还是组织整体数据管理策略的一部分。例如,如果作为整体扩张策略的一部分,是采用额外一台机器进行少量增强来实现横向扩展,还是以相同成本对现有机器进行重大增强以实现纵向扩展?或者,这是一个过渡性解决方案,将组织过渡到未来更广泛的数据库扩展,届时现有设备将变得过时?
另一个考虑因素是预算的可用性。组织更关心的是总体保持低成本,还是目前保持较低成本,打算将来增加支出,或者可能是一个长期稳定的投资,以扩展其数据库系统?
通过考虑这些问题,并与垂直扩展与横向扩展之间的差异以及详细业务需求相关联,组织可以确定其IT组织和企业用户社区的最佳前进策略。总结一下,让我们来看看针对几个优先级和预算的一些推荐解决方案。
MongoDB Atlas提供了一个免费数据库层,非常适合学习MongoDB以及您的开发和测试阶段。虽然这个选项由于资源限制不适合生产应用,但它提供了一个在应用程序开发过程中快速测试想法的无风险方式。
在MongoDB Atlas中创建一个无服务器集群可以根据应用程序需求无缝扩展,这样您就永远不会为未使用的资源付费。无服务器非常适合需求不可预测的应用程序。
MongoDB Atlas中的数据库实例默认是副本集。这意味着每个数据库都有至少两个可以依赖的备份,以防主节点出现任何问题。
目前MongoDB Atlas可以垂直扩展以处理4TB存储容量的数据库。如果需要更多存储,则需要进行横向扩展,每个分片处理数据库的整体部分。
在MongoDB Atlas中启用集群自动扩展将确保可用的资源在时间上满足需求,以适应季节性、促销和其他增加流量的活动。这为您提供了自动的上下文垂直扩展,而无需担心设置新服务器、转移数据,甚至扩展时的停机。
“数据库扩展”一词指的是根据任何给定时间点的数据量或用户活动来更改数据库系统容量的过程。如果预期由于某些广告投放或服务受欢迎度的持续增加而出现突然的流量激增,则扩展可能是临时的;如果是服务受欢迎度持续增加,则扩展可能是永久的。
数据库扩展有两种方法:横向扩展和纵向扩展。纵向扩展意味着向一台机器添加更多硬件资源、计算能力或数据存储。而横向扩展意味着添加更多服务器以及通过添加机器和计算资源进行分布式计算。
水平扩展的常见类型包括
分片:水平扩展的分片方法涉及将大型数据库划分为更小、更易于管理的部分,称为分片,然后将在多台机器上分布这些分片。
复制:水平扩展的复制方法在多台机器上创建同一数据库的多个副本。
集群:水平扩展的集群方法涉及多个服务器或机器的组合,以便它们可以作为一个统一的系统运行。
垂直扩展和水平扩展之间存在几个关键区别,包括
可扩展性
系统弹性
复杂性
内部技能集要求
成本