节点熔断

Dubbo 分类

Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。

Apache Dubbo 接入

支持版本

当前只支持dubbo 2.x版本的接入,dubbo 3.x暂未支持。

引入依赖

北极星的节点级熔断,是基于RPC调用的回包统计指标(连续错误数、失败率等)来对故障节点进行剔除。这个过程涉及回包统计的拦截插件以及剔除熔断实例的路由插件,需要将2个插件引入POM中,插件版本建议使用最新版本。

  • org.apache.dubbo.extensions:dubbo-registry-polaris:北极星接入插件

  • org.apache.dubbo.extensions:dubbo-filter-polaris-circuitbreaker-dubbo2:北极星熔断插件,负责剔除熔断的实例

  1. <dependency>
  2. <groupId>org.apache.dubbo.extensions</groupId>
  3. <artifactId>dubbo-registry-polaris</artifactId>
  4. <version>1.0.0<version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.dubbo.extension</groupId>
  8. <artifactId>dubbo-filter-polaris-circuitbreaker-dubbo2</artifactId>
  9. <version>1.0.0<version>
  10. </dependency>

配置北极星注册中心地址

接下来,需要添加北极星registry的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:

配置文件方式添加:

  1. <dubbo:registry address="polaris://127.0.0.1:8091"/>

使用节点熔断能力

*** 说明 ***

节点熔断可以根据RPC调用的连续错误数、失败率等统计指标,对异常节点进行剔除,保障请求只会路由到健康的节点上去。

*** 配置节点熔断规则 ***

当前支持针对RPC调用的服务名和接口进行设置熔断规则。

节点熔断 - 图1

规则中,设置针对该服务下节点的调用,出现连续5次的失败, 则熔断该节点。

为了测试熔断效果,服务调用的时候,可以针对服务进行多次调用。

  1. ReferenceConfig<DemoService> reference = new ReferenceConfig<>();
  2. reference.setRegistry(new RegistryConfig(ExampleConsts.POLARIS_ADDRESS));
  3. reference.setInterface(CircuitbreakDemoService.class);
  4. reference.setVersion(CommonConstants.ANY_VALUE);
  5. reference.setRetries(0);
  6. DubboBootstrap bootstrap = DubboBootstrap.getInstance().application(new ApplicationConfig("dubbo-circuitbreak-consumer-service")).registry(new RegistryConfig(ExampleConsts.POLARIS_ADDRESS));
  7. bootstrap.reference(reference).start();
  8. DemoService service = ReferenceConfigCache.getCache().get(reference);
  9. for (int i = 0; i < 50; i++) {
  10. sayHello(service);
  11. }

样例

节点熔断样例包括2个工程,代表的是2个服务之间调用,调用链路为:consumer->provider(ok/nok)。

provider通过环境变量来控制是否返回回包失败,启动的时候设置环境变量EXCEPTION=true,则该provider进程固定会返回回包异常。

可以启动2个provider进程,一个进程启动的时候,不设置EXCEPTION变量,代表正常进程;另外一个进程设置EXCEPTION变量,代表不正常,用于测试熔断。