总结

在本章中,我们学习了如何设计可扩展容量和复杂性的 Node.js 架构。 我们看到,扩展应用程序不仅是为了处理更多流量或减少响应时间,而且还是一种在我们想要更好的可用性和故障容忍度时应用的实践。 我们看到这些属性通常处于同一波长,并且我们知道尽早扩展并不是一个坏习惯,尤其是在 Node.js 中,这使我们能够轻松地做到这一点并且只需要很少的资源。

缩放立方体告诉我们应用程序可以在三个维度上缩放。 在本章中,我们重点关注了两个最重要的维度,即 X 轴和 Y 轴,这使我们能够发现两种基本的架构模式,即负载均衡和微服务。 您现在应该知道如何启动同一 Node.js 应用程序的多个实例,如何在它们之间分配流量,以及如何利用此设置用于其他目的,例如容错和零停机重启。 我们还分析了如何处理动态和自动缩放的基础设施问题。 由此,我们看到服务注册表对于这些情况确实有用。 我们学习了如何使用普通 Node.js、Nginx 等外部负载均衡器以及 Consul 等服务发现系统来实现这些目标。 我们还学习了 Kubernetes 的基础知识。

在这一点上,我们应该掌握一些非常实用的方法,以便能够比以前更加无所畏惧地面对可扩展性。

然而,克隆和负载均衡仅涵盖规模立方体的一个维度,因此我们将分析转移到另一个维度,更详细地研究通过构建微服务架构按其组成服务拆分应用程序意味着什么。 我们看到了微服务如何实现项目开发和管理方式的彻底革命,提供一种自然的方式来分配应用程序的负载并分解其复杂性。 然而,我们了解到,这也意味着将复杂性从如何构建大型整体应用程序转移到如何集成一组服务。 最后一个方面是我们分析的最后一部分的重点,展示了一些集成一组独立服务的架构解决方案。

在本书的下一章和最后一章中,除了在实现复杂的分布式架构时有用的更高级的集成技术之外,我们将有机会通过分析本章中讨论的消息传递模式来完成我们的 Node.js 设计模式之旅 。