• Dubbo基础知识


    Dubbo

    Apache Dubbo 是一款微服务开发框架,可以用于 RPC通信 与 微服务治理 。

    六大核心能力

    • 面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。

    • 智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。

    • 服务自动注册与发现:支持多种注册中心服务,服务实例上下线实时感知。

    • 高度可扩展能力:遵循微内核+插件的设计原则,所有核心能力如Protocol、Transport、Serialization被设计为扩展点,平等对待内置实现和第三方实现。

    • 运行期流量调度:内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。

    • 可视化的服务治理与运维:提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。

    服务发现

    服务发现,即消费端自动发现服务地址列表的能力。
    服务发现的一个核心组件是注册中心,Provider 注册地址到注册中心,Consumer 从注册中心读取和订阅 Provider 地址列表,进而对地址发起通信。

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

    调用关系说明(对应上图的步骤):

    0.服务容器负责启动,加载,运行服务提供者。
    1.服务提供者在启动时,向注册中心注册自己提供的服务。
    2.服务消费者在启动时,向注册中心订阅自己所需的服务。
    3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    配置

    xml配置详情见: https://dubbo.apache.org/zh/docs/v2.7/user/references/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:service 服务配置 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心
    dubbo:reference 引用配置 用于创建一个远程服务代理,一个引用可以指向多个注册中心
    dubbo:protocol 协议配置 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受
    dubbo:application 应用配置 用于配置当前应用信息,不管该应用是提供者还是消费者
    dubbo:module 模块配置 用于配置当前模块信息,可选
    dubbo:registry 注册中心配置 用于配置连接注册中心相关信息
    dubbo:monitor 监控中心配置 用于配置连接监控中心相关信息,可选
    dubbo:provider 提供方配置 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选
    dubbo:consumer 消费方配置 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选
    dubbo:method 方法配置 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息
    dubbo:argument 参数配置 用于指定方法参数配置

    协议

    协议详情见: https://dubbo.apache.org/zh/docs/v2.7/user/references/protocol/

    协议 特性 缺点
    Dubbo协议 采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用) 在大文件传输时,单一连接会成为瓶颈
    Rmi协议 可与原生RMI互操作,基于TCP协议 偶尔会连接失败,需重建Stub
    Hessian协议 可与原生Hessian互操作,基于HTTP协议 需hessian.jar支持,http短连接的开销大

    集群容错

    集群容错模式(策略) 特性 缺点
    Failover Cluster(失败自动切换) 当出现失败,重试其它服务器,通常用于读操作(推荐使用) 重试会带来更长延迟
    Failfast Cluster(快速失败) 只发起一次调用,失败立即报错,通常用于非幂等性的写操作 如果有机器正在重启,可能会出现调用失败
    Failsafe Cluster(失败安全) 出现异常时,直接忽略,通常用于写入审计日志等操作 调用信息丢失
    Failback Cluster(失败自动恢复) 后台记录失败请求,定时重发,通常用于消息通知操作 不可靠,重启丢失
    Forking Cluster(并行调用多个服务器) 只要一个成功即返回,通常用于实时性要求较高的读操作 需要浪费更多服务资源
    Broadcast Cluster(广播调用所有提供者) 逐个调用,任意一台报错则报错,通常用于更新提供方本地状态 速度慢,任意一台报错则报错

    负载均衡

    dubbo负载均衡的几种方式如下。

    负载均衡策略 特性 缺点
    Random LoadBalance(随机) 按权重设置随机概率(推荐使用) 在一个截面上碰撞的概率高,重试时,可能出现瞬间压力不均
    RoundRobin LoadBalance(轮询) 按公约后的权重设置轮询比率 存在慢的机器累积请求问题,极端情况可能产生雪崩
    LeastActive LoadBalance(最少活跃调用数) 相同活跃数的随机,活跃数指调用前后计数差,使慢的机器收到更少请求 不支持权重,在容量规划时,不能通过权重把压力导向一台机器压测容量
    ConsistentHash LoadBalance(一致性Hash) 相同参数的请求总是发到同一提供者,当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动 压力分摊不均

    参考资料:

    dubbo官方文档
    https://dubbo.apache.org/zh/docs/v2.7/user/preface/architecture/
    https://dubbo.apache.org/zh/docs/v2.7/user/examples/

  • 相关阅读:
    【JLOI 2015】城池攻占
    【BalticOI 2004】Sequence
    罗马游戏
    《STL源码剖析》STL迭代器分类
    《Effective C++》模版与泛型编程
    《Effective C++》继承与面向对象设计
    《Effective C++》实现 章节
    [C++]const_cast,dynamic_cast,reinterpret_cast,static_cast转型
    [C++]default constructor默认构造函数
    [C++]union联合体总结
  • 原文地址:https://www.cnblogs.com/expiator/p/15893534.html
Copyright © 2020-2023  润新知