简单了解Apache Dubbo

时间:2022-01-16 17:02:21

1.dubbo概述

        ①Apache Dubbo是一款高性能、轻量级的开源java Rpc分布式服务框架。

        ②核心功能:

                   ◉ 面向接口远程过程调用

                   ◉ 集群容错和负载均衡

                   ◉ 服务自动注册与发现

        ③特点:

                   ◉ 使用分层的架构模式,使得各个层次之间实现最大限度的解耦。

                   ◉ 将服务抽象为服务提供者(Provider)与服务消费者(Consumer)两个角色。

2.dubbo组件及其说明

   简单了解Apache Dubbo

    ① Provider : 暴漏服务的服务提供方

    ② Consumer : 调用远程服务的服务消方

    ③ Registry : 服务注册与发现中心

    ④ Monitor : 统计服务的调用次数与调用时间的监控中心

    ⑤ Container : 服务运行容器

3.dubbo组件调用关系

    ①Container容器负责加载,运行服务提供者。

    ②服务提供者Provider将自身服务注册到注册中心Registr。

    ③服务消费者向注册中心订阅服务,注册中心返回服务提供者的地址列表给服务消费者,如果服务提供者有变更,注册中心将基于长连接推送变更数据给服务消费者。

    ④服务消费者从返回的地址列表中,基于软负载均衡,选一台提供者进行调用,如果调用失败,在选择另一台调用。

    ⑤服务消费者和服务提供者,在内存中调用次数与调用时间,定时每分钟发送一次统计数据到监控中心。

 4.dubbo核心功能详解

     (1)dubbo是怎样实现面向接口的远程过程调用的?

               通过注册中心,dubbo将服务提供者与服务消费者联通起来,服务提供者暴漏服务,服务消费者引入提供者的依赖以及简单的配置,就可进行调用。

     (2)为什么消费者通过接口就能调用到提供者的实现类?

               提供者在向注册中西注册服务时,会通过配置的方式,将接口的实现类所的位置暴漏出来。

              xml:

<bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>

            注解:

dubbo:
  ## Base packages to scan Dubbo Component:@com.alibaba.dubbo.config.annotation.Service
  scan:
    basePackages: com.funtl.myshop.service.user.provider.api.impl

      (3) 集群容错是什么?

            ①背景

                当消费者调用某个提供者时,由于网络的原因,调用失败了,我们可以配置服务消费者的重试策略,可能第二次的调用是成功的。但是如果是因为提供者的节点发生故障,而引起的调用失败,我们就得使用集群容错模式,调用其他可用的节点,这就提高了服务的可用性。

            ②集群容错架构图

                  简单了解Apache Dubbo

            ③各节点关系

                    ◉ Invoker : 提供者的一个可调用接口的抽象,包含提供者的ip以及接口信息。

                    ◉ Directory : 包含多个Invoker,可以看作List<Invoker>,Directory的值是动态的,会随着注册中心向消费者推送的服务列表而变更。

                    ◉ Cluster : 将Directory中的多个Invoker伪装成一个Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个。

                    ◉ Router : 负责从多个Invoker中按照路由规则选出子集,比如读写分离,应用隔离等;

                    ◉ LoadBalance : 从多个Invoker中选出一个用于本次调用,选的过程,包含负载均衡算法,调用失败后,重新选择。

     (4)dubbo支持的6种集群容错模式

          ① Failover Cluster

               这种模式是dubbo集群容错默认的模式选择,调用失败时,会自动切换,重新尝试调用其它节点上的可用服务。对于一些幂等性操作可以使用该模式,如读操作。可以知道的是,重复调用必然会带来相应端的延迟,可以通过 retries="2"  来设定重试次数(不含第一次)。

              配置:

<dubbo:service interface="org.shirdrn.dubbo.api.ChatRoomOnlineUserCounterService" version="1.0.0"
     cluster="failover" retries="2" timeout="100" ref="chatRoomOnlineUserCounterService" protocol="dubbo" >
     <dubbo:method name="queryRoomUserCount" timeout="80" retries="2" />
</dubbo:service>

          ② Failfast Cluster

               这种模式称为快速失败模式,调用只执行一次,失败则立即报错。这种模式适用于非幂等性操作,如写操作。比如交易系统,我们要下订单,如果一次失败,就让他失败。通常服务消费方控制是否重新发起下订单操作请求。

          ③ Failsafe Cluster

               这种模式称为失败安全模式。如果调用失败,不是直接忽略失败的调用,而是记录下失败的调用到日志文件,以便后续审计。

          ④ Failback Cluster

               失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

          ⑤ Forking Cluster

               并行调用多个服务器,只要一个返回成功即可。通常用于实时性较高的读操作,但需浪费更多的服务资源。

          ⑥ Broadcast Cluster

                广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于通知所有提供者更新缓存或日志等本地资源信息。

    (5)dubbo提供的负载均衡

                 dubbo内置了4中负载均衡策略:

            ①Random LoadBalance : 随机策略,配置值为random。可以设置权重,有利于充分利用服务器资源。配置高的机器可以设置权重大些,配置低的设置小些。  

            ②RoundRobin LoadBalance : 轮询策略,配置值为roundrobin。

            ③LeastActive LoadBalance :配置值为leastactive。根据请求调用的次数计数,处理请求更慢的节点会收到更少的请求。

            ④ConsistenHash LoadBalance : 一致性Hash策略。相同调用参数的请求会发送到同一个服务提供方节点上,如果某个节点发生故障无法提供服务,则会基于一致性Hash算法映射到其他服务节点上。