Dubbo学习文档
总结
Dubbo使用 需要在服务提供方和服务消费方配置各自的如下配置
一、基础知识
1.1 分布式概念
分布式系统是若干个独立计算机的集合。
了解序列化与反序列化:Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。 序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。 … 反序列化就是打开字节流并重构对象
1.2 RPC
RPC俩个核心模块:通讯(Socket)、序列化
RPC多个框架:dubbo、gRPC、Thirft、HSF
RPC原理:
节点角色:
1.3 Dubbo基本工作原理:![屏幕截图 2023-02-04 111544]()
1.4 调用关系
(1) 服务容器(Container),主要负责启动、加载、运行服务、
(2) 服务提供者(Provider)在启动时,需要向注册中心注册自己提供的服务。
(3) 服务消费者(Consumer)在启动时,向注册中心订阅自己所需要的服务。
(4) 在注册中心返回服务列表给到服务消费者,如果有变更,注册中心将基于长连接推送变更的数据。
(5) 服务消费,从提供的服务列表中,获取到对应的服务后,去调用远程服务关联的业务逻辑。
(6) 监控中心(Monitor),将服务消费者和服务提供者在内存累计被访问和调用的次数,监控中心每一分钟进行一次统计。
二、dubbo配置
2.1 注册中心:
Zookeeper 负责服务地址的注册服务地址的查询。
服务提供方和服务消费方只在启动时与注册中心进行交互,注册中心不负责具体请求的处理
2.2 Zookeeper下载安装:
Zookeeper下载安装注意:需要在conf文件夹中的zoo_sample.cfg 复制一份 重命名为zoo.cfg,并进入bin级目录下通过cmd输入命令行zkServer.cmd启动,同时进入bin级目录下输入命令行zkCli.cmd
2.3 小案例
特别提示:服务提供方是一个maven项目,服务消费方又是一个maven项目 没有整合springboot.
2.3.1 服务提供方配置spring.xml文件
监听器配置在web.xml下:
2.3.2 服务消费方配置spring.xml文件
在web.xml文件下配置前端控制器
案例总结:服务提供方需要写业务层接口和实现;服务消费方需要写跟服务提供方一样的接口但不需要实现接口,还需要写Controller层。
注意:Controller层的依赖注入,不再使用@Autowired注解,使用dubbo提供的@Reference,原因如下:
2.4配置
2.4.1 启动检查
2.4.2 配置重试次数&超时时间
服务端设置重试次数
2.4.3 配置多版本
服务提供方配置:
注意:
如果服务消费方配置了dubbo:reference,则Cotroller层的依赖注入注解就得使用@Autowired
服务消费方配置:
2.4.4 本地存根 (就是充当中介的角色)
三、高可用
1、Zookeeper宕机与Dubbo直连
现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务。
原因:
健壮性:
(1)监控中心宕掉不影响使用,只是丢掉部分采样数据。
(2)数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务。
(3)注册中心完全宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯。
(4)服务提供者无状态,任意一台宕掉后,不影响使用。
(5)服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。
高可用:通过设计,减少系统不能提供服务的时间
2.负载均衡机制
默认调用随机均衡机制,可通过配置修改
(1) 基于权重的随机负载均衡机制
(2) 基于权重的轮询负载均衡机制
(3) 最少活跃数-负载均衡机制
(4) 一致性hash-负载均衡机制
3.服务降级
什么是服务降级?
当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和也页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
具体实现:可以在消费者一方屏蔽某些服务或容错某些服务
屏蔽:不调用远程方法,直接返回空对象。
容错:调用远程方法,返回空对象。
- 服务器容错&Hystrix
在集群调用失效时,Dubbo提供了多种容错方案,默认为Failover Cluster:当出现失效,重试其它服务器。
实际开发中整合hystrix:
Hystrix旨在通过控制哪些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。
(1) 配置spring-cloud-starter-netflix-hystrix.
直接在pom.xml中加入依赖
然后在启动类上加上@EnableHystrix来启用
(2) 配置Provider端
在Dubbo的Provider上加上@HystrixCommand配置,经过Hystrix代理。