扩展整体与扩展微服务


15

使用微服务的常见论点之一是更好的可伸缩性。但我想知道这种说法是否真的有效。

假设我们有一个包含10个微服务的应用程序,其中9个有两个实例(用于冗余),其中一个有4个实例来处理负载(可伸缩性)。赞成微服务的论点是,您可以独立于其他服务扩展此微服务。

但是,可以说所有10个微服务都是单个整体中的模块,并且已部署了该整体的几个(例如22个,类似于上面的总和)实例。该系统应该能够处理一个关键部分的负载,因为有足够的实例可以执行此操作。如果实例中不需要程序逻辑,唯一的缺点是二进制文件和所需的RAM数量会稍大。但话又说回来,在大多数情况下,差异应该不会太大-至少与堆栈的其余部分相比(与Spring Boot相比)应该没有。可缩放的monlith的优势将是没有(大部分)分布式系统的谬误的更简单的系统。

我想念什么吗?


3
你在说几大块?因为我认为它可能不仅仅是“稍大”的RAM。更不用说部署时间了-修复一个错误可能需要22个部署而不是4个部署。但是也许您的整体组件很小,并且部署不需要很多时间,数据库迁移也不需要很多时间,依此类推。
Thomas Owens

我还没有数过代码行,但是整体会包含几千行代码(不是一个庞大的系统)。我考虑的出发点是,与诸如Spring和Hibernate这样的大型框架相比,实际应用程序代码的大小很小。实际上,部署的数量可能少于使用微服务的部署数量,因为如果您有2个实例,您将已经具有基本的冗余,而更多的实例将用于可伸缩性。
迪蒙

@deamon请注意,采用整体方法时,每个实例中没有完全死掉的代码部分,只有很少使用的代码。现在,代码本身可能只消耗少量的内存,但是如果它使用很多在内存中苦苦挣扎的对象,则该数量会大大增加。
Frank Hopkins

请注意,基本的“获取运行代码”的开销不一定像您从Java应用程序中所知道的那样大,在Java应用程序中,整个jvm通常是服务映像的一部分。
Frank Hopkins,

Answers:


21

微服务的重点不是减少处理器负载。实际上,由于通信和功能重复(以前是全局实用程序代码)的开销,通常会增加处理器的负载。

取消一个整体的观点是更要能维护,部署和运行的功能,一个复杂的系统在所有。一旦您的系统达到一定的大小,进行编译,测试,部署等工作,那么在保持适当的正常运行时间的情况下,整体组件将变得过于昂贵而无法实施。使用微服务,您可以逐步升级,重新启动或回滚系统。

没错,我们不编写微服务,因为它本质上是通过远程接口松散耦合事物的更好解决方案。实际上,整装件可能无法提供的强类型和一致性检查通常是一个主要缺点。我们之所以这样做,是因为我们必须这样做因为复杂性已经变得更好,并且正在充分利用次优的情况。


2
同意 转向微服务架构的原因主要是政治上的。分散的负载,去耦是后果,而不是原因。微服务的真正好处在于SDLC和治理。最重要的是,体系结构是对需求的逻辑响应,在大多数情况下,该需求来自公司的市场策略。上市时间比整体式架构要短,因此该公司可以采用新策略,平稳,快速地从一种策略过渡到另一种策略
Laiv

6
这就是为什么有人也不应该直接针对中小型应用程序使用微服务的原因。在那些规模上,与整体式系统相比,系统的开销和增加的复杂性最终可能会花费更多的时间,金钱和质量。
T. Sar

“之所以这样做,是因为我们必须这样做,因为复杂性已经变得更好了,并且正在充分利用次优的情况。”是的。对我来说,这很钉!
Thomas Junk

我不同意答案的最后一部分。微服务在本质上比整体服务要好,因为它们利用了多台计算机
Ewan

1
@ewan您也可以将多台计算机与整块计算机一起使用。
迪蒙

3

您基本上是正确的。如果您有快速加载的服务,则最好将它们全部安装在所有包装盒上。它不像每个服务都有一个盒子那么“好”,但是确实节省了钱。

然而。一旦出现不平衡,例如服务5占用了100%的CPU 2分钟,您就希望将该服务移到其自己的盒子上,这样它就不会在运行时阻止所有其他服务。

如果由于加载导致对服务5的调用超时,则仅应用程序的某些功能将失败,而不是全部失败。

现在,您可以使用模块化程度良好的整体执行相同的操作。安装所有服务,但仅将服务5流量路由到其中之一。虽然未将服务5流量路由到其他设备。

但是,通常情况下,巨石本身并不是一个偶然的服务集合,它们恰好安装在同一盒子上。模块之间将存在内存调用,这将导致应用程序失败。


1

微服务的重点是1)关注点分离和2)分配负载。从本质上讲,这使我们可以腾出时间来使用特定于该任务的技术来提供最好的黑盒服务。我们的服务可以是多种语言-用不同的编程语言编写在不同的堆栈上。不同的团队可以在每个服务上工作,而无需了解其他服务如何超出其API的合同范围。总体上讲,这为每个服务提供了更简单的代码库,从而更易于调试,理解和调整性能。


我部分同意。我的观点不是关于微服务的一般争论,而是关于可伸缩性。例如,在我的具体情况下,微服务全部以相同的技术编写。因此,尽管每种技术都可以使用不同的技术,但事实并非如此。我想证明我没有错过关于可伸缩性的重要观点。
迪蒙
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.