Dubbo
创始人
2024-02-15 10:03:11

致力于提供高性能和透明化的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,不抛出异常,用来容忍不重要服务不稳定时对调用放的影响。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...