dubbo服务降级实现dubbo-plus/circuitbreaker at master · dubboclub/dubbo-plus · GitHub

标签: | 发表时间:2017-12-11 10:33 | 作者:
出处:https://github.com

向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成)

RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory. class ).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf( "zookeeper://10.20.153.10:2181" ));
registry.register(URL.valueOf( "override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null" ));

其中:

mock=force: return + null
  • 表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。
  • 屏蔽不重要服务不可用时对调用方的影响。

还可以改为:

mock=fail: return + null
  • 表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。
  • 容忍不重要服务不稳定时对调用方的影响。


服务降级方案实现

当前情况

Dubbo支持服务降级,并且支持当服务出现异常的时候进行服务降级处理,但是存在一下几个缺陷

  1. 当调用远程服务出真的宕机的时候,Dubbo依然会重试调用一次远程服务,再尝试进行服务降级,这样就浪费了一次没必要的远程请求
  2. Dubbo支持强制性的服务降级,就是不进行远程调用就进行服务降级处理,但是每次降级处理的上线和下线都需要人为的去干涉

针对上面两个问题,我们需要达到的目的是:当远程服务真的出现宕机的时候,消费端不要再进行远程调用,而是直接降级处理,并且消费端能够定时的检查服务是否恢复,从而自动下线降级服务,恢复调用远程服务。

具体实现

通过Dubbo的Filter对Dubbo进行扩展,从而使得每次服务发起调用都可以得到监控,从而可以监控每次服务的调用。

对自动判断服务提供端是否宕机:通过一个记录器对每个方法出现RPC异常进行记录,并且可以配置在某个时间段内连续出现都少个异常可判定为服务提供端出现了宕机,从而进行服务降级。

自动恢复远程服务调用:通过配置检查服务的频率来达到定时检查远程服务是否可用,从而去除服务降级。

降级相关配置

降级配置分配为应用级别,接口级别,方法级别

一、动态配置

    可以通过dubbo-admin(官方的基本不可用)动态对某个接口或者方法配置如下参数以达到动态对接口后者方法配置
circuit.break:支持接口和方法级别
retry.frequency: 同时
break.limit: 同上

二、应用级别

    <!--lang:java-->
dubbo.reference.default.break.limit:该参数是配置一个方法在指定时间内出现多少个异常则判断为服务提供方宕机
dubbo.reference.default.retry.frequency:该参数配置重试频率,比如配置100,则表示没出现一百次异常则尝试一下远程服务是否可用
dubbo.reference.circuit.break:服务降级功能开关,默认是false,表示关闭状态,可以配置为true

三、接口级别

    <!--lang:java-->
dubbo.reference.${fullinterfacename}.break.limit:同上面dubbo.reference.default-break-limit,指定某个接口
dubbo.reference.${fullinterfacename}.retry.frequency:同上面
dubbo.reference.${fullinterfacename}.circuit.break:服务降级功能开关,默认是false,表示关闭状态,可以配置为true

四、方法级别

    <!--lang:java-->
dubbo.reference.${fullinterfacename}.${methodName}.break.limit:同上面dubbo.reference.default-break-limit,指定某个接口的某个方法
dubbo.reference.${fullinterfacename}.${methodName}.retry.frequency:同上面dubbo.reference.default-retry-frequency,指定某个接口的某个方法
dubbo.reference.${fullinterfacename}.${methodName}.circuit.break:服务降级功能开关,默认是false,表示关闭状态,可以配置为true

上面这些参数均是配置在dubbo.properties中

dubbo.properties具体在哪里,默认是在classpath根目录,也可以通过-Ddubbo.properties.file来指定该文件路径。

降级服务实现

默认情况的服务降级是直接返回一个异常(CircuitBreakerException),也可以在消费端对某个远程接口提供一个默认实现,作为降级方案。

具体规则如下:

例如当前远程提供一个接口com.foo.FooService的实现,如何在消费端提供一个降级实现,作为降级方案呢?只需要在消费端创建一个类com.foo.FooServiceCircuitBreak并且该类实现com.foo.FooService接口,那么当调用远程com.foo.FooService接口实现某个方法出现异常并且满足了该方法降级规则(通过上面配置的参数进行判断)那么就会调用com.foo.FooServiceCircuitBreak类进行服务降级处理,而不是返回一个异常。

相关日志名

CIRCUITBREAKER CIRCUITBREAKER-STATISTICS

相关 [dubbo 服务 dubbo] 推荐:

dubbo服务降级实现dubbo-plus/circuitbreaker at master · dubboclub/dubbo-plus · GitHub

- -
向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成). 表示消费方对该服务的方法调用都直接返回null值,不发起远程调用. 屏蔽不重要服务不可用时对调用方的影响. 表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常. 容忍不重要服务不稳定时对调用方的影响. Dubbo支持服务降级,并且支持当服务出现异常的时候进行服务降级处理,但是存在一下几个缺陷.

谈Dubbo服务框架

- - 人月神话的BLOG
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合). 从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.

dubbo服务化实施整理

- - 企业架构 - ITeye博客
随着快的业务的快速发展,我们逐步按照业务垂直划分,抽象出基础服务层. 基础业务的服务为上游业务的灵活发展提供支持. 服务应用本身无状态化,可以随着系统的负荷灵活伸缩来提供服务能. 服务的稳定性,可用性达到99%. dubbo来作为服务化中间件,dubbo作为一个RPC框架,大致的原理如下图. Registry: 注册中心;和服务的消费者,和服务提供者都建立长连接.

dubbo服务telnet命令 - 秦鹏飞

- - 博客园_首页
dubbo服务发布之后,我们可以利用telnet命令进行调试、管理. Dubbo2.0.5以上版本服务提供端口支持telnet命令,下面我以 Windows为例抛砖引玉一下:.     测试对应IP和端口下的dubbo服务是否连通,cmd命令如下.     正常情况下,进入telnet窗口,键入回车进入dubbo命令模式.

dubbo服务治理(一)降级

- - 企业架构 - ITeye博客
在线网站一般都会有服务器压力剧增的时候,比如说网上商城的促销,这个时候常用的手段就是服务降级,根据当前业务情况及流量对一些服务和页面有策略的降级,以此缓解了服务器资源压力,以保证核心任务的正常运行,同时也保证了部分甚至大部分客户得到正确响应. 页面拒绝服务:页面提示由于服务繁忙此服务暂停. 跳转到varnish或nginx的一个静态页面.

[原]Dubbo实例

- -
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. Remoting: 网络通信框架,实现了sync-over-async 和 request-response 消息机制. RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能. Registry: 服务目录框架用于服务的注册和服务事件发布和订阅.

DUBBO用户指南

- - 开源软件 - ITeye博客
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键. 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率.

dubbo 问题整理

- - 行业应用 - ITeye博客
1 面试题:Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么. 可以的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地. 每次调用时,按照本地存储的地址进行调用. 注册中心对等集群,任意一台宕掉后,会自动切换到另一台 . 注册中心全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯 .

阿里巴巴Dubbo分布式服务框架已开源

- tangfl - ITeye论坛最新精华讨论帖
Serving services with invocations everyday, Dubbo becomes the key part of Alibaba's SOA solution and has been deployed to the whole alibaba.com family:.

Dubbo:来自于阿里巴巴的分布式服务框架

- - 标点符
Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式.