我目前正在开发非常大的(整体式) web应用程序。当一个模块/库/组件遇到一些问题时,我们经常会遇到问题,因为一个模块可能会导致整个应用程序停滞。为了解决这个问题,现在每个人都建议走微服务的道路。
但是我想知道在微服务出现之前,类似的问题是如何处理的?即使我们决定走微服务之路,那也是一段漫长的旅程。在过渡期间,我们如何处理这个问题?
发布于 2018-10-17 16:25:33
如果整体是真正模块化的,那么出现故障的模块不应该导致整个系统停机。例如,这意味着每个模块都应该有自己的数据库。
好的模块化的另一个要求是一个模块不应该对另一个模块进行同步调用。如果一个模块需要来自其他模块的数据,它们应该在后台执行此操作,而不是用户请求。
多模块请求的聚合和编排应该在应用层完成。例如,如果查询需要来自模块A和模块B的数据,则应用程序向A发送子查询,然后向B发送子查询,然后将结果和返回响应组合到客户端。在此请求期间,A不能查询B,反之亦然。如果出现部分故障,应用程序可能会返回部分响应或错误。
此外,您还应该为每个模块提供一个监控解决方案。这是必需的,特别是因为模块有可能失败的后台任务,并且您需要知道它们失败的时间和方式。
关于这个问题,我推荐Release it这本书。
附注:你不需要仅仅为了这个去微服务,一个设计良好的整体更好。
发布于 2018-10-18 15:30:41
当一个模块/库/组件遇到一些问题时,我们经常会遇到问题,因为一个模块可能会导致整个应用程序停滞。
这是因为所有这些模块在运行时都在同一进程下运行并共享资源。它们在运行时并不是孤立的,它们肯定会通过设计相互影响。
您可以通过控制跨模块的资源使用来最小化跨模块的影响,例如,确保一个模块不会最终创建许多消耗资源的线程。密切关注跨模块的线程池和连接池。错误处理,使得影响不会跨模块。
https://stackoverflow.com/questions/52847185
复制相似问题