DUBBO负载均衡、集群容错、服务降级有什么区别与联系
从调用顺序角度分析,调用顺序依次是负载均衡、集群容错、服务降级。从解决问题角度分析,负载均衡解决了「选哪一个」问题,集群容错解决了「换哪一个」问题,最终服务降级解决了「全错怎么办」问题。
假设有1个服务消费者面对10个提供者,这时面临第一个问题就是「选哪一个」进行调用,所以负载均衡最先调用,假设选定了5号服务提供者进行服务调用。
假设消费者调用5号提供者发生了超时异常,这时面临第二个问题就是「换哪一个」进行调用:5号超时要不要换1号试一试,或者直接返回不进行重试,所以集群容错第二个调用。
假设已经重试了1号、3号、6号提供者全部超时,这时面临「全错怎么办」这第三个问题,这时可以直接返回一个固定值或者提示文案,所以服务降级第三个调用。
假设有1个服务消费者面对10个服务提供者,那么应该选哪一个进行调用呢?DUBBO提供以下四种负载均衡策略:
加权随机策略
加权轮询策略
最少活跃数策略,每个提供者维护并发处理的任务个数,任务个数越大活跃度越高,消费者会选择活跃度最低的提供者
一致性哈希策略,相同参数的请求会发给同一个提供者,并且一致性哈希算法较好地解决了某台提供者宕机可能引起的波动问题
假设消费者调用5号提供者发生了超时异常,那么应该换哪一个进行调用呢?DUBBO提供以下六种集群容错策略:
故障转移策略,作为默认策略,当消费发生异常时,通过负载均衡策略再选择一个提供者节点进行调用,直到达到重试次数
快速失败策略,消费者只消费一次服务,当发生异常时则直接抛出
安全失败策略,消费者只消费一次服务,如果消费失败则包装一个空结果,不抛出异常
异步重试策略,消费发生异常时返回一个空结果,失败请求将会进行异步重试。如果重试超过最大重试次数还不成功,放弃重试并不抛出异常
并行调用策略,消费者通过线程池并发调用多个提供者,只要有一个成功就算成功
广播调用策略,消费者遍历调用所有提供者节点,任何一个出现异常则抛出异常
假设已经重试1号、3号、6号提供者全部超时,这时可以直接返回固定值或者提示文案,不再进行重试,DUBBO提供以下三种服务降级策略:
配置自定义降级策略:
警惕看不见的重试机制:为什么使用RPC必须考虑幂等性
面试官问DUBBO不能降级哪类异常,我们聊了二十分钟
rpc框架有哪些
RPC框架主要用于实现不同进程间的远程过程调用,它们通过网络协议来实现服务间的通信和协调。以下是几种常见的RPC框架的解释:Dubbo框架:Dubbo是一款高性能的Java RPC框架,主要用于微服务架构中的服务间通信。它支持多种服务调用方式,包括同步、异步以及单向通信等。Dubbo提供了服务注册与发现、负载均衡、...
rpc 框架有哪些
这些RPC框架提供了服务注册与发现、负载均衡、容错处理等功能,简化了分布式系统中服务的调用和管理。上述的几种RPC框架在各自的领域都有广泛的应用,具有不同的特点和优势。例如,Dubbo在Java领域非常流行,gRPC支持多种语言和HTTP\/2协议的高性能特性,Thrift支持跨语言调用,而Restful RPC则基于HTTP协议进行...
dubbo和zookeeper
咱们来看下Spring 配置声明暴露服务,provider.xml文件 再来看服务消费者,consumer.xml文件 这就是典型的点对点的服务调用。当然我们为了高可用,可以在consumer.xml中配置多个服务提供者,并配置响应的负载均衡策略。配置多个服务调用者在comsumer.xml的dubbo:reference标签的url属性中加入多个地址,中间用分号...
Dubbo与SpringCloud的区别和优缺点
Apache Dubbo: 诞生于阿里巴巴的线上需求,主要是为了应对微服务场景下高并发的处理,所以Apache Dubbo的核心关注点就是解决微服务之间调用的性能。 并且将包括服务注册\/发现、负载均衡等微服务的核心内容进行了集成。最后在核心调用流程稳定的情况下完成了包括本地存根、Mock、版本控制等诸多特性的集成。Spr...
dubbo通俗一点的理解是干什么用的?
Dubbo是一种服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。主要的核心部件:Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能 Registry: 服务目录框架用于服务的...
Dubbo——服务调用、服务暴露、服务引用过程
9、FailoverClusterInvoker调用AbstractClusterInvoker的select方法 10、执行doSelect方法 11、调用AbstractLoadbalance的select方法 12、根据配置的负载均衡策略调用对应的(如RoundRobinLoadBalance)类的doSelect方法 13、返回invokers.get()方法 14、调用FailoverClusterInvoker的invoke方法 均继承自抽象类Abstract...
Dubbo的整体架构设计有哪些分层
第三层:proxy 层,服务代理层,透明生成客户端的 stub 和服务单的 skeleton,调用的是接 口,实现类没有,所以得生成代理,代理之间再进行网络通讯、负责均衡等;第四层:registry 层,服务注册层,负责服务的注册与发现;第五层:cluster 层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例...
什么是dubbo
Dubbo的核心部分包括:1、远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。2、集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。3、服务自动注册与发现:基于注册...
java rpc 框架 有哪些
Java RPC框架有以下多种:1. Dubbo 2. gRPC 3. Motan 4. Spring Cloud RPC Dubbo:Dubbo是一款高性能、轻量级的开源Java RPC框架。它支持多种服务调用方式,包括同步、异步、单连接等。Dubbo提供了丰富的服务治理功能,如负载均衡、服务注册与发现等。由于其易用性和稳定性,Dubbo在Java开发社区中得到...
说一下Dubbo的工作原理?注册中心挂了可以继续通信吗?
此方法根据负载均衡器去缓存中获取一个invoker,上面的 copyInvokers 就是上面我们缓存进去的 List invokers = routerChain.route(getConsumerUrl(), invocation);总结 在我们系统启动时,已经缓存了注册中心上的所有服务,后续的注册中心挂了只会影响到后续则注册,不会影响调用!Dubbo分布式的RPC,...
住茗瑞特: 支持你,水笔别说话,复制党也别说话.我是纯手打:首先你要明白,你问这个问题,证明你对dubbo和nginx就不熟悉. dubbo的负载均衡已经是服务层面的了,和nginx的负载均衡还在http请求层面完全不同.至于二者哪个优秀,当然没办法直...
松北区19414126427: dubbo有哪些负载均衡算法?怎么实现的负载均衡算法?dubbo有几层 - ?
住茗瑞特: 常见的有LVS、Nginx和HAProxy,者者介绍分别如下:LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我...
松北区19414126427: dubbo基于什么原理 - ?
住茗瑞特: Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高... 提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集
松北区19414126427: dubbo和nginx之间是什么关系?有什么相似之处? - ?
住茗瑞特: nginx 架构基于linux系统.它有以下几点钟特点:1、异步非阻塞方式处理请求、2、事件驱动、3、单线程io复用、4、一个主进程和少量工作进程、5、高度模块化.ngix七层分发基础,重点是http协议.实现负载均衡.dubbo分为10层:config:配置层 proxy:服务代理层 registry:注册中心 cluster:路由曾.封装多个提供者及负载均衡.桥接注册中心 monitor:监控层 protocol:远程调用层 exchange:信息交换层 transport:网络传输层 serialize:数据化序列曾 dubbo也实现软负载均衡.这也是他们的相似之处
松北区19414126427: 如何更好地学习阿里RPC框架dubbo的源代码 - ?
住茗瑞特: Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案主要核心部件Remoting:网络通信框架,实现了sync-over-async和request-response消息机制.RPC:一个远程过程调用的抽象,支持负载均衡、容灾和集群功能Registry:服务目录框架用于服务的注册和服务事件发布和订阅.Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载.
松北区19414126427: dubbo与nginx都可以做负载均衡,然而哪个相对来说更优秀?为什么? - ?
住茗瑞特: 支持你,水笔别说话,复制党也别说话.我是纯手打:首先你要明白,你问这个问题,证明你对dubbo和nginx就不熟悉. dubbo的负载均衡已经是服务层面的了,和nginx的负载均衡还在http请求层面完全不同.至于二者哪个优秀,当然没办法直...
松北区19414126427: zookeeper dubbo 怎么实现负载均衡 - ?
住茗瑞特: 问题的由来:大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡.(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均...
松北区19414126427: dubbo服务调用是阻塞的吗 - ?
住茗瑞特: 不是.监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示.服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销.服务消费者向注...
松北区19414126427: 有人对Dubbo有深入研究没,国外有没有类似的开源产品 - ?
住茗瑞特: 国外也有很多的, Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.它的核心功能包括: remoting: 远程通讯基础,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式. Cluster: 服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集群支持. registry: 服务注册中心,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器.
松北区19414126427: 如何从零开始实现一个soa远程调用服务基础组件 - ?
住茗瑞特: 说起soa远程调用基础组件,最著名的莫过于淘宝的dubbo了,目前很多的大型互联网公司都有一套自己的远程服务调用分布式框架,或者是使用开源的(例如dubbo),或者是自己基于某种协议(例如hessian,http等)进行开发,总体来说,使...