Dubbo

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

Dubbo RPC原理及调用流程

这篇文章讲的挺好:点击这里参考

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值