design-patterns - 即使其中一个组件不工作,如何保持单体系统正常运行?
问题描述
我目前正在开发非常大的(单体)Web 应用程序。当模块/库/组件之一遇到问题时,我们经常会遇到问题,因为一个模块可能会停止整个应用程序。为了解决这个问题,现在每个人都建议采用微服务方式。
但是我想知道在微服务作为一种选择出现之前,类似的问题是如何处理的?即使我们决定采用微服务方式,那也将是一段漫长的旅程。在过渡期间我们如何处理这个问题?
解决方案
如果单体真的是模块化的,那么一个失败的模块不应该让整个系统崩溃。例如,这意味着每个模块都应该有自己的数据库。
良好模块化的另一个要求是模块不应该对另一个模块进行同步调用。如果一个模块需要来自其他模块的数据,它们应该在后台执行此操作,无需用户请求。
多模块请求的聚合和编排应该在应用层完成。例如,如果查询需要来自模块 A 和 B 的数据,则应用程序向 A 发送子查询,然后向 B 发送子查询,然后将结果组合并返回响应给客户端。在此请求期间,A 可能不会查询 B,反之亦然。在部分失败的情况下,应用程序可能会返回部分响应或错误。
此外,您应该为每个模块提供一个监控解决方案。这是必需的,尤其是因为模块具有可能失败的后台任务,您需要知道它们何时以及如何失败。
我推荐这本书发布它。
PS你不需要仅仅为了这个而去微服务,一个好的设计的单体更好。
推荐阅读
- marklogic - 光学 API 与 CTS 查询性能
- spring-webflux - 如何将单声道放入反应器中的当前上下文
- javascript - 如何在组合组件中用 useselector 替换 maptostateprops
- google-classroom - GoogleJsonResponseException:对教室.courses.courseWork.create 的 API 调用失败并出现错误:遇到内部错误
- c# - 来自 IEnumerable 的 AutoMapper 错误映射
其中 T 是一个接口 - macos - Influx 2.0 CLI 客户端未连接
- reactjs - GraphQL - 语法错误:预期“:”,找到“)”
- ios - 用常量变量替换常量文字值时,表达式类型不明确,没有更多上下文
- amazon-web-services - AWS 数据使用计费是否也考虑 IP 和以太网标头字节
- math - 计算瀑布图组件