【问题标题】:Difference between scaling horizontally and vertically for databases [closed]数据库水平和垂直缩放之间的差异[关闭]
【发布时间】:2012-07-27 07:36:31
【问题描述】:

我接触过很多 NoSQL 数据库和 SQL 数据库。有不同的参数来衡量这些数据库的优势和劣势,可扩展性就是其中之一。横向和纵向扩展这些数据库有什么区别?

【问题讨论】:

标签: database database-design nosql scalability


【解决方案1】:

水平扩展意味着您通过在资源池中添加更多机器来扩展,而垂直扩展意味着您通过向现有机器添加更多功率(CPU、RAM)来扩展强>.

记住这一点的一个简单方法是将机器想象成服务器机架上的机器,我们在水平方向添加更多机器,并在垂直方向向机器添加更多资源强>方向。

             

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

使用水平扩展时,通过将更多机器添加到现有池中来进行动态扩展通常更容易 - 垂直扩展通常仅限于单台机器的容量,超出该容量的扩展通常会导致停机并具有上限.

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

GigaSpaces XAPCoherence 等内存数据网格通常针对水平和垂直缩放进行优化,因为它们没有绑定到磁盘。通过分区实现水平扩展,通过多核支持实现垂直扩展。

您可以在我之前的帖子中阅读有关此主题的更多信息: Scale-out vs Scale-upThe Common Principles Behind the NOSQL Alternatives

【讨论】:

  • 还有 Couchbase、Riak、HBase、CitrusLeaf 和 Infinispan 进一步完善列表(还有更多)。
  • 我在这里有点困惑......添加更多机器实际上与添加更多 cpu/ram 相同......然后它们两者有什么不同,因为当我们添加一台新机器时,它带有 cpu和ram,如果我错了,请纠正我。
  • @SubhamTripathi 正如这里所解释的,垂直扩展仅限于一个服务器(或一小组服务器)并且它有一个实际的上限(这意味着你不能超过 512 GB 的 RAM) .另一方面,水平缩放实际上可以无限期地发生。
  • 我非常高兴我在第 1337 次投票中给出了这个很棒的答案。
  • @Werewoof 我的是第 1369 位。 ;)
【解决方案2】:

横向扩展 ===>成千上万的小兵会一起为你完成这项工作。

垂直扩展 ===> 一个大块头将为您完成所有工作。

【讨论】:

    【解决方案3】:

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

    当您意识到您的系统变慢并且无法处理当前数量的请求时,您需要扩展系统。

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

    垂直缩放通常成本高昂。 它不会使系统容错,即如果您正在扩展使用单个服务器运行的应用程序,如果该服务器出现故障,您的系统将出现故障。 此外,线程的数量在垂直缩放中保持不变。 垂直缩放可能需要您的系统在处理发生时暂时停机。增加服务器上的资源需要重新启动并关闭系统。

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

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

    【讨论】:

      【解决方案4】:

      还有一个未提及的附加架构 - 基于 SQL 的数据库服务,可实现水平扩展,而无需手动分片的复杂性。这些服务在后台进行分片,因此它们使您能够运行传统的 SQL 数据库并像使用 MongoDB 或 CouchDB 等 NoSQL 引擎一样进行横向扩展。我熟悉的两个服务是 EnterpriseDB 用于 PostgreSQL 和 Xeround 用于 MySQL。我看到了 Xeround 的一篇深入的 post,它解释了为什么在 SQL 数据库上横向扩展很困难,以及它们如何以不同的方式进行扩展——因为它是供应商的帖子,所以对此持保留态度。另请查看 Wikipedia 的 Cloud Database entry,对 SQL 与 NoSQL 以及服务与自托管进行了很好的解释,并列出了每种组合的供应商和扩展选项。 ;)

      【讨论】:

      • 作为另一个数据点,我从 Clustrix 提交了另一个供应商帖子:clustrix.com/blog/bid/259950/scale-up-vs-scale-out
      • 我知道这是一篇旧帖子......只是一些更新...... Xeround 已经关闭了商店。 PostreSQL 的水平扩展选项并不是真正的水平扩展选项——它们只是数据库复制选项,您可以在其中对复制的数据库产生一些操作。
      【解决方案5】:

      是的,水平扩展意味着添加更多机器,但这也意味着机器在集群中是相等的。 MySQL 可以通过使用副本在读取数据方面水平扩展,但是一旦达到服务器内存/磁盘的容量,您就必须开始跨服务器分片数据。这变得越来越复杂。通常在副本之间保持数据一致是一个问题,因为复制率通常太慢而无法跟上数据更改率。

      Couchbase 也是一个出色的 NoSQL 水平扩展数据库,用于许多商业高可用性应用程序和游戏,并且可以说是该类别中性能最高的数据库。它在集群中自动对数据进行分区,添加节点很简单,并且您可以使用商品硬件、更便宜的虚拟机实例(例如使用大型而不是高内存、AWS 的高磁盘机器)。它基于 Membase (Memcached) 构建,但增加了持久性。此外,在 Couchbase 的情况下,每个节点都可以进行读取和写入,并且在集群中是平等的,只有故障转移复制(而不是像在 mySQL 中那样跨所有服务器的完整数据集复制)。

      性能方面,您可以看到出色的 Cisco 基准测试:http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server

      这是一篇关于 Couchbase 架构的精彩博文:http://horicky.blogspot.com/2012/07/couchbase-architecture.html

      【讨论】:

      • “使用大内存而不是高内存”是什么意思?大内存和高内存?是错字还是有区别
      【解决方案6】:

      传统的关系数据库被设计为客户端/服务器数据库系统。它们可以水平缩放,但这样做的过程往往很复杂且容易出错。像 NuoDB 这样的 NewSQL 数据库是以内存为中心的分布式数据库系统,旨在水平扩展,同时保持传统 RDBMS 的 SQL/ACID 属性。

      有关 NuoDB 的更多信息,请阅读他们的technical white paper

      【讨论】:

        【解决方案7】:

        Oracle、db2 等 SQL 数据库也支持通过共享磁盘集群进行水平扩展。例如 Oracle RAC、IBM DB2 purescale 或 Sybase ASE Cluster 版本。可以在Oracle RAC系统或DB2 purescale系统中添加新节点,实现水平扩展。

        但该方法与 noSQL 数据库(如 mongodb、CouchDB 或 IBM Cloudant)的不同之处在于数据分片不是水平扩展的一部分。在 noSQL 数据库中,数据在水平缩放期间被分片。

        【讨论】:

          【解决方案8】:

          公认的答案是水平与垂直缩放的基本定义。但与通常认为只有 Cassandra、MongoDB 等才能实现数据库水平扩展的普遍看法不同,我想补充一点,任何传统 RDMS 也可以实现水平扩展。也无需使用任何第三方解决方案。

          我知道很多公司,特别是基于 SaaS 的公司都这样做。这是使用简单的应用程序逻辑完成的。您基本上采用一组用户并将他们划分到多个数据库服务器上。例如,您通常会有一个“元”数据库/表来存储客户端、数据库服务器/连接字符串等,以及一个存储客户端/服务器映射的表。

          然后只需将来自每个客户端的请求定向到它们映射到的数据库服务器。

          现在有些人可能会说这类似于水平分区,而不是“真正的”水平缩放,它们在某些方面是正确的。但最终结果是您已经在多个数据库服务器上扩展了您的数据库。

          这两种水平扩展方法之间的唯一区别是,一种方法(MongoDB 等)的扩展是由数据库软件本身完成的。从这个意义上说,您正在“购买”缩放。在另一种方法中(对于 RDBMS 水平缩放),缩放是由应用程序代码/逻辑构建的。

          【讨论】:

            【解决方案9】:

            添加大量负载平衡器会产生额外的开销和延迟,这是在 nosql 数据库中横向扩展的缺点。这就像人们说不推荐使用 RPC 的问题,因为它不健壮。

            我认为在实际系统中,我们应该同时使用 sql 和 nosql 数据库来利用当今系统的多核和云计算能力。

            另一方面,如果使用 sql 数据库(如 oracle),则复杂的事务查询具有较高的性能。 NoSql 可以通过分片用于大数据和水平可扩展性。

            【讨论】:

              【解决方案10】:

              您有一家公司,只有 1 名员工,但当时您有 1 个新项目,您雇用了新的候选人——这就是横向扩展。其中新候选人是新机器,项目是对您的 api 的新流量/调用。

              作为 1 个项目,由 IIT/NIT 人员处理对您的 api/流量的所有请求。如果对您的 api 有更多请求,请解雇他并用高智商 NIT/IIT 的人代替他——这就是垂直扩展。

              【讨论】:

                猜你喜欢
                • 2016-05-01
                • 1970-01-01
                • 1970-01-01
                • 2015-05-11
                • 1970-01-01
                • 2015-09-24
                • 2011-07-21
                • 2020-12-29
                相关资源
                最近更新 更多