Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何保持单片系统正常运行&;即使其中一个组件不工作也在运行?_Design Patterns_Architecture_Microservices_Soa_Production Environment - Fatal编程技术网

Design patterns 如何保持单片系统正常运行&;即使其中一个组件不工作也在运行?

Design patterns 如何保持单片系统正常运行&;即使其中一个组件不工作也在运行?,design-patterns,architecture,microservices,soa,production-environment,Design Patterns,Architecture,Microservices,Soa,Production Environment,我目前正在开发非常大(单片)的web应用程序。当其中一个模块/库/组件遇到问题时,我们经常会遇到问题,因为一个模块可能会使整个应用程序暂停。为了解决这个问题,现在每个人都建议走微服务的道路 但我想知道,在微服务作为一种选择出现之前,类似的问题是如何处理的?即使我们决定走微服务的道路,这将是一个漫长的旅程。在过渡期间,我们如何处理这个问题?如果整体是真正模块化的,那么一个失败的模块不应该导致整个系统崩溃。例如,这意味着每个模块都应该有自己的数据库 良好模块化的另一个要求是,一个模块不应该对另一个模

我目前正在开发非常大(单片)的web应用程序。当其中一个模块/库/组件遇到问题时,我们经常会遇到问题,因为一个模块可能会使整个应用程序暂停。为了解决这个问题,现在每个人都建议走微服务的道路


但我想知道,在微服务作为一种选择出现之前,类似的问题是如何处理的?即使我们决定走微服务的道路,这将是一个漫长的旅程。在过渡期间,我们如何处理这个问题?

如果整体是真正模块化的,那么一个失败的模块不应该导致整个系统崩溃。例如,这意味着每个模块都应该有自己的数据库

良好模块化的另一个要求是,一个模块不应该对另一个模块进行同步调用。如果一个模块需要来自其他模块的数据,他们应该在后台完成,而不是在用户请求的范围内

多模块请求的聚合和编排应在应用程序层完成。例如,如果一个查询需要来自模块a和B的数据,应用程序将向a发送一个子查询,然后向B发送一个子查询,然后将结果和返回的响应组合到客户端。在此请求期间,A可能不会询问B,反之亦然。在部分失败的情况下,应用程序可能返回部分响应或错误

此外,每个模块都应该有一个监控解决方案。这是必需的,尤其是因为模块具有可能失败的后台任务,并且您需要知道它们何时以及如何失败

关于这件事,我推荐这本书

顺便说一句,你不需要仅仅为了这个而使用微服务,一个设计好的整体更好

当其中一个模块/库/组件 遇到一些问题,因为一个模块可能会使整个系统暂停 应用程序

这是因为运行时所有这些模块都在同一进程下运行并共享资源。它们在运行时并不是孤立的,它们可以通过设计(如monolith)相互影响


您可以通过控制跨模块的资源使用来最小化跨模块的影响,例如,确保一个模块不会创建多个占用资源的线程。监视跨模块的线程池和连接池。错误处理,使影响不跨模块。

您可以尝试使用nodemon,并在服务器上设置一些git版本控制。然后,当您推修复程序时,服务器将重新启动。如何,您最终建议demon、git、修复程序、服务器重新启动等