在微服务架构中,当服务提供者的应用实例出现异常,而服务消费者无法感知的时候,会影响服务的正常调用,并影响消费者的服务性能甚至可用性。离群实例摘除功能会检测应用实例的可用性并进行动态调整,以保证服务成功调用,从而提升业务的稳定性和服务质量。

背景信息

在下图的示例场景中,某个系统包含 4 个应用,A、B、C 和 D,其中应用 A 会分别调用应用 B、C、D。当应用 B、C 或 D 的某些实例异常时,如果应用 A 无法感知,会导致部分调用失败;如果 B、C、D 的异常实例较多,有可能影响应用 A 的性能甚至服务可用性。

为了保护应用 A 的服务性能和可用性,可以为应用 A 配置离群实例摘除。配置后,即可监控 B、C、D 应用的实例状态,并进行动态调整,已保证服务成功调用。具体流程如下:

  1. 当应用 B、C、或 D 的某个实例异常时,EDAS 能够检测到,并根据摘除实例比例上限判断是否将对应的实例从应用中移除。
  2. 摘除实例后,A 的调用请求不再分发到 B、C、D 的异常实例上。
  3. EDAS 按配置的恢复检测单位时间开始检测异常实例是否恢复,检测间隔随检测次数线性增加。
  4. 检测间隔随检测次数按恢复检测单位时间(1 分钟)线性增加,当达到设置的未恢复累计次数上限后,会按最长时间间隔持续检测异常实例是否恢复。
  5. 当检测到实例恢复后,将实例重新添加到应用的实例列表中,处理调用请求。同时,重置检测间隔为恢复检测单位时间
说明
  • 当提供者的异常应用实例的数量过多(超过设置的比例)时,仅按照设置的比例摘除。
  • 当提供者应用中仅剩最后一个可用实例,且错误率超过配置的阈值时,不会移除该实例。
离群实例摘除示意

创建离群实例摘除策略

  1. 登录 EDAS 控制台
  2. 在左侧导航栏选择微服务管理 > 离群实例摘除
  3. 离群实例摘除页面单击创建离群实例摘除策略
  4. 创建离群实例摘除策略基本信息页面设置参数,然后单击下一步
    离群实例摘除-基本信息
    • 命名空间:在右侧列表中选择地域命名空间
    • 离群实例摘除策略名称:策略名称,最长 64 个字符。
    • 被调用服务所用框架:根据实际情况选择DubboSpring Cloud
  5. 创建离群实例摘除策略选择生效应用页面选择生效应用,单击>,然后单击下一步
    离群实例摘除-选择生效应用

    页面右侧会展示离群实例摘除策略示意图。选择生效应用后,该应用调用的所有应用中的异常应用实例会被摘除。摘除期间,生效应用的调用请求将不再被分发到异常实例进行处理。

  6. 创建离群实例摘除策略配置策略页面设置参数,然后单击下一步
    离群实例摘除-配置策略
    • 异常类型:包含网络异常网络异常 + 业务异常(Dubbo Exception),根据实际业务需求选择。
    • QPS下限:QPS 按照统计窗口进行计算,达到该下限后开始进行错误率统计分析。Dubbo 2.7 版本的应用的统计窗口为 15 秒,其它 Dubbo 版本和 Spring Cloud 应用的统计窗口为 10 秒。
    • 错误率下限:当被调用的应用中某个应用实例的错误率高于设置的下限后,将摘除该实例。默认值为 50%。例如该实例在统计窗口内被调用 10 次,有 6 次调用失败,错误率为 60 %,则从应用中移除该实例。
    • 摘除实例比例上限:摘除的异常实例比例上限,即达到阈值后,不再摘除异常实例。摘除异常实例数向下取整,例如应用实例总数为 6,摘除实例比例设置为 60 %,摘除实例比例数为 6 * 60% = 3.6,则按策略最多摘除的实例数为 3。若计算结果小于 1,则不会摘除实例。
    • 恢复检测单位时间:在异常实例被摘除后,EDAS 会不断按单位时间累加检测异常实例是否恢复正常,单位为 ms。默认为 30000 ms,即 0.5 分钟。
    • 未恢复累计次数上限:EDAS 会持续对异常实例进行检测,检测间隔随检测次数按恢复检测单位时间线性增加,当达到设置的检测次数上限后,会按最长时间间隔持续检测异常实例是否恢复。例如恢复检测单位时间设置 60000 ms,未恢复累计次数上限设置为 20,在第 20 次检测异常实例仍未恢复后,则会按 10 分钟(20 x 30000 ms)为间隔执行后续的检测。如果检测到实例已经恢复,则会将检测间隔重置为初始的时间间隔,即一次恢复检测单位时间
      说明 未恢复累计次数上限不建议配置太大。配置太大会导致最长检测间隔时间较长,如果实例在检测间隔早期恢复,仍需等到检测间隔到时再进行检测,导致期间实例资源被浪费,未能及时处理业务调用请求。
  7. 创建离群实例摘除策略创建完成页面确认策略配置,无误后,单击提交
    离群实例摘除-创建完成

结果验证

离群实例摘除策略配置并提交后,即开启了离群实例摘除。您可以进入配置了离群实例摘除的应用详情页面,查看该应用的监控信息,如拓扑图错误率 / 每分钟等。