dubbo知识

Dubbo

Dubbo是一款高性能Java RPC框架。采用全Spring配置方式,透明化接入应用。Spring只需加载Dubbo配置即可。(也可以通过api方式进行调用)。(服务接口单独打jar,供服务提供方和服务消费方共享)

三大核心能力

  1. 面向接口的远程调用
  2. 智能容错和负载均衡
  3. 服务自动注册和发现

Dubbo结构

  • Provider,暴露服务的服务提供方。
  • Consumer,调用远程服务的服务消费方。
  • Registry,服务注册与发现的注册中心。(仅负责地址注册与查找,不转发请求,压力小)
  • Montior,统计服务的调用次数和调用时间的监控中心。
  • Container,服务运行容器。
  1. 服务容器负责启动、加载、运行服务提供者
  2. 服务提供者在启动时,向注册中心注册自己提供的服务
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送消息给消费者
  5. 服务消费者,从提供者地址列表中,基于负载均衡算法,选一台提供者进行调用,如果调用是失败,再选一台
  6. 服务提供者和消费者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
  • 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
  • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
  • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
  • 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

特性

  1. 面向接口代理的高性能RPC调用(服务以接口为粒度,为开发者屏蔽远程调用底层细节)
  2. 服务自动注册与发现(支持多种注册中心服务,服务实例上下线感知)
  3. 智能负载均衡(内置多种负载均衡策略,可感知节点状况)
  4. 可视化的服务治理与运维(提供丰富服务治理、运维工具)

服务提供方

服务提供方通过配置声明、暴露服务。

需要的属性有

  • 服务注册中心 <dubbo:registry address="">(将服务地址暴露到服务注册中心)
  • 提供方应用信息 <dubbo:application name="">(用于计算依赖关系)
  • 配置暴露到协议以及端口 <dubbo:protocol name="" port="">
  • 声明要暴露的服务接口 <dubbo:service interface="" ref="">

服务消费方

通过spring配置引用远程服务

  • 服务注册中心 <dubbo:registry address="">(发现服务注册地址)
  • 消费方应用信息 <dubbo:application name="">(用于计算依赖关系)
  • 生成远程服务代理,可以和本地bean一样去使用 <dubbo:reference id="" interface="">

配置覆盖

以timeout(超时)为例(建议由服务提供方配置超时)

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。

动态配置中心

  1. 外部化配置。启动配置的集中式存储 (简单理解为dubbo.properties的外部化存储)。
  2. 服务治理。服务治理规则的存储与通知。

<dubbo:config-center address="zookeeper://127.0.0.1:2181"/>

外部配置拥有最高优先级,会覆盖本地配置

zookeeper,默认所有的配置都在 /dubbo/config 节点下

/dubbo/config/dubbo 全局配置

/dubbo/config/application 应用配置

启动时检查

通过配置check="true",不可用时会抛出异常,阻止spring初始化完成

集群容错

当集群调用失败时,dubbo提供了多种容错方案,缺省为重试

  • Failover Cluster 失败自动切换,重试其他服务器(重试会带来更长延迟),可设置重试次数(不包含第一次),通常用于读操作
  • Failfast Cluster 快速失败,只发器一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增
  • Failsafe Cluster 失败安全,出现异常时,直接忽略。通常用于学入审计日志等操作
  • Failback Cluster 失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作
  • Forking Cluster 并行调用多个服务器,只要一个成功即返回。会消费更多服务资源。可通过fork来设置最大并行数
  • Broadcast Cluster 广播调用所有提供者,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地信息

负载均衡

缺省为随机调用

  • Random LoadBalance 随机,可按照权重设置随机概率
  • RoundRobin LoadBalance 轮询,按公约后等权重设置轮询比
  • LeastActive LoadBalance 最少活跃调用数,相同活跃数随机,使慢的提供者收到更少的请求
  • ConsistentHash LoadBalance 一致性hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者。

服务降级

为什么进行服务降级?

在微服务架构中,服务调用可能会遇到以下两种情况:

  • 多个服务之间调用由于服务未启动或网络延时、不通,导致远程调用失败
  • 服务请求量过大,需要停止部分服务以保证核心业务的正常运行

当重试多次后,服务功能还是异常,就直接进行降级

dubbo提供了mock配置,可以很好的实现dubbo服务降级

1、在远程调用异常时,服务端直接返回一个固定字符串

<dubbo:reference id="xxxService" interface="com.x..service.xxxxService" check="false" mock="return 123456..." />

使用此种方式配置,可以避免由于服务调用不了而出现异常

2、可以在dubbo-admin中进行配置

3、自定义mock业务处理类,需实现RPC接口,xxxServiceMock,如果调用失败会调用自定义的mock实现

具体实施

  • 页面拒绝服务(页面提示由于服务器繁忙,暂停服务,然后跳转到一个静态页面)
  • 服务接口拒绝服务
  • 延迟处理(将数据记录到队列或日志,服务恢复后执行)
  1. 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;
  2. 管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)

服务熔断,当服务不可用达到一定阀值,就会进行熔断,直接返回某个内容

服务降级,当请求过多,将一些边缘服务进行降级,直接返回内容

服务限流

为了防止某个消费者的QPS或者所有消费者的QPS总和突然飘升而导致重要服务时效,系统对访问流量进行了控制,这种对集群的保护措施称为服务限流。

限流方式可以分为两大类:

  1. 直接限流:通过对连接数量直接进行限制来达到限流目的
  2. 间接限流:通过对一些非连接数量设置来达到限流目的

直接限流

1、executes直接限流(服务提供者)【方法并行数】

可以设置接口级别或方法级别,限制其并发执行数

<dubbo:service interface="com.foo.BarService" executes="10" />

2、accptes限流(服务提供者)【协议连接数】

用于指定协议的连接数量进行限制

3、actives限流(提供者和消费者都可以进行设定)【长链接,短链接数】

<dubbo:service interface="com.foo.BarService" actives="10" />
  • 长连接:表示当前长连接最多可以处理的请求个数。与长连接的数量没有关系
  • 短连接:表示当前服务可以同时处理的短连接数量

4、connections(限流提供者和消费者都可以进行设定)【长链接,短链接数】

间接限流

1、延迟连接(消费端设置,只有真正调用提供者使,才建立连接)

2、粘性连接

3、负载均衡配置(处理快的电脑接受更多的请求)

服务链路跟踪

分布式系统由大量的服务组成,服务之间调用关系,随着系统的增长,不清晰,所以需要服务链路图

查看每个接口每天被调用的次数,了解系统压力后再进行扩容和优化

https://www.cnblogs.com/wx170119/p/10232141.html

线程模型

I/O线程,配置在netty连接点的用于处理网络数据的线程。dubbo默认采用的是长连接的方式,即一个consumer和一个provider之间只会建立一条链接。I/O线程的工作就是编码和解码

如果事件处理的逻辑能快速完成,则直接在I/O线程上处理会更快,因为减少了线程池的调度

但如果处理慢,就派发到线程池。

http://dubbo.apache.org/zh-cn/docs/user/demos/thread-model.html

直连提供者

在开发及测试环境下,经常需要绕过注册中心来连接指定的服务提供方(点对点连接)

多协议

dubbo配置允许多协议,在不同服务上支持不同协议或者同以服务上支持多种协议。比如:大数据用短链接协议,小数据大并发用长连接协议。

多注册中心

Dubbo 支持同一服务向多注册中心同时注册,或者不同服务分别注册到不同的注册中心上去,甚至可以同时引用注册在不同注册中心上的同名服务

服务分组

当一个接口有多种实现时,可以用group区分

多版本

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用

主要性能

消费者异步调用,提供者异步执行,从而快速响应

事件通知,在调用接口前,后,异常时进行通知

并发控制,服务器端接口下的每个方法并发执行不能超过10个线程

可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值