dubbo experience

2024-01-05 22:32
文章标签 dubbo experience

本文主要是介绍dubbo experience,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 网络、netty 相关

https://juejin.cn/post/6844903704668160008

https://www.cnblogs.com/awan-note/p/14391973.html

https://www.cnblogs.com/awan-note/p/14595967.html

rpc 框架对比普通http 调用的区别

rpc 长连接

Rpc和Http的区别 - 知乎

 dubbo 结构,整个过程。实现rpc 协议的一种方式。原理。

dubbo spi

java spi:就是约定一个目录,根据接口名去那个目录找到文件,文件解析得到实现类的全限定名,然后循环加载实现类和创建其实例。

缺点:

Java SPI 在查找扩展实现类的时候遍历 SPI 的配置文件并且将实现类全部实例化,假设一个实现类初始化过程比较消耗资源且耗时,但是你的代码里面又用不上它,这就产生了资源的浪费。

所以说 Java SPI 无法按需加载实现类。

因此 Dubbo 就自己实现了一个 SPI,让我们想一下按需加载的话首先你得给个名字,通过名字去文件里面找到对应的实现类全限定名然后加载实例化即可。

Dubbo 就是这样设计的,配置文件里面存放的是键值对。

dubbo spi 配置如图:

java spi 配置如图:

参考:阿里面试真题:Dubbo的SPI机制_敖丙-CSDN博客_dubbo spi

dubbo 的服务暴露机制

(阿里面试官:你知道Dubbo的服务暴露机制么?_敖丙-CSDN博客)

服务暴露的全流程:

1. 从代码的流程来看

  • 第一步是检测配置,如果有些配置空的话会默认创建,并且组装成 URL 。
  • 第二步是暴露服务,包括暴露到本地 的服务和远程 的服务。
  • 第三步是注册服务至注册中心。

2. 对象构建转换的角度

  • 第一步是将服务实现类转成 Invoker。
  • 第二部是将 Invoker 通过具体的协议转换成 Exporter。

根据配置,将配置内容委托给解析类,本质上就是生成了Spring 的BeanDefinition,然后利用Spring 最终创建对应的对象。

底层执行doExport() 方法,

dubbo 服务引用过程:字节面试:dubbo的服务引用过程_敖丙-CSDN博客_dubbo服务引入

dubbo 服务调用过程:面试杀手锏之Dubbo服务调用过程_敖丙-CSDN博客_dubbo调用流程

dubbo 一系列

  1. 基础知识
    1. dubbo 作用
      1. 透明化调用
      2. 负载均衡、容错机制
      3. 服务自动注册与发现
    2. 核心功能
      1. Remoting:网络通信框架
      2. Cluster:服务框架
      3. Registry:服务注册
  2. 架构设计

    1. 核心组件
      provider
      consumer
      registry
      monitor
      container
    2. 注册与发现流程
      1. container 负责启动、加载、运行provider
      2. provider 在启动时,向注册中心注册自己提供的服务
      3. consumer 在启动时,向注册中心订阅自己所需的服务
      4. registry 返回服务提供者列表给消费者,如有变更,注册中心基于长连接推送变更数据给消费者
      5. consumer 从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果失败,再选另一台
      6. provider 和consumer 在内存中累计调用次数和调用时间,定时没分钟发送一次统计数据到监控中心monitor
    3. dubbo 整体分层
      1. service(接口服务)与业务逻辑相关,根据provider 和consumer 的业务,设计对应的接口和实现
      2. config(配置层)对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心
      3. porxy(服务代理层)
      4. registry(服务注册层)
      5. cluster(路由层)
      6. monitor(监控层)
      7. protocal(远程调用层)
      8. exchange(信息交换层)
      9. transport(网络传输层)
      10. serialize(数据序列化层)
    4. dubbo monitor 实现原理
      感觉不重点?
    5. dubbo 和spring cloud 的关系
      dubbo 侧重于服务的调用、流量分发、流量监控和熔断
      dubbo 定位服务治理
      spring cloud 诞生于微服务架构时代,考虑微服务治理方方面面
      spring cloud 是为了打造一个生态
    6. dubbo 和spring cloud 的区别
      1. dubbo 使用netty 的nio 框架,基于tcp 协议传输,配合hession 序列化完成rpc 通信
      2. Spring Cloud 是基于 Http 协议 Rest 接口调用远程过程的通信
        但是rest 相比rpc 更为灵活
         
    7. dubbo 和dubbox 的区别
      dubbox 是当当网基于dubbo 做的,加了服务可restful 调用,更新了开源组件等
  3. 注册中心
    1. dubbo 有哪些注册中心
      1. multicast
      2. zk。采用zk 的watch 机制来实现数据变更。
      3. redis。采用key/map 存储,key 存储服务名和类型,map 中的key 存储服务url,value 存服务的过期时间。基于redis 的发布/订阅模式通知数据变更。
      4. simple
    2. Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?
      可以通讯。启动 Dubbo 时,消费者会从 Zookeeper 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用。

  4. 集群

    1. dubbo 集群有哪些负载均衡策略【4 种】。(默认为 Random 随机调用)

      1. Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用次数越多,分布越均匀。
      2. RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题。
      3. LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求。使慢的提供者收到更少请求。

      4. ConstantHash LoadBalance: 一致性 Hash 策略,使相同参数请求总是发到同一提供者,一台机器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动。

    2. dubbo 集群容错方案【6 种】(默认的容错方案是 Failover Cluster)

      1. Failover Cluster:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。
      2. Failfast Cluster:快速失败只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
      3. Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
      4. Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
      5. Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=”2″ 来设置最大并行数。
      6. Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。
  5. 配置
    (关于xml 命名空间、spring schema 都是啥东西:
    https://www.cnblogs.com/mesopotamia/p/4948861.html
    1. dubbo 配置文件如何加载到spirng 中的
      (感觉不重要)
    2. dubbo 超时设置有哪些实现方式
      1. provider 端设置(推荐服务端配置更多,因为提供者必消费者更了解服务的特性)
      2. consumer 端设置(如果consumer 设置了,以consumer 端配置为准,即优先级高)
    3. 服务调用超时怎么办
      1. 默认重试两次(如何实现的)
  6. 通信协议
    1. dubbo 默认使用什么通信框架
      netty
    2. 支持哪些协议
      1. dubbo:单一长连接,NIO 异步通讯,适合大并发、小数据量、消费者远大于服务提供者。传输协议tcp,异步hession 序列化。(默认)
      2. rmi
      3. webservice
      4. http
      5. hessian
      6. memcache
      7. redis。基于redis 实现的rpc 协议
  7. 设计模式
    1. 工厂模式
    2. 装饰器模式
    3. 观察者模式
    4. 动态代理模式
  8. 运维管理
    1. 服务上线怎么兼容旧版本
      使用版本号过渡,不同版本的服务注册到注册中心,版本号不同的服务相互间不引用
    2. dubbo 支持服务降级吗
      通过 dubbo:reference 中设置 mock=“return null”
      也可以设置mock = "true",然后跟接口同一个路径下实现一个mock 类,命名规则是“接口名称  + Mock” 后缀。然后在Mock 类中实现自己的降级逻辑
    3. 如何优雅停机
      通过JDK 的ShutdownHook 来完成的
  9. SPI
    1. dubbo spi 和java spi 的区别
      1. jdk
        1. 一次性加载所有的扩展实现
      2. dubbo

        1. 对 Dubbo 进行扩展,不需要改动 Dubbo 的源码

        2. 延迟加载,可以一次只加载自己想要加载的扩展实现。

        3. 增加了对扩展点 IOC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。

        4. Dubbo 的扩展机制能很好的支持第三方 IoC 容器,默认支持 Spring Bean。

  10. 其他。。。。。。

    1. dubbo 支持分布式事务吗
      不支持,可以通过tcc-transaction 框架实现。通过dubbo 的隐式传参功能,避免对业务代码的入侵。

    2. dubbo 对结果进行缓存
      在Reference 标签添加个true

Dubbo面试题(2020最新版) - 云+社区 - 腾讯云

线程模型 | Apache Dubbo

既然有 HTTP 请求,为什么还要用 RPC 调用? - 知乎

(spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制 - 搬砖的小学生 - 博客园

重点:Dubbo面试题(2020最新版) - 云+社区 - 腾讯云

https://juejin.cn/post/6844904149679603725

https://www.bilibili.com/read/cv4188272

https://www.136.la/jingpin/show-26588.html

dubbo spi 机制

这篇关于dubbo experience的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574365

相关文章

Dubbo学习入门

本文参考自:Dubbo用户手册(中文)http://dubbo.apache.org/books/dubbo-user-book/ 现在的参考文档地址:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html 入门请参考自《Dubbo用户手册(中文)》第一节,在手册第二节说明如何快速启动Dubbo,下面就顺着手册的使用方式,自己搭建一个快

dubbo服务过程

dubbo服务暴露过程 Dubbo通过实现ApplicationListener接口,监听了容器刷新的事件,再容器刷新后调用onApplicationEvent方法,这个是服务暴露的启动点通过识别带目标注解的服务类通过动态代理统一暴露出Invoker,如何通过配置文件以及目标协议(SPI机制)封装成exporter存储起来如果是本地注册,将exporter存入ServiceConfig的缓存,如

Dubbo缓存

是的,Dubbo 可以对服务调用结果进行缓存。通过缓存结果,可以减少重复调用、降低服务提供者的负载,并提高系统的响应速度和吞吐量。Dubbo 内置了多种缓存机制,开发者可以根据不同的业务需求选择合适的缓存策略。 1. Dubbo 结果缓存的工作原理 Dubbo 的结果缓存功能是在服务消费者一侧实现的。当一个服务消费者调用某个服务时,Dubbo 会首先检查本地缓存中是否有该服务的结果。如果缓存中

springboot+dubbo+zk 入门篇(windows单机版)

一、下载安装zk注册中心并启动:     官网地址:http://www.apache.org/dyn/closer.cgi/zookeeper/     我的是zookeeper-3.3.6版本的。下载之后需要修改下文件:进入zk的conf目录。复制下zoo_sample.cfg     这个文件并重命名为zoo.cfg,然后把修改该文件内容,下面是我的,这个只是单机配置: # 心跳时间间隔

dubbo 服务消费原理分析之引用服务配置

文章目录 前言一、服务监听ContextRefreshedEvent1、AbstractApplicationContext.refresh2、AbstractApplicationContext.finishRefresh3、DubboDeployApplicationListener.onApplicationEvent4、DefaultModuleDeployer .referServ

dubbo是什么?,能做什么?以及其工作流程

1.Dubbo是什么?能做什么? Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式服务框架,现已成为Apache基金会孵化项目,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 简单来说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的请求,本质上是个远程服务调用的分布式框架 其核心部

Dubbo依赖包

Dubbo 是一个高性能的 RPC 框架,用于构建分布式服务治理系统。要使用 Dubbo,项目中需要引入一些关键的依赖包。这些依赖包提供了 Dubbo 的核心功能、服务注册与发现、网络通信、序列化等能力。 一、Dubbo 核心依赖包 Dubbo 的核心依赖包包含了实现 RPC 功能的基础组件,如服务暴露、调用、负载均衡、容错机制等。以下是 Dubbo 必须依赖的核心包: 1. dubbo

zookeeper/dubbo使用记录

zookeeper版本号:zookeeper-3.4.6 在windows上使用的时候将 1,conf目录下的zoo_sample.cfg名字修改为zoo.cfg,里面内容可以不变 2,执行bin目录下的zkServer.cmd 这样zookeeper服务就启动了。 自己在本地使用zookeeper与dubbo时行接口调用时使用的时需要的部分jar包: dubbo-

dubbo之 消费者用api方式注册消费者,服务者用xml方式注册服务

场景: 我遇到的需求是:需要 服务端用xml的方式配置服务者,而消费端用api的方式配置消费者, 而官方文档只有如下三种方式,而我这种算是xml+api的方式吧(混合模式?) dubbo的实现方式有三种: 1、spirng的xml配置文件(官方文档有) 2、通过dubbo的api方式(官方文档不详细) 3、通过注解的方式。 于是不知道能不能这样搞啊,但逻辑肯定没问题嘛,因为 前后端分

Dubbo架构与底层实现

一、Dubbo的设计角色 (1)系统角色 Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。1 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: 服务运行容器。 (2)调用关系 服务容器负责启动,加载,运行服务提供者。 服务提供者在启动时,向注册中心注册自己提供的