随着分布式微服务的发展,系统正在变得越来越复杂,一个普通的应用也可能依赖了很多其他的服务。在没有明确强弱依赖关系的前提下,系统很难进行限流降级、优化改造等操作。强弱依赖治理就是通过科学的手段持续稳定地得到应用间依赖关系、流量、强弱等数据,提前发现因为依赖问题可能导致的故障,避免依赖故障影响用户体验,积累数据持续推进系统稳定性提升。

什么是强弱依赖?

异常发生时,不影响核心业务流程,不影响系统可用性的依赖称作弱依赖,反之为强依赖。

以商品详情页为例。

商品详情页

商品详情页后台系统架构如下。

后台系统架构
  • 如果商品详情页对下游依赖是强依赖,例如当下游依赖库存优惠物流出现故障的时候,将导致业务流程无法推进,会出现类似如下的说明,严重影响用户体验。强依赖
  • 如果商品详情页对下游依赖是弱依赖,例如当下游依赖库存优惠物流出现故障的时候,将导致商品详情页部分内容加载不全,出现如下图的情况,但核心业务流程仍可继续推进,用户体验并未受到太多影响。商品详情页2

通过以上对比可以看出,当下游依赖出现问题时,当前系统会受到一些影响,严重影响用户体验的是强依赖,影响较小的则是弱依赖。

强弱依赖治理

强弱依赖治理就是提前发现因为依赖问题可能导致的故障,避免依赖故障影响用户体验,积累数据持续推进系统稳定性提升。

强弱依赖模型,包含依赖关系、流量、强弱。依赖治理就是通过科学的手段持续稳定地拿到应用间依赖关系、流量、强弱等数据,将此数据用于系统改造、故障决策等场景。

强弱依赖治理方案

强弱依赖治理每次选中1个应用进行治理,以30天为治理周期。

强弱依赖治理流程图2.png

强弱依赖治理主要包含以下步骤:

  1. 应用接入(需要安装探针)。
  2. 依赖分析。
  3. 依赖预判。
  4. 依赖验证(通过演练进行验证)。
  5. 方案归档。

强弱依赖治理的应用

强弱依赖治理主要可以被应用到以下场景:

  • 系统改造验收:对于分布式系统,至少在运行态中,不会因为依赖的系统后台出现故障,引起当前应用出现系统级可用性的故障,例如进程挂掉、频繁FullGC、负载飙高等,何时何地都应具备快速止血的能力。
  • 限流降级参考:对于弱依赖,一般都要配置限流或是自动降级策略。比起通过经验值来设定限流值,还是通过实际的依赖验证来进行微调更为可靠。例如对于下游出现的超时情况,就可以通过实验得出基于线程池限流的数据。
  • 应用启动顺序:理想情况下,应用启动更应该做到零强依赖启动,但实际情况是无法做到零强依赖。因此应用启动的依赖顺序也需要实时关注,特别是新IDC、机房建站时,会有着蜘蛛网一样的依赖关系,此时最好是通过系统方式获得依赖顺序。
  • 故障根源定位:后台系统的故障,往往通过上一级的业务故障表现出来。故障处理讲究的是争分夺秒,良好的强弱依赖,对于系统自动化诊断有非常大的助力作用。
  • 依赖容量评估:正常调用链路下的系统容量需要评估。例如当某个弱依赖挂掉时,需要注意整体的容量是否有变化。

强弱依赖治理的演进

强弱依赖治理分为三阶段:启动强弱依赖、低流量强弱依赖、高流量强弱依赖。

故障演练