2012-07-29 133 views
350

我遇到了很多NoSQL数据库和SQL数据库。有不同的参数来衡量这些数据库的优势和劣势,可扩展性就是其中之一。水平和垂直缩放这些数据库有什么区别?为数据库水平和垂直缩放之间的区别

+0

http://en.wikipedia.org/wiki/Scalability的整个概念 - 术语适用于所有软件/系统 – 2012-07-29 08:41:55

+2

收费spaecial注意_Database_部分HTTP ://en.wikipedia.org/wiki/Scalability#Database_scalability – user454322 2014-08-15 03:41:14

+0

http://stackoverflow.com/questions/5401992/what-does-scale-horizo​​ntally-and-scale-vertically-mean – 2015-09-11 15:02:39

回答

620

水平扩展意味着通过添加更多的机器到您的资源池规模,而垂直扩展意味着通过添加更多的功率(CPU,RAM),以现有的机器你规模。

一个简单的方法来记住这是在服务器机架想到一机多用,我们在整个水平方向添加更多的计算机,并在垂直方向添加更多资源到一台机器。

                  Horizontal Scaling/Vertical Scaling Visualisation

在数据库世界水平缩放常常是基于划分的数据,即每个节点只包含数据的一部分,在垂直缩放数据驻留在单个节点上,通过多内核完成扩展,即在该机器的CPU和RAM资源之间传播负载。

通过水平缩放,通过在现有池中添加更多机器来动态扩展通常更容易 - 垂直缩放通常仅限于单个机器的容量,超出容量的扩展通常涉及停机时间并且带有上限限制。

水平伸缩的一个很好的例子是Cassandra,MongoDB ..垂直伸缩的一个很好的例子是MySQL - Amazon RDS(MySQL的云版本)。它提供了一种简单的方法,通过从小型机器切换到大型机器进行垂直扩展这个过程通常涉及停机时间。

内存数据网格如GigaSpaces XAP,Coherence等常常针对水平和垂直缩放进行了优化,只是因为它们没有绑定到磁盘。通过多核支持通过分区和垂直缩放进行水平缩放。

你可以阅读更多关于这个问题在我前面的帖子: Scale-out vs Scale-upThe Common Principles Behind the NOSQL Alternatives

+1

还有Couchbase,Riak, HBase,CitrusLeaf和Infinispan进一步完成了这个清单(还有更多)。 – scalabl3 2012-08-01 06:39:22

+1

@Nati Shalom是否NOSQL数据库水平扩展? – 2012-12-31 06:08:32

+0

是否可以水平扩展MySQL - 也许有一些扩展或工具? – 2013-12-21 23:38:21

6

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

Couchbase也是一个梦幻般的NoSQL水平缩放数据库,用于许多商业高可用性应用程序和游戏,并且可以说是该类别中表现最好的。它跨群集自动分区数据,添加节点非常简单,您可以使用商品硬件,更便宜的虚拟机实例(使用Large而不是高内存,例如AWS的High Disk机器)。它由Membase(Memcached)构建,但增加了持久性。而且,对于Couchbase,每个节点都可以读取和写入,并且在群集中相当于只有故障转移复制(并非像mySQL中的所有服务器那样都是完整的数据集复制)。

性能明智的,你可以看到一个优秀的思科基准: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

还有就是没有提到一个额外的架构 - 基于SQL数据库服务支持横向扩展,而无需手动分片的复杂性。这些服务在后台执行分片,因此它们使您能够运行传统的SQL数据库,并像使用MongoDB或CouchDB这样的NoSQL引擎进行扩展。我熟悉的两种服务是PostgreSQL的EnterpriseDB和MySQL的Xeround。我在Xeround中看到了深入的post,这解释了为什么向外扩展SQL数据库很困难,以及它们如何以不同的方式进行处理 - 因为这是一个供应商职位,所以要用一点盐来处理。同时查看维基百科的Cloud Database entry,对SQL和NoSQL以及服务与自托管,供应商列表以及每种组合的缩放选项都有很好的解释。 ;)

+0

作为另一个数据点,我从Clustrix提交了另一个供应商文章:http://www.clustrix.com/blog/bid/259950/scale-up-vs-scale-out – clieu 2013-01-26 02:12:11

+0

Amazon RDS如何? – 2015-05-08 15:03:16

+0

我知道这是一个旧帖子...只是一些更新.. Xeround已关闭店铺。 PostreSQL的水平缩放选项并不是真正的水平缩放选项 - 它们只是数据库复制选项,您可以在其中创建对复制数据库的一些操作。 – 2018-01-11 20:04:43

5

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

欲了解更多关于NuoDB的信息,请阅读他们的技术白皮书http://goo.gl/uzLIWB

25

水平可扩展性是通过连接多个硬件或软件实体来增加容量的能力,以便它们作为单个逻辑单元工作。

当服务器群集时,原始服务器将水平缩放。如果集群需要更多资源来提高性能并提供高可用性(HA),则管理员可以通过向集群添加更多服务器来扩展。

水平可伸缩性的一个重要优势是它可以为管理员提供动态增加容量的能力。另一个优点是从理论上讲,横向可伸缩性仅受成功连接多少实体的限制。例如,分布式存储系统Cassandra运行在遍布不同数据中心的数百个商品节点之上。由于商品硬件水平扩展,Cassandra具有容错能力,并且没有单点故障(SPoF)。

另一方面,垂直可伸缩性通过向计算机添加更多资源(如更多内存或附加CPU)来增加容量。垂直缩放(也称为向上缩放)通常需要停机,而新的资源正在被添加,并且具有由硬件定义的限制。例如,当Amazon RDS客户需要垂直扩展时,他们可以从较小的机器切换到较大的机器,但亚马逊最大的RDS实例只有68 GB的内存。

水平缩放具有优点和缺点。例如,向集群添加廉价商品计算机可能乍一看似乎是一种具有成本效益的解决方案,但管理员必须知道这些附加服务器的许可成本,供电和制冷的额外运营成本以及他们将在数据中心占用大面积的空间,确实使水平缩放成为比垂直缩放更好的选择。

14

水平缩放 - 也称为“扩展”基本上是为您的软件系统添加更多机器或设置集群或分布式环境。这通常需要一个负载平衡器程序,它是标准3层客户机 - 服务器体系结构模型中的中间件组件。

负载均衡器负责在集群中的各种后端系统/机器/节点之间分配用户请求(负载)。这些后端机器中的每一台都运行软件的副本,因此能够处理请求。这只是负载均衡器可能执行的各种功能之一。另一个非常常见的责任是“健康检查”,负载平衡器使用“ping-echo”协议或与所有服务器交换心跳消息以确保它们正常运行。

负载平衡器通过维护每台机器的状态来分配负载 - 每台机器提供多少请求,哪台机器处于空闲状态,哪台机器负载有排队的请求等。因此,负载平衡算法考虑了这种情况将请求重定向到适当的服务器机器之前的事情。它还考虑到网络开销,并可能选择最近的数据中心中的服务器,前提是它可用于服务请求。

请求 - 响应也可以在2种不同的方式来完成:

  1. 负载均衡总是充当每个响应的中介程序 - 在这种情况下,一旦请求已被移交给服务器通过负载均衡器,从服务器到用户的任何响应都将通过负载均衡器。因此,实际服务请求的服务器机器将永远不会直接与运行客户机应用程序的用户机器进行交互。承载负载平衡器程序的机器将处理所有来自用户的请求/响应。

  2. 负载平衡器不充当用于从服务器计算机传来的回应的中介 - 在这种情况下,一旦服务器已经接收到来自负载均衡器的请求时,它绕过负载平衡器和直接传送给它的反应客户。

设置群集和负载平衡器的前端界面的客户端应用程序并没有真正完成我们的横向扩展架构和设计。还有很多关键问题需要回答,以及一些将会影响我们系统整体性能的关键设计决策。

我们首先需要确定我们的业务目标和我们想要增加价值的领域。这些目标将产生各种要求。然后我们应该问自己关于不同系统性质的各种问题。

  1. 这样的设计是否能满足我们的性能要求?

  2. 我们关心哪些性能特征? 我们有兴趣在任何特定时间内提供最大数量的请求,是否是整个系统的吞吐量? 或者它是系统的响应时间,我们设计尽可能少的时间将响应发送回客户端? 这些和许多其他类型的性能特征都是相互关联的。

  3. 这样的设计是否可以满足我们的可用性要求?系统容错?如果是这样,它的程度是什么?

  4. 这样的设计是否可靠?它会影响正确性吗?我们不应该忘记,100%的正确性是任何系统的隐含目标。

  5. 我们是否真的达到了我们的可扩展性目标?可能会实现短期或直接的目标,但长远来看会发生什么?

所有这些类型的要求都应该有与之相关的量化措施。

然后,我们应该通过质疑自己,开发原型和改进设计来做出重要的设计决策。

  1. 首先,是使用负载均衡器唯一的方法来分配负载和水平缩放系统?

  2. 各种后端服务器或节点是否相互通信? 如果是,那么系统如何解决一个或多个节点永久或暂时关闭的情况? 如果是,那么系统如何解决连接节点的网络已关闭但所有节点都已启动并正在运行的情况?最重要的是,我们是否必须区分这两种情况?怎么样 ?

  3. 无论后端节点是否相互通信,我们的系统是否需要在所有节点之间保持一致的数据?我们关心什么级别的一致性?难道是在任何时候,所有节点上的数据应该是一致的。 或者稍后的某个时间点,所有节点上的数据将保持一致。如果是这样的话,那么“稍后”是什么?何时以及如何将所有节点收敛到一致状态?我们将如何在所有节点上实现“全序”操作?我们有全球时钟吗?如果我们依靠每个节点的本地时钟,那么我们如何同步所有机器的时钟。它们看起来很容易倒退,或者具有乱序时钟的机器可能会加入群集。因此,我们可能会忽略最新数据,并将旧数据视为最新数据。
  4. 我们必须设计什么集群设置? 它是一个“副本”群集,其中每个节点上的数据都被复制到某个或每个其他节点。如果是前者,复制因素是什么,我们如何决定? 或者它是一个分片群集,其中群集分为各种分片或单元。分片是指定的一组节点。每个分片处理一个特定的数据分区。跨分片的数据不会被复制,但每个分片都可以在其内部采用复制策略。无论我们设计什么样的分布式系统,理想情况下都能够回答上述和其他类似的问题。

所有这些都是使分布式系统如此有趣和具有挑战性地设计和实现的原因。

垂直缩放 - 也被称为“按比例放大”的方法是增加一个单一的机器的能力的尝试: 通过添加更多的处理能力 通过增加更多的存储 更多存储器等 总结:

这里重要的是了解这两种缩放方法之间的差异,确定适合我们要求的内容,并查看应用程序是否真的适合我们选择的模型。正如您现在已经明白的那样,水平扩展会以集群设置,管理和维护成本以及复杂性的形式带来开销。设计越来越复杂,编程模型也发生了变化。

因此,简单地扔入新的硬件和添加更多的节点或机器不是开始的方式。首先,查看是否可以通过增加单台机器的容量或调整特性来满足要求。如果不是,则采用横向扩展方法或两者的组合。

4

像Oracle,db2这样的SQL数据库也支持通过共享磁盘集群进行水平扩展。例如Oracle RAC,IBM DB2 purescale或Sybase ASE Cluster Edition。可以将新节点添加到Oracle RAC系统或DB2 purecale系统以实现水平缩放。

但是,这种方法不同于noSQL数据库(如mongodb,CouchDB或IBM Cloudant),数据分片不是水平缩放的一部分。在noSQL数据库中,数据在水平缩放过程中被分割。

2

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

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

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

垂直缩放比较昂贵。 它不会使系统具有容错能力,即如果您要扩展使用单个服务器运行的应用程序,那么如果该服务器出现故障,系统将停止运行。 线程数量在垂直缩放中保持不变。 当进程发生时,垂直缩放可能需要系统暂时关闭。增加服务器上的资源需要重新启动并关闭系统。

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

希望你得到引入扩展到系统