首页 > 解决方案 > 即使其中一个组件不工作,如何保持单体系统正常运行?

问题描述

我目前正在开发非常大的(单体)Web 应用程序。当模块/库/组件之一遇到问题时,我们经常会遇到问题,因为一个模块可能会停止整个应用程序。为了解决这个问题,现在每个人都建议采用微服务方式。

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

标签: design-patternsarchitecturemicroservicessoaproduction-environment

解决方案


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

良好模块化的另一个要求是模块不应该对另一个模块进行同步调用。如果一个模块需要来自其他模块的数据,它们应该在后台执行此操作,无需用户请求。

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

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

我推荐这本书发布它

PS你不需要仅仅为了这个而去微服务,一个好的设计的单体更好。


推荐阅读