Dubbo

Dubbo

一、Dubbo基础

RPC:Remote Procedure Call 远程过程调用。用于分布式服务框架 。

流动架构中心:调度、治理中心;基于访问压力实时管理集群容量,提高集群的利用率。

Dubbo:高性能的RPC框架。负载均衡,服务自动注册于发现、高度可扩展能力、可视化的服务治理与运维。

二、Dubbo的使用

# 使用docker安装dubbo
	docker run -p 2181:2181 --name zookeeper -d 镜像编号

# 去Dubbo官网下载监控中心源代码
	地址:https://github.com/apache/dubbo-admin
	监控中心是前后端分离项目
		后端:dubbo-admin-server 打包命令:mvn package -Dmaven.test.skip=true
		前端:dubbo-admin-ui 下载前端依赖:npm install  启动命令:npm run dev
	注意:dubbo的监控中心要求zookeeper的版本是3.4.14 及以下,
	否则会报 org.apache.curator.CuratorConnectionLossException:KeeperErrorCode = ConnectionLoss
	所以使用docker获取zookeeper的时候使用的命令为:docker pull zookeeper:3.4.14

三、SpringBoot整合Dubbo

# SpringBoot整合Dubbo的三种方式:
	1. 导入dubbo-starter,在application.yml中配置属性。通过@Service暴露服务,通过@Reference引用服务 使用@EnableDubbo开启Dubbo功能(或者包扫		描)
	2. 导入dubbo-starter,保留dubbo.xml配置文件,使用ImportResource("classpath:配置文件") 将配置文件导入到SpringBoot中,不使用@Service以及			@Reference注解 这种方式可以做到方法级别的配置
	3. 导入dubbo-starter,将每一个组件手动创建到容器中。自定义一个配置类 每一个标签对应一个配置类,比如:RegistryConfig等,通过方法的方式对配置类设			置自定义内容

# 方法1:创建三个项目 项目一:公共服务(接口以及实体类) 项目二:dubbo提供者  项目三:dubbo消费者
	1. 导入Dubbo的依赖 地址:https://github.com/apache/dubbo-spring-boot-project
	2. Dubbo提供者需要指定的内容
		当前服务名称(应用名称) dubbo.application.name
		注册中心位置:dubbo.registry.protocol(注册协议) dubbo.registry.address(注册地址)
		通信规则:dubbo.protocol.name dubbo.protocol.port=200880
		暴露服务:通过@Service注解进行暴露服务
		连接监控中心地址:dubbo.moitor.protocol=registry 去注册中心自动发现
	3. Dubbo消费者需要指定的内容
		当前服务名称(应用名称) dubbo.application.name
		注册中心位置:dubbo.registry.protocol(注册协议) dubbo.registry.address(注册地址)
		通信规则:dubbo.protocol.name dubbo.protocol.port=200880
		获取服务:@Reference注解获取服务
	

四、Dubbo的配置文件

1、超时时间 timeout

​ 精确优先(方法级>接口级>全局)

​ 消费优先(消费者>提供者)

2、重试次数 retries

​ 调用次数=1 + retries(第一次调用+重试次数) 重试操作适用于幂等性(查询,更新,删除)的写操作,不适用于非幂等(新增)性操作

3、多版本 version

​ 每一个接口对应不同的版本(相同接口不同的逻辑,一般用于升级) 灰度发布

​ version=“*” 版本的随机调用

4、本地存根

​ 消费者在远程调用接口之前,先执行某些方法。本地存根代码应该放在公共的接口项目中

​ 服务提供者:

​ dubo.service.stub=“本地存根全类名”

// 本地存根代码示例
public class BarServiceStub implements BarService {
    private final BarService barService;
    
    // 构造函数传入真正的远程代理对象
    public BarServiceStub(BarService barService){
        this.barService = barService;
    }
 
    public String sayHello(String name) {
        // 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等
        try {
            return barService.sayHello(name);
        } catch (Exception e) {
            // 你可以容错,可以做任何AOP拦截事项
            return "容错数据";
        }
    }
}

五、高可用

1、zookeeper宕机与dubbo直连

问题一:当系统运行过程中出现了zookeeper的宕机,是否会影响消费者调用提供者?

​ 答:不会,注册中心全部宕机之后,服务提供者和服务消费者仍可以通过本地缓存通讯。

问题二:没有注册中心,消费者是否可以调用提供者?dubbo直连如何设置?

​ 答:可以调用,通过dubbo直连的方式。在@Reference注解使用URL属性直接指定远程服务提供者的地址以及端口号,(@Reference(url=“127.0.0.1:20881”)),这样就可以绕过注册中心

2、集群下dubbo的负载均衡配置

​ dubbo的负载均衡机制分为四种:Random LoadBalance(默认)、RandomRobin LoadBalance、LeastActive LoadBalance、ConsistenHash LoadBalance

​ 1)Random LoadBalance

​ 基于权重的随机负载均衡机制

​ 2)RandomRobin LoadBalance

​ 基于权重的轮训负载均衡机制

​ 3)LeastActive LoadBalance

​ 最少活跃数负载均衡机制,挑选服务器响应时间最少的服务

​ 4)ConsistenHash LoadBalance

​ 一致性hash负载均衡机制。根据方法名、参数名以及参数值进行hash运算,挑选指定的服务器

通过消费端@Reference(loadbalance=“rondom”)或者服务端@Service(loadbalance=“rondom”)进行配置

​ 权重的配置可以在控制中心进行配置

3、服务降级

当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或者换种简单的方式,从而释放服务器资源,以保证核心交易正常运作或者高效运作。

服务降级分为两种:

​ 1)mock=force:return+null 不调用远程服务,强制返回为null

​ 2)mock=fail:return + null 调用远程服务失败,强制返回为null

可以通过控制台在消费端(屏蔽和容错)进行控制

4、集群容错

当服务调用失败时,Dubbo提供了很多的容错机制。例如:失败自动切换(失败次数)【默认】、快速失败(非幂等性操作直发起一次调用)、失败自动恢复(一定要成功的操作,如:消息通知)、并行调用(实时性要求较高的服务)、广播调用(同步操作)等等。

通过Hystrix进行容错方案

​ 1、导入依赖

​ 2、开启Hystrix

​ 3、使用@HystrixCommand注解进行服务容错

六、Dubbo原理(待定)

1、RPC调用流程(同步和异步)

2、netty通信原理(BIO、NIO)

3、dubbo框架设计

4、dubbo配置文件中标签的解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值