Dubbo原理理解(一)

本文详细解读Dubbo的高可用机制,包括集群容错、服务路由(如读写分离和脚本路由)、服务治理策略(如服务降级和mock),以及SPI机制的运用。还深入剖析了Dubbo服务暴露和引入的过程,以及如何通过整合Hystrix进行增强。
摘要由CSDN通过智能技术生成

一 、Dubbo高可用机制

1.1 集群容错

  • 服务路由

    • 路由规则:决定了服务的消费者怎么选择服务提供者
      • 条件路由
        • 格式: 服务消费者匹配条件 => 服务提供者匹配条件
        • host = 192.168.242.128 => host = 10.20.30.40
        • 四种路由配置(服务提供者匹配条件为空 即有禁用的消费者)
          • 白名单
            • host != 192.168.242.128 =>
            • 即以上之外的机器可以访问任何机器 白名单
          • 黑名单
            • host = 192.168.242.128, xxx =>
          • 读写分离
            • method=find,get => host=xxxx
          • 前后台分离
            • application = front => host = xxx
      • 脚本路由
      • 标签路由
  • 集群容错

    • failover:当出现失败重试其他服务器,重试会带来更长延迟,所以一般重试使用"retries=2"

      • <dubbo:service retries="2">
        <dubbo:reference retries="2">
        
    • failfast:只发起一次调用,失败后立刻报错。用于非幂等

    • failsafe:失败安全,出现异常直接忽略,一般用在记录日志

    • failback:失败自动恢复,定时重发,一般用于消息通知

    • forking:并行调用,只要有一个成功即返回,对实时性要求很高

    • broadcast:逐个调用,如果有一台机器报错了即整个报错

  • 负载均衡

    • random:随机
    • roundrobin:轮询
      • 节点性能不一样会有问题
    • leastActive:最少活跃数
      • 统计服务调用次数(活跃数计数器)
    • Consistant Hash:一致性的Hash

1.2服务治理

  • 服务降级

    • 屏蔽掉出错的非关服务、并定义降级后的返回策略

    • mock

      • mock=force: return null:服务调用直接返回null,不再发起远程调用,会抛异常

      • mock=fail: return null: 消费方对服务调用失败,返回null,但是不会抛异常

      • <dubbo:service mock="return null"
        <dubbo:servcice mock="true">
        
  • 整合hystrix

    • pom
    • @EnableHystrix
    • 消费方方法上加上@HystrixCommand(fallbackMethod=xxx)

二、Dubbo的SPI机制

  • Service Provider Interface

  • 服务发现机制

    • 接口实现类全限定名配置在配置文件中(约定), 启动程序时加载配置文件,从而加载实现类
  • java SPI

    • 缺点
      • 这些实现类都需要加载
      • 不能够通过参数获取,没有一种方式来获取想要的实现类
  • Dubbo SPI

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    • 接口上+@SPI
    • META-INF/dubbo/全限定名的接口文件 —> key = value
    • 比Java加了扩展
      • 通过key获取想要的对象

三、Dubbo源码分析

  • Dubbo服务暴露
    • 加载BeanDefinitionParser解析配置文件
    • Dubbo文件的加载依赖于另外一个类 DubboBeanDefinitonParser
    • DubboBeanDefinitonParser解析spring与dubbo整合的xml文件,解析成 xxxConfig对象
      • xxxConfig对象对应xml中的节点 <dubbo:service …> 即 serviceConfig
  • Dubbo服务引入

四、拓展

  • ​ 基于NIO

    • New IO/ Non-Block IO

    • 多路复用

    • BIO vs NIO

      • BIO 一个请求一个线程 阻塞式

      • NIO 使用通道 SocketChannel selector 多路复用器

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值