Dubbo
创始人
2024-02-15 08:44:54
0

致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案在这里插入图片描述
使用zookeeper作为注册中心registry

dubbo.config.annotation下相关注解

  • @Service:被该注解修饰的类,会对外发布,包括IP、端口、路径到注册中心
  • @Reference:远程注入,完成以下操作:
    1. 从zookeeper注册中心获取对应类的访问url
    2. 进行远程调用RPC
    3. 将结果封装为一个代理对象,给变量进行赋值

dubbo admin

监控平台默认用户名密码:root/root

序列化

  • implements Serializable
  • transient:被该关键字修饰的变量不会被序列化
  • 生产者和消费者传输对象,需要在一个独立的模块(工程)中定义,降低耦合度

地址缓存

  • 先问个问题:如果注册中心挂了,消费者是否可以正常访问服务提供者?
  • 答案是可以的,因为dubbo服务消费者在第一次调用时,会将服务提供者的地址缓存到本地,以后再调用就不用访问注册中心。
  • 当服务提供者地址发生变化时候,注册中心会主动通知服务消费者,即执行上方Dubbo架构图的3操作Notify。

超时与重试

高峰流量下可能会存在问题:

  1. 某个服务消费者在调用提供者时,由于一些原因发生了阻塞、等待的情况,消费者会一直等待提供者响应。
  2. 大量请求同时请求这个链路调用,会造成大量的线程堆积,从而形成雪崩。

Dubbo如何解决请求超时?

  • 设置超时时间,在这个时间内,如果无法完成访问或者服务提供者无法响应消息,则自动断开连接。
  • 超时时间默认1000ms
  • 服务提供方注解上配置超时:@Service(timeout=3000)
  • 服务消费方注解上配置超时:@Reference(timeout=2000)
  • 如果服务消费方和提供方同时配置了超时时间,那么肯定以时间较短者作为超时判断标准。

Dubbo如何解决超时重试?

  • 使用retires定义重试次数:@Service(timeout = 3000, reties = 3),表示3秒内重试3次,加上第一次请求,一共是4次。
  • 如果不定义reties,默认的重试次数的2次。

多版本

灰度发布:加入有三个服务消费者C1 C2 C3,同时调用一个服务提供者P,如果P升级成P2,那么可以考虑先让一部分消费者访问P2,如果一段时间没有问题了,再把其他所有消费者全部引流至P2。
这时候就牵扯到版本的概念了,version。怎么配置版本?

  1. 配置服务提供方P:@Service(version = "V1")
  2. 配置服务提供方P2:@Service(version = "v2")
  3. 配置服务消费者C1:@Reference(version = "v2")

负载均衡

在Dubbo中,服务提供者的负载均衡分为四种类型,默认是Random:

  1. Random:按照权重随机,符合正态分布,权重高的访问概率更大。
  2. RoundRobin:安权重轮询,例如三台机器的权重分别为100/200/100,那么访问顺序可能为:1、2、3、2
  3. LeastActive:最少活跃调用次数,相同活跃数的随机, 消费者会记录各个消费提供者最后一次响应所需的时间,选择响应时间最短的进行访问。
  4. ConsistentHash:一致性Hash,相同的参数总是会发到同一个服务提供者

接下来仅简单演示Random怎么设置:

  • 服务提供者P1:@Service(weight = 100 )
  • 服务提供者P2:@Service(weight = 200 )
  • 服务提供者P3:@Service(weight = 100 )
  • 消费者C:@Reference(loadbalance="random")

集群容错模式

  • Failover Cluster(默认):失败重试,当出现失败,尝试连接集群中其他服务,默认重试2次,读取retries配置,一般用在读操作。
  • Failfast Cluster:快速失败,仅发起一次调用,失败立即报错,通常用于写操作。
  • Failsafe Cluster:安全失败,出现异常时候,直接忽略,返回一个空结果,常用于写入日志操作等。
  • Failback Cluster:失败自动回复,后台记录失败请求,定时重发。
  • Forking Cluster:并行调用多个服务器,只要一个成功即返回。
  • Broadcast Cluster:广播调用所有提供者,逐个调用,任意一个报错就报错。
    定义容错模式的语法:@Reference(cluster = "failover")

服务降级

  • mock="force:return null"表示消费方如果调用该服务,直接就返回null,压根就不发起远程调用,可以用来屏蔽一些不重要的服务,如日志服务等。
  • mock="fail:return null"表示如果调用出错,返回null,不抛出异常,用来容忍不重要服务不稳定时对调用放的影响。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...