当前位置:首页 > 后端开发 > dubbo详解

dubbo详解

7个月前 (05-22)60

dubbo是什么

dubbo是一个高性能轻量级开源的RPC框架。主要功能分为三点:

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

什么是RPC及其原理

  • RPC(Remote Procedure Call):部署在不同的机器的服务需要进行方法调用,通过RPC具体的实现则可以完成远程过程的调用,而不需要具体了解协议
  • 原理:在客户端的底层和服务端的底层分别进行封装,客户端调用客户端的封装模块,找到服务端的地址,并进行协议的封装,调用服务端封装模块,服务端封装模块调用本地服务,并进行返回,客户端封装模块进行封装返回给客户端

dubbo相对于http请求的好处

  1. 负载均衡,可以将统一服务部署不同机器
  2. 服务注册和发现,能够高效地找到需要的服务地址
  3. 服务降级的功能,能够对服务进行容错
  4. 可以监控服务的调用状态,根据统计情况,对服务进行治理

分布式

  • 分布式:将应用根据不同功能拆分成不同服务
  • 分布式好处:1.团队开发效率更高,每个小团队负责一个服务;2.服务切分后,更好扩展和维护及复用;3.分布式部署后能够更好地治理和分配资源;4.降低组件的复杂度,提高运行效率,增加可靠性和容错性;
  • 分布式缺点:1.学习成本增加;2.服务间调用的网络传输损耗;3.数据传输的安全性问题;4.故障排除定位困难;

dubbo各节点及作用

  • Container:运行服务的容器;
    1. 负责启动加载提供者
  • Registry:注册中心;
    1. 接受注册和订阅;
    2. 当服务有变更时,基于长连接将变更数据推送给消费者;
  • Provider:服务提供者;
    1. 向服务注册中心注册服务,暴露自己的服务;
    2. 内存中累计调用次数和调用时间,定时每分钟将统计数据发送给监控中心;
  • Consumer:服务消费者;
    1. 向服务注册中心订阅服务,并将服务的地址注册表缓存本地;
    2. 服务调用时,根据本地缓存注册表进行服务调用;
    3. 服务调用时,会根据负载均衡策略选择服务调用;
    4. 服务调用时,有容错机制的保障;
    5. 内存中累计调用次数和调用时间,定时每分钟将统计数据发送给监控中心;
  • Monitor:
    1. 统计服务调用的调用次数和调用时长;

dubbo详解 _ Java侠

dubbo发布和消费的过程

  • dubbo发布:
    1. 根据发布的接口(服务配置)通过ProxyFactory类的getInvoker生成一个AbstractProxyInvoker实例
    2. 通过Invoker转换到Exporter,将服务根据特定的协议对外开放
      dubbo详解 _ Java侠
  • dubbo订阅:
    1. 根据订阅的接口(引用配置),根据特定的协议生成相应的Invoker
    2. 通过ProxyFactory将Invoker生成代理的引用
    3. 根据代理对象进行方法的调用
      dubbo详解 _ Java侠

Dubbo暴露服务和引用服务的实现源码分析

dubbo容错

  • 原理:在调用过程中根据配置选择对应的容错对象,进行调用
  • 容错模式:
    • 重试(Failover Cluster):根据配置次数进行重试,默认2次;用于读操作或者幂等写操作;
    • 快速失败(Failfast Cluster):失败立即报错;用于非幂等写操作;
    • 失败安全(Failsafe Cluster):异常直接忽略;如写审计日志;
    • 失败自动恢复(Failback Cluster):后台记录失败请求,后期进行重试;用于通知操作;
    • 并行(Forking Cluster):并发调用多个服务,一个成功及返回;用于具有对实时性读有要求的场景,但浪费资源;
    • 广播(Broadcast Cluster):逐个调用所有服务,一台报错则全部报错;用于通知所有提供者更新本地缓存或日志等信息;
  • 实现:
    • 提供方:
    <dubbo:service cluster="failsafe" />
- 消费方:
    <dubbo:reference cluster="failsafe" />

Dubbo剖析-集群容错

dubbo负载均衡策略

  • 随机(Random LoadBalance):基于权重随机选择调用(默认)
  • 权重轮询(RoundRobin LoadBalance):基于权重轮流调用
  • 最少活跃数(LeastActive LoadBalance):活跃数指服务提供者调用前后的调用时长,也就是根据服务提供者的性能进行调用
  • 一致性hash(ConsistentHash LoadBalance):对请求参数求hash值,根据hash值调用到相应的服务提供者,好处是同类请求能够在一个服务节点响应
  • 实现:
    • 服务端服务级别
    <dubbo:service interface="..." loadbalance="roundrobin" />
- 客户端服务级别
    <dubbo:reference interface="..." loadbalance="roundrobin" />
- 服务端方法级别
    <dubbo:service interface="..."> <dubbo:method name="..." loadbalance="roundrobin"/> </dubbo:service>
- 客户端方法级别
    <dubbo:reference interface="..."> <dubbo:method name="..." loadbalance="roundrobin"/> </dubbo:reference>

dubbo常用协议

  • Dubbo:Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
  • RMI:RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。
  • Hessian:Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。
  • HTTP:采用 Spring 的 Http Invoker 实现。
  • Webservice:基于 CXF 的 frontend-simple 和 transports-http 实现。

dubbo与spring cloud区别

  1. spring cloud集成的组件更多,本身含有注册中心,而dubbo的注册中心是zookeeper
  2. 服务和注册中心间的连接协议不同,spring cloud是http,而dubbo的协议更加多样,基于长连接的方式交互,通过netty(Netty架构原理,不怕你看不懂!)的nio方式使调用性能更优
  3. spring cloud通过心跳通知服务的消费者,而zookeeper通过长连接通知服务的变更
  4. dubbo是RPC,依赖关系更大,需要接口相同,而spring cloud是REST方式,更为轻量化,但是容易导致接口定义和文档不一致,但可通过swagger解决

spring cloud

参考

Dubbo和Spring Cloud微服务架构比较
dubbo.md
Dubbo面试题汇总

作者:杭州剃须刀
来源链接:https://blog.csdn.net/SeanTandol/article/details/88577468

标签: Dubbo

“dubbo详解” 的相关文章

深度解剖dubbo源码

深度解剖dubbo源码

-----------学习dubbo源码,能给你带来什么好处?----------- 1.提升SOA的微服务架构设计能力    通过读dubbo...

从零开始教你dubbo自定义负载均衡策略

从零开始教你dubbo自定义负载均衡策略

前言:官网文档有一重要章节SPI,建立好好阅读,为本文做铺垫 1.搭建工程,结构如下: dubbo-learn      &...

Dubbo 的搭建

Dubbo 的搭建

一、Dubbo中Provider搭建 新建Maven Project, 里面只有接口(dubbo-service) 1.1 为什么这么做?   &nb...

Dubbo 学习笔记总结

Dubbo 学习笔记总结

Dubbo 1.什么是RPC? RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机...

新版 dubbo-admin 安装配置

新版 dubbo-admin 安装配置

资源的下载 https://github.com/apache/dubbo 下载完毕以后解压,主要文件夹有这几个 最新版本的dub...

Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」

Spring Cloud与Dubbo的完美融合之手「Spring Cloud Alibaba」

很早以前,在刚开始搞Spring Cloud基础教程的时候,写过这样一篇文章:《微服务架构的基础框架选择:Spring Cloud还是Dubbo?》,可能不少读者也都看过。之...

DUBBO应用

DUBBO应用

1.现状———解决方案 在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进...

hadoop23---自定义rpc架构(duboo的原理)

hadoop23---自定义rpc架构(duboo的原理)

     作者:哈哈呵h 来源链接:https://www.cnblogs.com/yaowen/p/...

dubbo源码搭建

dubbo源码搭建

1. 下载opensesame源码 地址https://github.com/alibaba/opensesame 可以使用git clone或者直接下载zip包...

Dubbo 性能调优经历(一)

Dubbo调优经历 原型阶段,主要影响如下: 服务的日志I/O 会影响性能。 数据库的I/O 会严重影响性能。 服务的部署情况 会影响性能。...