跳至主要內容

Dubbo

sixkey大约 5 分钟后端Dubbo微服务RPC框架

Dubbo

总结

Dubbo使用 需要在服务提供方和服务消费方配置各自的如下配置

ppH3nqx.md.pngopen in new window
ppH3nqx.md.png

一、基础知识

1.1 分布式概念

分布式系统是若干个独立计算机的集合。

了解序列化与反序列化:Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。 ... 反序列化就是打开字节流并重构对象

1.2 RPC

RPC俩个核心模块:通讯(Socket)、序列化

RPC多个框架:dubbo、gRPC、Thirft、HSF

RPC原理:ppHK0mT.md.pngopen in new window

节点角色:ppHKB0U.md.pngopen in new window

1.3 Dubbo基本工作原理:ppHKdXV.md.pngopen in new window

1.4 调用关系

(1) 服务容器(Container),主要负责启动、加载、运行服务、

(2) 服务提供者(Provider)在启动时,需要向注册中心注册自己提供的服务。

(3) 服务消费者(Consumer)在启动时,向注册中心订阅自己所需要的服务。

(4) 在注册中心返回服务列表给到服务消费者,如果有变更,注册中心将基于长连接推送变更的数据。

(5) 服务消费,从提供的服务列表中,获取到对应的服务后,去调用远程服务关联的业务逻辑。

(6) 监控中心(Monitor),将服务消费者和服务提供者在内存累计被访问和调用的次数,监控中心每一分钟进行一次统计。

二、dubbo配置

2.1 注册中心:

Zookeeper 负责服务地址的注册服务地址的查询。

服务提供方和服务消费方只在启动时与注册中心进行交互,注册中心不负责具体请求的处理

2.2 Zookeeper下载安装:

阿帕奇动物园管理员 (apache.org)open in new window

Zookeeper下载安装注意:需要在conf文件夹中的zoo_sample.cfg 复制一份 重命名为zoo.cfg,并进入bin级目录下通过cmd输入命令行zkServer.cmd启动,同时进入bin级目录下输入命令行zkCli.cmd

2.3 小案例

特别提示:服务提供方是一个maven项目,服务消费方又是一个maven项目 没有整合springboot.

2.3.1 服务提供方配置spring.xml文件

ppHKytJ.md.pngopen in new window
ppHKytJ.md.png

监听器配置在web.xml下:

ppHKD7F.md.pngopen in new window
ppHKD7F.md.png

2.3.2 服务消费方配置spring.xml文件

ppH3Vz9.md.pngopen in new window
ppH3Vz9.md.png

在web.xml文件下配置前端控制器

ppH3ERJ.md.pngopen in new window
ppH3ERJ.md.png

案例总结:服务提供方需要写业务层接口和实现;服务消费方需要写跟服务提供方一样的接口但不需要实现接口,还需要写Controller层。

注意:Controller层的依赖注入,不再使用@Autowired注解,使用dubbo提供的@Reference,原因如下:ppHKsk4.md.pngopen in new window

2.4配置

2.4.1 启动检查

ppH3AG4.md.pngopen in new window
ppH3AG4.md.png

2.4.2 配置重试次数&超时时间

ppH3kiF.md.pngopen in new window
ppH3kiF.md.png

服务端设置重试次数

ppH3iIU.md.pngopen in new window
ppH3iIU.md.png

2.4.3 配置多版本

服务提供方配置:

ppH3ms1.md.pngopen in new window
ppH3ms1.md.png

注意:

如果服务消费方配置了dubbo:reference,则Cotroller层的依赖注入注解就得使用@Autowired

服务消费方配置:

ppH3eMR.md.pngopen in new window
ppH3eMR.md.png

2.4.4 本地存根 (就是充当中介的角色)

ppH38RH.md.pngopen in new window
ppH38RH.md.png

三、高可用

1、Zookeeper宕机与Dubbo直连

现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务。

原因:

健壮性:
(1)监控中心宕掉不影响使用,只是丢掉部分采样数据。
(2)数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务。
(3)注册中心完全宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯。
(4)服务提供者无状态,任意一台宕掉后,不影响使用。
(5)服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。
高可用:通过设计,减少系统不能提供服务的时间

2.负载均衡机制

默认调用随机均衡机制,可通过配置修改

(1) 基于权重的随机负载均衡机制

ppHKJYj.md.pngopen in new window
ppHKJYj.md.png

(2) 基于权重的轮询负载均衡机制

ppHKNpn.md.pngopen in new window
ppHKNpn.md.png

(3) 最少活跃数-负载均衡机制

ppHKUlq.md.pngopen in new window
ppHKUlq.md.png

(4) 一致性hash-负载均衡机制

3.服务降级

什么是服务降级?

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

具体实现:可以在消费者一方屏蔽某些服务或容错某些服务

屏蔽:不调用远程方法,直接返回空对象。

容错:调用远程方法,返回空对象。

  1. 服务器容错&Hystrix

在集群调用失效时,Dubbo提供了多种容错方案,默认为Failover Cluster:当出现失效,重试其它服务器。

实际开发中整合hystrix:

Hystrix旨在通过控制哪些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。

(1) 配置spring-cloud-starter-netflix-hystrix.

直接在pom.xml中加入依赖

然后在启动类上加上@EnableHystrix来启用

(2) 配置Provider端

在Dubbo的Provider上加上@HystrixCommand配置,经过Hystrix代理。