协慌网

登录 贡献 社区

数据库水平和垂直缩放之间的差异

我遇到过许多 NoSQL 数据库和 SQL 数据库。有各种参数可以衡量这些数据库的优缺点,而可伸缩性就是其中之一。水平和垂直缩放这些数据库有什么区别?

答案

水平扩展意味着通过向资源池中添加更多计算机来进行扩展,而垂直扩展意味着通过向现有计算机中添加更多的功率(CPU,RAM)来进行扩展

记住这一点的一种简单方法是,想一想服务器机架上的一台机器,我们在水平方向上添加了更多的计算机,在垂直方向上添加了更多的资源。

水平缩放/垂直缩放可视化

在数据库世界中,水平扩展通常基于数据的分区,即每个节点仅包含部分数据,在垂直扩展中,数据驻留在单个节点上,并且扩展是通过多核完成的,即分散负载在该计算机的 CPU 和 RAM 资源之间。

使用水平扩展时,通常可以通过在现有池中添加更多计算机来动态扩展,这很容易 - 垂直扩展通常限于单台计算机的容量,超出该容量的扩展通常会涉及停机时间,并且存在上限。

水平扩展的好示例是 Cassandra,MongoDB, Google Cloud Spanner ..,垂直扩展的好示例是 MySQL-Amazon RDS(MySQL 的云版本)。通过从小型机器切换到大型机器,它提供了一种垂直扩展的简便方法。此过程通常涉及停机时间。

诸如 GigaSpaces XAPCoherence等之类的内存中数据网格通常仅针对水平和垂直缩放进行了优化,这是因为它们未绑定到磁盘。通过分区进行水平扩展,并通过多核支持进行垂直扩展。

您可以在我以前的文章中阅读有关此主题的更多信息:横向扩展纵向扩展以及 NOSQL 替代方案背后的通用原则

水平缩放===> 成千上万的奴才将为您共同完成工作。

垂直缩放===> 一个庞大的工作将为您完成所有工作。

在此处输入图片说明

让我们从扩展资源的需求开始,这样您的系统现在可以处理比以前更多的请求。

当您发现系统变慢并且无法处理当前请求数时,您需要扩展系统。

这为您提供了两种选择。您可以增加当前正在使用的服务器中的资源,即增加 RAM,CPU,GPU 和其他资源的数量。这称为垂直缩放。

垂直缩放通常很昂贵。它不会使系统具有容错能力,即,如果要扩展使用单个服务器运行的应用程序,则如果该服务器发生故障,则系统将发生故障。同样,线程数量在垂直缩放中保持不变。垂直扩展可能会要求您的系统在处理过程中停顿一会儿。服务器上资源的增加需要重新启动,并使系统停机。

解决此问题的另一种方法是增加系统中存在的服务器数量。该解决方案在技术行业中得到了广泛使用。最终,这将减少每个服务器中每秒请求的速率。如果需要扩展系统,只需添加另一台服务器即可。您不需要重新启动系统。每个系统中的线程数减少,从而导致高吞吐量。为了将请求均等地隔离到每个应用程序服务器,您需要添加负载均衡器,该负载均衡器将充当 Web 服务器的反向代理。整个系统可以称为单个集群。您的系统可能包含大量请求,这将需要更多这样的集群。

希望您了解将缩放引入系统的整个概念。