Dubbo

1.什么是Dubbo

Dubbo阿里巴巴公司开源的一个高性能RPC分布式服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成,现已成为Apache基金会孵化项目

2.为什么要用Dubbo

随着服务化的进一步发展,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的框架体系(SOA),也因此衍生了一系列相应的技术,如对服务提供、服务调用、连接处理、通性协议、序列号方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样分布式系统的服务治理的框架就出现了,Dubbo就这样产生了,它实现了面向接口代理的RPC调用,服务注册和发现,负载均衡,容错,扩展性等等功能。

3.Dubbo的整体架构设计有哪些分层

大致分为三层:业务层、RPC层、Remoting

  • 接口服务层(Service):与业务逻辑相关,根据providerconsumer的业务设计对应的接口和实现
  • 配置层(config):用来初始化配置信息,用来管理Dubbo的配置
  • 服务代理层(Proxy):服务接口透明代理,providerconsumer都会生成Proxy,它用来调用远程接口。生成服务的客户端Stub和服务端的Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory
  • 服务注册层(Registry):封装服务地址的注册和发现,以URL为中心,扩展接口为RegistryFactory、Resitry、ResitryService
  • 路由层(Cluster):封装多个提供者的路由和负载均衡吗,并桥接注册中心,扩展接口为Cluster、Directory、Router和LoadBlancce
  • 监控层(Monitor):PRC调用次数和调用时间监控,以Statistics为中心,扩展接口为 MonitorFactory、Monitor 和 MonitorService
  • 远程调用层(Protocol):封装RPC调用的具体过程,以 Invocation Result为中心,扩展接口为 Protocal、Invoker 和 Exporter
  • 信息交换层(Exchange):封装请求响应模式,同步转异步,以 RequestResponse 为中心,扩展接口为 Exchanger、ExchangeChannel、ExchangeClient 和 ExchangeServer
  • 网络传输层(Transport):将网络传输封装成统一接口,可以在这之上扩展更多的网络传输方式,扩展接口为 Channel、Transporter、Client、Server 和 Codec
  • 数据序列层(Serialize): 负责网络传输的序列化和反序列化,扩展接口为 Serialization、ObjectInput、ObjectOutput 和 ThreadPool

在这里插入图片描述import java.util.ArrayList;

4.Dubbo里面有哪几种节点角色

节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器

5.注册与发现的流程图

在这里插入图片描述

6.Dubbo核心的配置有哪些

配置配置说明
dubbo:service服务配置
dubbo:reference引用配置
dubbo:protocol协议配置
dubbo:application应用配置
dubbo:module模块配置
dubbo:registry注册中心配置
dubbo:monitor监控中心配置
dubbo:provider提供方配置
dubbo:consumer消费方配置
dubbo:method方法配置
dubbo:argument参数配置

7.在Provider上可以配置的Consumer端的属性有哪些

  1. timeout:方法调用超时
  2. retries:失败重试次数,默认重试2次
  3. loadbalance:负载均衡算法,默认随机
  4. actives:消费者端,最大并发调用限制

8.Dubbo有哪几种集群容错方案,默认是哪种

集群容错方案说明
Failover Cluster失败自动切换,自动重试其他服务器(默认)
Failfast Cluster快速失败,立即报错,只发起一次调用
Failsafe Cluster失败安全,出现异常时,直接忽略
Failback Cluster失败自动恢复,记录失败请求,定时重发
Forking Cluster并行调用多个服务器,只要一个成功即返回
Broadcast Cluster广播逐个调用所有提供者,任意一个报错则报错

9.Dubbo有哪几种负载均衡策略,默认是哪种

负载均衡策略说明
Random LoadBalance随机,按权重设置随机概率(默认)
RoundRobin LoadBalance轮询,按公约后的权重设置轮询比率
LeastActive LoadBalance最少活跃调用数,相同活跃数的随机
ConsistentHash LoadBalaclava一致性Hash,相同参数的请求总是发到同一提供者

10.Dubbo服务调用流程

在这里插入图片描述

工作流涉及到服务提供者,注册中心,网络和服务消费者

  • 服务提供者在启动的时候,会通过读取一些配置将服务实例化。
  • Proxy封装服务调用接口,方便调用者调用。客户端获取Proxy时,可以像调用本地服务一样,调用远程服务。
  • Proxy在封装时,需要调用Protocol定义协议格式,例如:Dubbo Protocol。
  • 将Proxy封装成Invoker,它是真实服务调用的实例。
  • 将Invoker转化成Exporter,Exporter只是把Invoker包装了一层,是为了在注册中心中暴露自己,方便消费者使用。
  • 将包装好的Exporter注册到注册中心。
  • 服务消费者建立好实例,会到服务注册中心订阅服务提供者的元数据。元数据包括服务IP和端口以及调用方式(Proxy)。
  • 消费者会通过获取的Proxy进行调用。通过服务提供方包装过程可以知道,Proxy实际包装了Invoker实体,因此需要使用Invoker进行调用。
  • 在Invoker调用之前,通过Directory获取服务提供者的Invoker列表。在分布式的服务中有可能出现同一个服务,分布在不同的节点上。
  • 通过路由规则了解,服务需要从哪些节点获取。
  • Invoker调用过程中,通过Cluster进行容错,如果遇到失败策略进行重试。
  • 调用中,由于多个服务可能会分布在不同的节点,就要通过LoadBalance来实现负载均衡。
  • Invoker调用之前还需要经过Filter,它是以恶搞过滤链,用来处理上下文,限流何计数的工作。
  • 生成过滤以后的Invoker。
  • 用Clinet进行数据传输。
  • Codec会根据Protocol定义的协议,进行协议的构造。
  • 构造完成的数据,通过序列化Serialization传输给服务提供者。
  • Request已经到达了服务提供者,它会被分配到线程池(ThreadPool)中进行处理。
  • Server拿到请求以后查找对应的Exporter(包含有Invoker)。
  • 由于Export也会被Filter层层包裹,通过Filter后获得Invoker最后,对服务提供者实体进行调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值