Design patterns 如何保持单片系统正常运行&;即使其中一个组件不工作也在运行?
我目前正在开发非常大(单片)的web应用程序。当其中一个模块/库/组件遇到问题时,我们经常会遇到问题,因为一个模块可能会使整个应用程序暂停。为了解决这个问题,现在每个人都建议走微服务的道路Design patterns 如何保持单片系统正常运行&;即使其中一个组件不工作也在运行?,design-patterns,architecture,microservices,soa,production-environment,Design Patterns,Architecture,Microservices,Soa,Production Environment,我目前正在开发非常大(单片)的web应用程序。当其中一个模块/库/组件遇到问题时,我们经常会遇到问题,因为一个模块可能会使整个应用程序暂停。为了解决这个问题,现在每个人都建议走微服务的道路 但我想知道,在微服务作为一种选择出现之前,类似的问题是如何处理的?即使我们决定走微服务的道路,这将是一个漫长的旅程。在过渡期间,我们如何处理这个问题?如果整体是真正模块化的,那么一个失败的模块不应该导致整个系统崩溃。例如,这意味着每个模块都应该有自己的数据库 良好模块化的另一个要求是,一个模块不应该对另一个模
但我想知道,在微服务作为一种选择出现之前,类似的问题是如何处理的?即使我们决定走微服务的道路,这将是一个漫长的旅程。在过渡期间,我们如何处理这个问题?如果整体是真正模块化的,那么一个失败的模块不应该导致整个系统崩溃。例如,这意味着每个模块都应该有自己的数据库 良好模块化的另一个要求是,一个模块不应该对另一个模块进行同步调用。如果一个模块需要来自其他模块的数据,他们应该在后台完成,而不是在用户请求的范围内 多模块请求的聚合和编排应在应用程序层完成。例如,如果一个查询需要来自模块a和B的数据,应用程序将向a发送一个子查询,然后向B发送一个子查询,然后将结果和返回的响应组合到客户端。在此请求期间,A可能不会询问B,反之亦然。在部分失败的情况下,应用程序可能返回部分响应或错误 此外,每个模块都应该有一个监控解决方案。这是必需的,尤其是因为模块具有可能失败的后台任务,并且您需要知道它们何时以及如何失败 关于这件事,我推荐这本书 顺便说一句,你不需要仅仅为了这个而使用微服务,一个设计好的整体更好 当其中一个模块/库/组件 遇到一些问题,因为一个模块可能会使整个系统暂停 应用程序 这是因为运行时所有这些模块都在同一进程下运行并共享资源。它们在运行时并不是孤立的,它们可以通过设计(如monolith)相互影响
您可以通过控制跨模块的资源使用来最小化跨模块的影响,例如,确保一个模块不会创建多个占用资源的线程。监视跨模块的线程池和连接池。错误处理,使影响不跨模块。您可以尝试使用nodemon,并在服务器上设置一些git版本控制。然后,当您推修复程序时,服务器将重新启动。如何,您最终建议demon、git、修复程序、服务器重新启动等