Dubbo 知识点

1. 为什么要用 Dubbo

随着服务化的进一步发展,服务越来越多, 服务之间的调用和依赖关系也越来越复杂,诞生了面向 服务的架构体系(SOA) 也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处 理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样 为分布式系统的服务治理框架就出现了

2.Dubbo 是什么? 

Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方 案, 可以和 Spring 框架无缝集成。

3.Dubbo 的使用场景有哪些? 

  • 透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵 入。
  • 软负载均衡及容错机制:可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP址,并且能够平滑添加或删除服务提供者。

4. Dubbo 核心功能有哪些?  

  • Remoting:网络通信框架,提供对多种NIO框架抽象封装,包括同步转异步请求-响应模式 的信息交换方式。
  • Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均 衡,失败容错,地址路由,动态配置等集群支持。
  • Registry:服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透 明,使服务提供方可以平滑增加或减少机器。

5. Dubbo 核心组件有哪些?  

  • Provider:暴露服务的服务提供方
  • Consumer:调用远程服务消费方
  • Registry:服务注册与发现注册中心
  • Monitor:监控中心和访问调用统计
  • Container:服务运行容器

Dubbo 服务器注册与发现的流程 

  1. 服务容器Container负责启动,加载,运行服务提供者。
  2. 服务提供者Provider在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者Consumer在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心Registry返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者Consumer,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者Consumer和提供者Provider,在内存中累计调用次数和调用时间,定时每分钟发送一 次统计数据到监控中心Monitor

6.Dubbo Dubbox 之间的区别?  

Dubbox 是继 Dubbo 停止维护后,当当网基于 Dubbo 做的一个扩展项目,如加了服务可 Restful
调用,更新了开源组件等。

7.Dubbo Spring Cloud 有什么哪些区别?  

  • Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于 TCP 协议传输的,配合以 Hession 序列化完 RPC 通信。
  • Spring Cloud 是基于 Http 协议 Rest 接口调用远程过程的通信,相对来说 Http 请求会有更大的报文,占的带宽也会更多。但是 REST 相比 RPC 更为灵活,服务提供方和调用方的依赖只依靠一纸 契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适,至于注重通 信速度还是方便灵活性,具体情况具体考虑

8.Dubbo 有哪些注册中心? 

  • Multicast 注册中心:Multicast 注册中心不需要任何中心节点,只要广播地址,就能进行服务注册和发现,基于网络中组播传输实现。
  • Zookeeper 注册中心:基于分布式协调系统 Zookeeper 实现,采用 Zookeeper watch 机制实 现数据变更。
  • Redis 注册中心:基于 Redis 实现,采用 key/map 存储,key 存储服务名和类型,map key 储服务 urlvalue 服务过期时间。基于 Redis 的发布/订阅模式通知数据变更。
  • Simple 注册中心。
         推荐使用 Zookeeper 作为注册中心

9.Dubbo 的注册中心集群挂掉,发布者和订阅者之间还能通信么?

可以通讯。启动 Dubbo 时,消费者会从 Zookeeper 拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用

10.Dubbo集群提供了哪些负载均衡策略?  

  • Random LoadBalance: 随机选取提供者策略,有利于动态调整提供者权重。截面碰撞率高,调用 次数越多,分布越均匀。
  • RoundRobin LoadBalance: 轮循选取提供者策略,平均分布,但是存在请求累积的问题。
  • LeastActive LoadBalance: 最少活跃调用策略,解决慢提供者接收更少的请求。
  • ConstantHash LoadBalance: 一致性 Hash 策略,使相同参数请求总是发到同一提供者,一台机 器宕机,可以基于虚拟节点,分摊至其他提供者,避免引起提供者的剧烈变动。

        默认为 Random 随机调用 

11.Dubbo的集群容错方案有哪些?  

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

        默认的容错方案是 Failover Cluster 失败自动切换

 12.核心的配置

 

13.. Dubbo 服务降级,失败重试怎么做? 

可以通过 dubbo:reference 中设置 mock=“return null” mock 的值也可以修改为 true ,然后再 跟接口同一个路径下实现一个 Mock 类,命名规则是 接口名称 +Mock” 后缀。然后在 Mock 类里 实现自己的降级逻辑 

14.什么是RPC 

RPC Remote Procedure Call Protocol )远程过程调用协议,它是一种通过网络从远程计算机程 序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC 使得程序能够像访问本地系统资 源一样,去访问远端系统资源。比较关键的一些方面包括:通讯协议、序列化、资源(接口)描述、服务框架、性能、语言支持等。

 

简单的说, RPC 就是从一台机器 ( 客户端 ) 上通过参数传递的方式调用另一台机器 ( 服务器 ) 上的一个
函数或方法 ( 可以统称为服务 ) 并得到返回的结果。

15.PRC架构组件 

 一个基本的RPC架构里面应该至少包含以下4个组件:

1 、客户端( Client : 服务调用方(服务消费者)
2 、客户端存根( Client Stub : 存放服务端地址信息,将客户端的请求参数数据信息打包成网络消 息,再通过网络传输发送给服务端
3 、服务端存根( Server Stub : 接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理
4 、服务端( Server : 服务的真正提供者

         

具体调用过程:
1 、服务消费者( client 客户端)通过调用本地服务的方式调用需要消费的服务;
2 、客户端存根( client stub )接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体;
3 、客户端存根( client stub )找到远程的服务地址,并且将消息通过网络发送给服务端;
4 、服务端存根( server stub )收到消息后进行解码(反序列化操作);
5 、服务端存根( server stub )根据解码结果调用本地的服务进行相关处理;
6 、本地服务执行具体业务逻辑并将处理结果返回给服务端存根( server stub );
7 、服务端存根( server stub )将返回结果重新打包成消息(序列化)并通过网络发送至消费方;
8 、客户端存根( client stub )接收到消息,并进行解码(反序列化);
9 、服务消费方得到最终结果;
而RPC框架的实现目标则是将上面的第2-10步完好地封装起来,也就是把调用、编码/解码的过程给封装起来,让 用户感觉上像调用本地服务一样的调用远程服务

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值