哪些类型的系统必须“扩大”而不是“扩大”?


12

我一直在想,是否有系统必须“扩展”(到更强大,更昂贵的服务器上),而不是通过拆分成许多较小的服务器来“扩展”。

是否存在这样的系统,如果存在,是否特别有什么趋向于导致需要扩展而不是扩展的系统?(例如,ACID投诉数据库事务或其他强大的数据完整性要求可能会产生这种需求。)

由于向上扩展似乎比扩展向外扩展会带来更高的硬件成本,因此,如果可能的话,您似乎希望避免这种事情,但是我不确定是否总是可以避免的。

因此,是否存在无法扩展的系统,而必须进行扩展?是什么原因造成的?您将如何识别这种系统?(它们通常具有一些共同点,可能使它们更易于识别吗?)



7
如果您的软件尚未设计成可以横向扩展,则扩展通常会容易得多。重新设计软件要么昂贵,要么如果您不拥有源代码,或者对开发人员有影响力,那将是不可能的。
Zoredache 2014年

编写这样的系统是一个非常困难的问题。尤其是母版/母版设计可以在多个母版同时写入同一记录的地方来去去去。谁写赢?
马特2014年

3
您可能对CAP定理感兴趣。基本上,如定理中定义的要求一致性和可用性的服务将不能容忍分区。大多数现实世界的需求可能会牺牲一些一致性以实现最终的一致性(事实发生后手动或自动处理不一致),或者在某些参与者不可用时拒绝处理请求,从而牺牲可用性。因此,同时需要绝对一致性和绝对可用性的系统实际上被迫扩大规模。
Lie Ryan

1
如果用“可靠的LAN”来表示“永不失败”,那么您就不是为现实世界而设计。
mfinni 2014年

Answers:


18

我主要使用的是水平缩放潜力为零的应用程序。即使它在Linux上运行,应用程序,数据结构和I / O要求也迫使我“逐步扩展”到越来越大的系统上,以适应增加的用户工作量。

许多传统的业务和交易应用程序都具有这些类型的约束。这是我强调行业专注于云解决方案和由DevOps驱动的Web规模架构的原因之一,而忽略了计算世界的很大一部分。

不幸的是,我所描述的扩大规模的系统确实不算什么,因此该行业倾向于忽略其价值或不重视解决大型关键系统(例如牛与宠物)所需的技能。


1
“最容易做的就是把硬件扔在问题上。” 请,摩尔定律,不要停止工作!
cjc

2
@Demetri-我认为Microsoft SQL Server是最“高端”的产品,它是典型的“向上扩展”而不是“向外扩展”。除非您满足一组非常具体的合并复制条件,否则几乎不可能将其扩展。
马克·亨德森

3
或者,如果您可以将解决方案分解为多个问题。例如,不要针对您的交易数据库运行报告;击中了在其他硬件上运行的副本。\
mfinni 2014年

1
-1。我认为您错过了这个问题的核心。如果可以将系统重写为横向扩展系统,则不会强制扩展您的问题。这个问题的问题域是这样的,即使是从头开始设计,也根本不可能进行横向扩展。
Lie Ryan

1
@LieRyan理解。我要说明的是,由于架构限制,即使重新设计,我支持的应用程序也无法扩展(这是一个类似数据库的系统)。
ewwhite

8

从开发人员的角度来看,我可以说几乎所有传统的主流数据库引擎都只能向外扩展,而向外扩展则是深思熟虑的。

近年来,由于需要更大的可伸缩性和高度可用的系统,人们一直在努力扩展现有数据库。但是,由于设计受遗留代码的阻碍,因此它很大程度上只是固定在设计上,而不是设计的基础。如果尝试扩展大多数众所周知的数据库引擎,就会遇到这种情况。添加从服务器可能很难设置,并且您会注意到它具有很大的局限性,其中某些局限性可能要求重新调整数据库表的位置。

例如,它们大多数是主/(多)从属设计,而不是多主设计。换句话说,您可能只是将一台整个服务器放在那儿而无法处理查询。有些功能可以,但是有局限性...例如,只读多从机设计。因此,您可能有一台服务器进行写操作,而其他所有服务器都提供只读数据。您会注意到,在设置这些系统时,这并不总是一个简单的过程,并且很难正常工作。在很多情况下,添加感觉非常麻烦。

另一方面,从一开始就有一些新的数据库引擎通过并发和多主机设计进行开发。 NOSQLNewSQL是新的设计类。

因此,扩大传统SQL服务器的性能似乎是最好的方法!使用NOSQL和NewSQL时,它既可以扩展又可以扩展。

传统RDBMS系统紧密耦合的原因是,它们都需要相同数据的一致视图。如果有多台服务器接受来自不同客户端的同一数据的更新,那么您信任哪一个?任何试图通过某种锁定机制确保数据一致的方法都需要来自其他服务器的合作,这可能会损害性能或影响数据质量,因为从客户端读取的任何数据可能都已过时。服务器需要在彼此之间决定写入同一记录时最新的数据。如您所见,这是一个复杂的问题,因为工作负载分布在服务器之间,而不仅是在进程或线程之间分布,因此对数据的访问仍然非常快,这使问题变得更加复杂。


从10g开始,Oracle RAC是否没有提供横向扩展?
Dani_l 2014年

它有。但是拥有RAC和拥有完美运行的RAC是两件事-确实需要特别小心才能保持运行。这是一个不错的设计。如果您需要它,您可能愿意付出代价。
TomTom 2014年

并注意Oracle RAC所需的共享存储系统。根据其实现方式,这可能会带来扩展问题。
马特2014年

7

在我看来,按工作流的并行程度以及并行线程之间需要协调的紧密程度来确定扩展/扩展范围。

单线程
无论出于何种原因,该工作流程只能在单线程中工作。

一个线程意味着一个系统意味着向上扩展以使其运行更快。

紧密耦合并行性
这是一个多线程系统,其中线程需要彼此紧密耦合。也许进程间通信需要非常快,或者所有这些都需要通过单个内存管理器进行管理。大多数RDBMS系统都是这种并行计算。

在大多数情况下,这些系统是那些规模出来但也有例外。例如,可以在单个系统映像样式群集上工作的工作流,单个内存空间,线程之间的高延迟可能会使扩展变得更容易。但是,与这样的SSI系统配合使用非常棘手,因此大多数工程师只能制造一个更大的盒子。

松散耦合并行性
这是一个多线程/进程系统,其中线程可以正常运行,彼此之间的延迟较高。或根本不需要互相交谈。扩展的网络服务和渲染场是此类系统的经典示例。像这样的系统比紧密耦合的并行性要容易得多,这就是为什么这种风格的系统令人兴奋的原因。

这是规模的风格出来是一个容易得多。


RDBMS紧密耦合的原因是因为它们与数据紧密耦合。即多个服务器访问相同的资源。
马特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.