将单体代码库夹入微服务有哪些可扩展性优势?

What are the scalability benefits of splinting monolithic codebase into microservices?

假设 facebook 作为单个二进制文件运行。在 N 个服务器上发布此服务的 N 个副本,可以平均分配工作负载。现在,如果我将 facebook 代码库分成两半,它究竟如何更具可扩展性? (从这个 article 的 y 轴刻度来看)。

如果我为上半场分配 1 个服务器,为下半场分配 2 个服务器,它肯定会比一个单体服务器更快,因为现在我们有 3 个。这与 x-axis 缩放完全一样。只是现在你的负载平衡不均匀。

但考虑到服务器是其原始大小的 25%。从启动开始,这些服务器的已用 RAM 百分比就很高。之所以如此,是因为将代码分成两半并不意味着将 RAM 占用空间减半。每个服务器将在重复的库代码等上浪费更多的 RAM。

我想知道从 performance/computing 资源的角度来看使用微服务是否有任何好处。

Micros服务架构允许开发人员通过从小型服务的组合构建应用程序来创建应用程序的独立组件...

现在...如果我们有一个整体式应用程序,并确定一个特定功能比其他功能接收更多 trafic/request 那么我们需要扩展所有应用程序,包括流量较低或为零的应用程序部分,如果这部分应用程序崩溃,那么所有应用程序都会崩溃!在 microservices 架构中,每个小功能都可以部署为一个小 microservices,在这个场景os 中,我们只能扩展我们需要的系统部分,即使这服务崩溃,系统的所有其他部分仍然存在......这个场景向我们展示了两个好处:隔离和可伸缩性。

当你考虑 RAM 消耗时,你需要考虑上面的场景,因为我们可以只在需要的时候产生一个服务,如果我们不需要,我们可以减少到更少的实例数量,这里我们可以获得 performance/computing 效率资源方面的收益......从存储的角度来看,仍然在占用空间方面,单体应用程序 mybe 使用一些库到特定的功能组,而另一组功能可能使用其他功能库...这里问题仍然存在!是的,我们在一个单体应用程序中调用了很多 os 正在扩展的库和资源,而我们不需要扩展。

如果我们认为在应用程序的生命周期中,开发新功能可以通过开发或更新小服务来实现,那么与 micros 服务架构相关的功能与整个服务架构相比是很容易理解的单体应用micros服务方法允许开发人员选择ose 正确的工具来完成正确的任务。他们可以使用他们需要的语言或框架构建每个服务器,而不会影响其他 micros 服务之间的通信。这个场景os 向我们展示了两个好处:生产力和灵活性。