Dubbo简介

作者: 盗梦者_56f2 | 来源:发表于2021-06-23 15:51 被阅读0次

    简介

    Apache Dubbo 是一个款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。
    Dubbo是阿里巴巴开源的基于 Java 的轻量级和高性能的 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。

    特性

    • 面向接口代理的高性能RPC调用。提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
    • 智能容错和负载均衡。内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
    • 服务自动注册和发现。支持多种注册中心服务,服务实例上下线实时感知。
    • 高度可扩展能力。遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。
    • 运行期流量调度。内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
    • 可视化的服务治理与运维。提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

    架构

    服务发现与注册

    服务发现,即消费端自动发现服务之地列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与 IP 地址的情况下实现通信。

    实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的 Nacos、Consul、Zookeeper 等,Dubbo 自身也提供了对多种注册中心组件的对接,用户可以灵活选择。

    Dubbo 基于消费端的自动服务发现能力,其基本工作原理如下图:


    服务发现

    流量管理

    dubbo提供了强大的流量管理能力。流量管理的本质是将请求根据制定好的路由规则分发到应用服务上,如下图所示:


    流量管理

    其中:

    • 路由规则可以有多个,不同的路由规则之间存在优先级。如:Router(1) -> Router(2) -> …… -> Router(n)
    • 一个路由规则可以路由到多个不同的应用服务。如:Router(2)即可以路由到Service(1)也可以路由到Service(2)
    • 多个不同的路由规则可以路由到同一个应用服务。如:Router(1)和Router(2)都可以路由到Service(2)
    • 路由规则也可以不路由到任何应用服务。如:Router(m)没有路由到任何一个Service上,所有命中Router(m)的请求都会因为没有对应的应用服务处理而导致报错
    • 应用服务可以是单个的实例,也可以是一个应用集群。

    部署架构

    作为一个微服务框架,Dubbo sdk 跟随着微服务组件被部署在分布式集群各个位置,为了在分布式环境下实现各个微服务组件间的协作, Dubbo 定义了一些中心化组件,这包括:

    • 注册中心。协调 Consumer 与 Provider 之间的地址注册与发现
    • 配置中心。存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性。负责服务治理规则(路由规则、动态配置等)的存储与推送。
    • 元数据中心。接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等)。作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展


      部署架构

    负载均衡

    负载均衡策略:

    • Random LoadBalance(随机)
      按权重设置随机概率。 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
    • RoundRobin LoadBalance(轮询)
      按公约后的权重设置轮询比率。存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
    • LeastActive LoadBalance(最少活跃调用数)
      相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
    • ConsistentHash LoadBalance(一致性 Hash)
      相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

    集群容错

    集群调用失败时,Dubbo 提供的容错方案
    在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。

    • Failover Cluster:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。
    • Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
    • Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
    • Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
    • Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
    • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。

    配置

    XML配置:
    provider.xml 示例:

    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
        <dubbo:application name="demo-provider"/>
        <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
        <dubbo:protocol name="dubbo" port="20890"/>
        <bean id="demoService" class="org.apache.dubbo.samples.basic.impl.DemoServiceImpl"/>
        <dubbo:service interface="org.apache.dubbo.samples.basic.api.DemoService" ref="demoService"/>
    </beans>
    

    consumer.xml示例:

    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
        <dubbo:application name="demo-consumer"/>
        <dubbo:registry group="aaa" address="zookeeper://127.0.0.1:2181"/>
        <dubbo:reference id="demoService" check="false" interface="org.apache.dubbo.samples.basic.api.DemoService"/>
    </beans>
    

    相关文章

      网友评论

        本文标题:Dubbo简介

        本文链接:https://www.haomeiwen.com/subject/aravyltx.html