教学视频:B站尚硅谷Dubbo教学视频
代码资源:dubbo代码资源
文章目录
一、基础知识
1、分布式基础理论
1.1什么是分布式系统
- 概念
由于系统功能庞大,所以将多个独立的计算机组成一个系统,这个系统对外是整体的,但实际是有多个计算机组成。 - 分布式与微服务
可以理解为大项目分解小模块是微服务,小模块分布在不同计算机上面是分布式
1.2发展演变
- ROM:单一应用框架
适用于网站流量小的情况,将所有功能部署在一起,减少部署节点和成本,但不利于应用维护,扩展,修改、分工等工作
- MVC:垂直应用框架
将不用功能分别是部署在不同服务器,便于应对不同流量情况,也便于维护和性能扩展
- RPC:分布式服务框架
由于垂直应用框架的各个功能之间不可能完全没有关系,各个功能之间有很多的联系,在进行前后端修改的时候耦合性较高,所以将后端与前端分离,以接口形式调用,实现前后端解耦
- SOA:流动计算框架
可以根据访问数量来增加和减少相应服务器
1.3 RPC
- 概念
- 过程
1.调用小助手
2.小助手找到对应服务端,建立连接
3.小助手将请求的方法和参数序列化,发送给对方服务器的小助手
4.对方小助手接受数据后进行反序列化,交给目标服务器
5.目标服务器根据方法名个参数在本地进行方法调用,然后将该方法的执行结果以同样的方式返回给调用方
RPC框架性能的高低的关键:建立连接 与 序列化反序列化的速度
2、 Dubbo基础知识
-
Dubbo简介
由于Dubbo可以进行后端服务器的负债均衡,所以为了方便对后端服务的统一管理,引入注册中心,以便监控、识别各个服务的状态
还可以进行灰度发布:新版服务不会一下子全部发布,而是通过不同的路由配置将新服务发布到一定数量的服务器上,若没有发现问题才一步步更新所有服务器 -
设计架构
0.container:Dubbo服务容器,可以将容器中的服务初始化为实例加入服务提供者
1.provider:服务提供者,对应后端的各个功能,要将服务同步注册到注册中心
2.registry:注册中心,提供服务让服务消费者订阅,并实时通知订阅者服务的变化
3.consumer:服务消费者,从注册中心订阅服务,对服务进行使用/消费
4.monitor:监控中心,消费者和提供者将消费信息异步发送给监控中心,以便对各种服务做监控
3、 Dubbo环境搭建
- 注册中心,监控中心dubbo-admin
官方推荐用zookeeper来作为注册中
环境搭建参考:Docker安装运行Dubbo
zookeeper的使用:
获取节点内容(不接节点名默认根节点):get /节点名
查看节点:ls /
创建临时节点:create -e /节点名 节点值
- 创建提供者、消费者
需求:
在idea中 分别创建三个项目后,将项目导入到其中一个中
orderService:消费者
userService:提供者
将上述二者的公共部分(bean,service接口)放到一个interfaces项目中
在提供者和消费者引入接口项目的依赖(要讲项目导入到同一个项目中才可以引入依赖)
- 提供者测试
导入依赖,要注意版本对应
配置
在服务类加上com.alibaba.dubbo.config.annotation.Service的@server注解
- 消费者测试
与提供者一样,引入相同依赖
配置文件
加入springboot的注解@Server,用reference注入远程服务
- 监控中心:dubbo-minitor-simple
docker 搞不了先放一放 p11
二、Dubbo配置
-
启动时检查
-超时、覆盖关系
也可以用dubbo.method:timeout来指定特定方法的超时时间,springboot就在@server的注解中添加参数即可(针对方法的配置都放在注解参数中) -
重试次数
请求超时后重试的次数,注册中心有多个同名方法则会自动轮循重试
非幂等方法不可以设置重试(幂等:方法执行多次的结果一致) -
多版本
在方法中指定version版本号,可以手动进行版本迭代,若不需要指定版本也一定要写出version这个key不然会报错,可以用version=“*”,随机调用任意一个版本 -
本地存根
在conmuer的注解配置,不指定路径直接用“true”也可以
-
与springboot整合的三种方式
将各个对应的key new出来然后返回该方法实例即可 -
异步调用
参照官方文档,还有另一种实现方式
1、定义共同接口
2、提供者实现接口
3、消费者远程调用
针对具体方法的声明如下
- 事件通知
三、高可用
1、zookeeper宕机
也可以在reference注解中使用url指定提供者的地址和端口,绕开注册中心
2、负载均衡
在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。
具体实现上,Dubbo 提供的是客户端负载均衡,即由 Consumer 通过负载均衡算法得出需要将请求提交到哪个 Provider 实例。
可以在服务端的@service注解参数加入weight设置权重,没有权重就是完完全全的随机调用
可以不设置权重,这样就是完完全全的轮循
100ms:上次调用的响应时间
系统会将请求发送给响应时间较小的服务器
配置方法:Dubbo官方文档配置负载均衡策略
关键词:
3、服务降级(针对消费端)
1、为了降低服务器资源,屏蔽某些不关键服务
2、当某些不关键业务出错,利用服务降级将其临时屏蔽
配置:消费端的屏蔽、容错就对应上述两种方式
-
集群容错
Dubbo官方文档-集群容错
但实际应用中多是运用hystrix提供集群容错的功能
-
多注册中心
Dubbo官方文档-多注册中心
四、Dubbo原理
1、rpc和netty原理
基于nio的多路复用模型
流程图
2、框架设计
3、标签解析
启动时解析配置文件时需要解析
项目启动后在spring的dubbobeandefinitionparser中寻找dubbo的配置标签,根据标签将配置内容交给不同的配置类(生成配置实例)去处理(主要是赋值操作)
4、服务暴露过程
5、服务引用过程
6、服务调用过程
听不懂(꒦_꒦)