zoukankan      html  css  js  c++  java
  • 3、dubbo核心用法

    https://dubbo.apache.org/zh/docs/v2.7/user/examples/preflight-check/

    1、启动时检查

      在启动时检查依赖的服务是否可用

    Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"

    可以通过 check="false" 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

    另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check="false",总是会返回引用,当服务恢复时,能自动连上。

    <dubbo:reference interface="com.foo.BarService" check="false" />

    2、集群容错

    集群调用失败时,Dubbo 提供的容错方案

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

    Failover Cluster

    失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

    重试次数配置如下:

    <dubbo:service retries="2" />

    <dubbo:reference>
        <dubbo:method name="findFoo" retries="2" />
    </dubbo:reference>

    Failfast Cluster

    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

    Failsafe Cluster

    失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

    Failback Cluster

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

    Forking Cluster

    并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

    Broadcast Cluster

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

    3、负载均衡

    Dubbo 提供的集群负载均衡策略

    在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。

    可以自行扩展负载均衡策略,参见:负载均衡扩展

    负载均衡策略

    Random LoadBalance

    • 随机,按权重设置随机概率。
    • 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

    RoundRobin LoadBalance

    • 轮询,按公约后的权重设置轮询比率。
    • 存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

    LeastActive LoadBalance

    • 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
    • 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

    ConsistentHash LoadBalance

    • 一致性 Hash,相同参数的请求总是发到同一提供者。
    • 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
    • 算法参见:http://en.wikipedia.org/wiki/Consistent_hashing
    • 缺省只对第一个参数 Hash,如果要修改,请配置 <dubbo:parameter key="hash.arguments" value="0,1" />
    • 缺省用 160 份虚拟节点,如果要修改,请配置 <dubbo:parameter key="hash.nodes" value="320" />

    4、直连提供者

    Dubbo 中点对点的直连方式

    在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点对点,不影响 B 接口从注册中心获取列表。

    5、只订阅

    只订阅不注册

    为方便开发测试,经常会在线下共用一个所有服务可用的注册中心,这时,如果一个正在开发中的服务提供者注册,可能会影响消费者不能正常运行。

    可以让服务提供者开发方,只订阅服务(开发的服务可能依赖其它服务),而不注册正在开发的服务,通过直连测试正在开发的服务。

    <dubbo:registry address="10.20.153.10:9090" register="false" />

    6、多协议

    在 Dubbbo 中配置多协议

    Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。

    不同服务不同协议

    不同服务在性能上适用不同协议进行传输,比如大数据用短连接协议,小数据大并发用长连接协议

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> 
        <dubbo:application name="world"  />
        <dubbo:registry id="registry" address="10.20.141.150:9090" username="admin" password="hello1234" />
        <!-- 多协议配置 -->
        <dubbo:protocol name="dubbo" port="20880" />
        <dubbo:protocol name="rmi" port="1099" />
        <!-- 使用dubbo协议暴露服务 -->
        <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" protocol="dubbo" />
        <!-- 使用rmi协议暴露服务 -->
        <dubbo:service interface="com.alibaba.hello.api.DemoService" version="1.0.0" ref="demoService" protocol="rmi" /> 
    </beans>

    7、多注册中心

    在 Dubbo 中把同一个服务注册到多个注册中心上

    Dubbo 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务。另外,注册中心是支持自定义扩展的 1

    多注册中心注册

    比如:中文站有些服务来不及在青岛部署,只在杭州部署,而青岛的其它应用需要引用此服务,就可以将服务同时注册到两个注册中心。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
        <dubbo:application name="world"  />
        <!-- 多注册中心配置 -->
        <dubbo:registry id="hangzhouRegistry" address="10.20.141.150:9090" />
        <dubbo:registry id="qingdaoRegistry" address="10.20.141.151:9010" default="false" />
        <!-- 向多个注册中心注册 -->
        <dubbo:service interface="com.alibaba.hello.api.HelloService" version="1.0.0" ref="helloService" registry="hangzhouRegistry,qingdaoRegistry" />
    </beans>

    8、服务分组

    使用服务分组区分服务接口的不同实现

    当一个接口有多种实现时,可以用 group 区分。

    服务

    <dubbo:service group="feedback" interface="com.xxx.IndexService" />
    <dubbo:service group="member" interface="com.xxx.IndexService" />
    

    引用 

    <dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />
    <dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />
    

    任意组:

    <dubbo:reference id="barService" interface="com.foo.BarService" group="*" />


    9、静态服务

    将 Dubbo 服务标识为非动态管理模式

    有时候希望人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管理模式。

    <dubbo:registry address="10.20.141.150:9090" dynamic="false" />
    

    或者

    <dubbo:registry address="10.20.141.150:9090?dynamic=false" />
    

    服务提供者初次注册时为禁用状态,需人工启用。断线时,将不会被自动删除,需人工禁用。

    如果是一个第三方服务提供者,比如 memcached,可以直接向注册中心写入提供者地址信息,消费者正常使用 1

    RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
    Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
    registry.register(URL.valueOf("memcached://10.20.153.11/com.foo.BarService?category=providers&dynamic=false&application=foo"
     

    10、多版本

    在 Dubbo 中为同一个服务配置多个版本

    当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。

    可以按照以下的步骤进行版本迁移:

    1. 在低压力时间段,先升级一半提供者为新版本
    2. 再将所有消费者升级为新版本
    3. 然后将剩下的一半提供者升级为新版本

    老版本服务提供者配置:

    <dubbo:service interface="com.foo.BarService" version="1.0.0" />
    

    新版本服务提供者配置:

    <dubbo:service interface="com.foo.BarService" version="2.0.0" />
    

    老版本服务消费者配置:

    <dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
    

    新版本服务消费者配置:

    <dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />
     

    11、结果缓存

    通过缓存结果加速访问速度

    结果缓存,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量。

    缓存类型 

    • lru 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存。
    • threadlocal 当前线程缓存,比如一个页面渲染,用到很多 portal,每个 portal 都要去查用户信息,通过线程缓存,可以减少这种多余访问。
    • jcache 与 JSR107 集成,可以桥接各种缓存实现。

    缓存类型可扩展,参见:缓存扩展

    <dubbo:reference interface="com.foo.BarService" cache="lru" />
     
  • 相关阅读:
    Elastic Stack之FileBeat使用实战
    Elastic Stack之Logstash进阶
    Elastic Stack之Logstash
    Elastic Stack之Elasticsearch 5.6.12 集群部署实战
    CentOS安装操作系统级初始优化
    Elastic Stack之搜索引擎基础
    ansible基础-ansible角色的使用
    ansible基础-playbook剧本的使用
    ansible基础-ansible的安装和常用模块介绍
    运维开发笔记整理-使用序列化
  • 原文地址:https://www.cnblogs.com/lemon-flm/p/14622376.html
Copyright © 2011-2022 走看看