客户端开发 小松 对于dubbo的简单了解

170 阅读4分钟

dubbo是阿里开源的高可用服务端架构,只要用于后端服务器的调度,今天小松心血来潮,在b站搜了一个课程来学一学,不过我并没有实操,毕竟没有那么多时间,算是“云学习”哈哈,这篇文章就当是我学过dubbo的证据了

文章最后会附上视频地址,有兴趣的小伙伴可以去看看,因为我对dubbo算是初学,下面的总结都是来自视频,可能有过时或者错误的地方,欢迎探讨

基础知识

Dubbo架构

image-20211126143246721

使用方法:

  1. 将服务提供者注册到zookeeper注册中心

    • 导入dubbo依赖,操作zookeeper的客户端
    • 配置provider
      • 指定当前服务/应用的名字
      • provider注册到注册中心,指定位置
      • 指定通信规则,协议和端口
      • 暴露服务service让别人调用,ref指向service真正的实现对象

    可以在后端浏览器看到已经提供了服务

    image-20211126150612231

  2. 消费者consumer注册到zookeeper注册中心

    • ref接口引用 provider提供的服务类名,生成远程服务代理
    • 给服务增加注解,自动注入,并scan service
  3. 测试

    在应用中获取consumer 容器,拿到service对象,传入consumerId,调用service的方法进行服务,此时servcie在远程,完成RPC(远程服务调用)

  4. 监控中心 监控服务调用

配置流程 :引入依赖,配置name和port,连接注册中心,监控中心,使用注解设置为暴露功能,最后在本地浏览器访问

高可用场景

权重随机负载

当任务来的时候,为了避免单个服务器过载,我们需要适当分配任务到不同的服务器

下图是轮询,权重的机制,

image-20211127140624088

简单说就是按照service 1,2,3的顺序轮流访问,但是设置了权重,每7次访问,必须1号机有2次命中,2号机有4次命中,所以1,2,3轮流一遍,第二遍从1开始,然后2,随后由于3已经用掉一次,1已经用掉2次,所以接下来都是访问2

访问顺序就是1,2,3,1,2,2,2

还有最小活跃数,一致性哈希机制,大家有兴趣可以搜搜看

其他场景

除了上面的策略,还有一些常见的情况处理

  • 注册中心挂掉

    缓存:依然能够访问服务,因为consumer连接一次后会在本地进行缓存

    dubbo直连: service显示指定provider地址,可以不用从注册中心查询

  • 服务降级

    服务器压力剧增时,降级一些边缘服务,释放资源处理核心服务,调用时返回null即可避免调用边缘服务

  • 集群容错

    配置重试次数,多次提供服务失败的服务器及时切换到其他服务器处理

    并行调用,可以多个服务器同时处理,任意服务器完成成功即可返回,适用于核心紧急服务,但是浪费资源

    广播通知,逐个调用,任意服务器报错则失败,适用于更新缓存和日志

    实际编码:整合hystrix

原理

RPC原理:完成远程过程调用

computer 01作为消费方,computer 02作为服务方的过程

image-20211127142022076

netty 通信原理

BIO 阻塞式IO

每一个线程对应一个服务,服务在IO的时候容易阻塞

image-20211127142357384

NIO 非阻塞式IO

有总的selector监听,哪一个channel的任务准备好了就可以直接运行

image-20211127142338340

框架设计

下图是dubbo的整体结构图

第一层是程序员调用的,下面全部是底层,东西很多,我就不一一列举了,主要是对dubbo有一个直观的印象

主要分为Business, RPC, Remoting三个大层

image-20211127142731569

后面更深的源码讲解有点听不懂了,需要自己下载源码debug才能明白,后端的小伙伴建议实操一下哦

一早上基本在看这个视频,如果对dubbo有兴趣的小伙伴可以去看看,传送门

www.bilibili.com/video/BV1ns…