今日任务:笔记提交到文档
1、掌握Dubbo运行流程
2、掌握Dubbo配置-超时、重试、灰度发布、启动检查等
3、Dubbo负载均衡有几种,默认是什么
4、Dubbo服务熔断降级有如何实现,容错机制有几种
5、SpringCloud 和 Dubbo 区别(面试题)
6、Eureka和Nacos区别
7、学会读官网文档:https://dubbo.apache.org/zh/docsv2.7/user/preface/
8 http工作网络7层模型的 应用层, rpc工作网络层

课下:搜网络7层模型 (记忆)
优先级:
1、代码敲完
2、整理笔记,上传到文档
3、sql语句: 2-5道,https://www.jianshu.com/p/476b52ee4f1b

当天的知识点细节:
Dubbo的调用实体类一定要实现序列化。

1.Dubbo运行流程

图集:
image.png
1.提供方注册到nacos上;
2.消费方根据服务名称去订阅
3.通过异步通知消费方
4.同步远程调用
image.png

2.Dubbo的六大核心功能:

image.png

3.Dubbo配置-超时、重试、灰度发布、启动检查等

3.1超时时间:

由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。默认调用的时间是 1s
同一个级别下,消费者>提供者
不同的级别下,方法>接口>通用配置
615ecd25ab2770212617917530b6cdb.png
为什么要使用这么多的配置呢?
(作为提供者而言更了解本身的一个情况,而消费者可以依靠需求去改变,多以可以有很多的地方去配置,优先级也各有不同)
1、作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等
2、在Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作为Consumer的缺省值。否则,Consumer会使用Consumer端的全局设置,这对于Provider不可控的,并且往往是不合理的
==配置的覆盖规则:==
1) 方法级配置别优于接口级别,即小Scope优先
2) Consumer端配置 优于 Provider配置 优于 全局配置

3.2重试次数

失败自动切换,当出现失败,重试其它服务器,但重试会带来更长延迟。可通过 retries=“2” 来设置重试次数(不含第一次)。
retries=””:重试次数,不包含第一次调用,0代表不重试。
关于幂等性操作(设置重试次数)【查询、删除、修改】、非幂等(不能设置重试次数)【新增】

注意:

  1. 重试:只有我们远程调用失败异常时,触发重试次数
  2. Dubbo 默认的重试次数2次
  3. //幂等性: 相同的url 无论请求多少次,结果都是一致的(查询GET,删除DELETE,表单修改PUT)
  4. //非幂等:新增,修改(POST)
  5. 新增:重试情况下可能会出现多条记录的问题
  6. 重试次数不建议设置的过多,建议重试次数不大于2次
  7. 服务器会因为重试多大量的并发请求,服务器会宕机现象

(重试次数不大于俩次)

3.3灰度发布

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。可以按照以下的步骤进行版本迁移:
(实际开发可以根据不同的业务需求可以改变)
步骤:
在低压力时间段,先升级一半提供者为新版本
再将所有消费者升级为新版本
然后将剩下的一半提供者升级为新版本

3.4上下文信息

RpcContext 是一个 ThreadLocal 的临时状态记录器,当接收到 RPC 请求,或发起 RPC 请求时,RpcContext 的状态都会变化。比如:A 调 B,B 再调 C,则 B 机器上,在 B 调 C 之前,RpcContext 记录的是 A 调 B 的信息,在 B 调 C 之后,RpcContext 记录的是 B 调 C 的信息。

A-B B-C RpcContext 的值会发生改变
小结:Dubbo上下文对象用于存储调用链路中的数据环境信息

3.5隐式传参

通过 Dubbo 中的 Attachment 在服务消费方和提供方之间隐式传递参数
image.png
显性的是通过传参以及一些实体类传过去的,隐式是ThreadLocal的RpcContext;

4、Dubbo高可用

4.1面试题:

1.nacos如果宕机的话:dubbo还能调用成功吗?

现象:nacos注册中心宕机,还可以消费dubbo暴露的服务。
为什么?

  • 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
  • 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
  • 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
  • 服务提供者无状态,任意一台宕掉后,不影响使用
  • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

2.Dubbo里面没有注册中心nacos可以吗?

可以的,可以通过dubbo 直连方式调用,绕过nacos注册中心实现:
直接在消费方调用的地方提供Dubbo的地址及端口号
(实际开发不用,用的话集群没办法使用了)
image.png

3.注册中心是否可以替换? 如果可以替换那么可以用什么来替换? 为什么?

支持替换:nacos,redis(发布/订阅),zookeeper(eraka不行,dubbo是一直在跟新,eraka已经被淘汰了)
mq不支持(应该可以,但是Dubbo不支持)

4.redis作为注册中心的原因是什么? 数据结构是什么内容是什么? 怎么实现?

Hash数据结构,主键+辅键 +value(过期时间)
主键:全限定类名+cusumer/priduster
辅健:服务的id
image.pngredis配置到服务中:
image.png

5、Dubbo负载均衡有几种,默认是什么

5.1.1 Random LoadBalance(默认的按照权重的随机)

大量的数据下:(权重)
image.png

5.1.2 RoundRobin LoadBalance

轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
image.png

5.1.3 LeastActive LoadBalance

最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
数字是处理时间
image.png

5.1.4 ConsistentHash LoadBalance

一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
image.png

6、Dubbo服务熔断降级有如何实现,容错机制有几种

1.什么是服务降级?(不常用,有sentinel Alibaba系的)

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

  • mock=force:return null 表示==消费方对该服务的方法调用都直接返回 null 值,不发起远程调用==用来屏蔽不重要服务不可用时对调用方的影响。
  • 还可以改为 mock=fail:return null ==表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。==用来容忍不重要服务不稳定时对调用方的影响。

2. 集群容错(默认是failover失败自动切换)

image.png
五种解决方案:
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。

7、SpringCloud 和 Dubbo 区别(面试题)

https://blog.csdn.net/djrm11/article/details/106431170/(对比太多了)

8、Eureka和Nacos区别(面试题)

CAP理论
C一致性,A高可用,P分区容错性

eureka只支持AP

nacos支持CP和AP两种
nacos是根据配置识别CP或AP模式,如果注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Naocs集群对这个client节点效果就是AP,反之则是CP,即不是临时节点

false为永久实例,true表示临时实例开启,注册为临时实例
spring.cloud.nacos.discovery.ephemeral=true
1
2
连接方式
nacs使用的是netty和服务直接进行连接,属于长连接
eureka是使用定时发送和服务进行联系,属于短连接
操作实例方式
nacos:提供了nacos console可视化控制话界面,可以对实例列表进行监听,对实例进行上下线,权重的配置,并且config server提供了对服务实例提供配置中心,且可以对配置进行CRUD,版本管理

eureka:仅提供了实例列表,实例的状态,错误信息,相比于nacos过于简单

自我保护机制
相同点:保护阈值都是个比例,0-1 范围,表示健康的 instance 占全部instance 的比例。

不同点:

1)保护方式不同

Eureka保护方式:当在短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enable-self-preservation: false)

Nacos保护方式:当域名健康实例 (Instance) 占总服务实例(Instance) 的比例小于阈值时,无论实例 (Instance) 是否健康,都会将这个实例 (Instance) 返回给客户端。这样做虽然损失了一部分流量,但是保证了集群的剩余健康实例 (Instance) 能正常工作。

2)范围不同

Nacos 的阈值是针对某个具体 Service 的,而不是针对所有服务的。但 Eureka的自我保护阈值是针对所有服务的。