dubbo原理

news2024/11/15 17:53:57

目录

dubbo原理

1、RPC原理

2、netty通信原理

3、dubbo原理

1、dubbo原理 -框架设计 

2、dubbo原理 -启动解析、加载配置信息

3、dubbo原理 -服务暴露

4、dubbo原理 -服务引用

5、dubbo原理 -服务调用


dubbo原理

1RPC原理

 

一次完整的RPC调用流程(同步调用,异步另说)如下:

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~8这些步骤都封装起来,这些细节对用户来说是透明的,不可见的。

2、netty通信原理

Netty是一个异步事件驱动的网络应用程序框架, 用于快速开发可维护的高性能协议服务器和客户端。它极大地简化并简化了TCP和UDP套接字服务器等网络编程。

BIO:(Blocking IO)

 

NIO (Non-Blocking IO)

 

Selector 一般称 为选择器 ,也可以翻译为 多路复用器,

Connect(连接就绪)、Accept(接受就绪)、Read(读就绪)、Write(写就绪)

Netty基本原理:

 

3、dubbo原理

1、dubbo原理 -框架设计 

 

  1. config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  2. proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  3. registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService
  4. cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance
  5. monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
  6. protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
  7. exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  8. transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
  9. serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

2、dubbo原理 -启动解析加载配置信息

 

3、dubbo原理 -服务暴露

 

4、dubbo原理 -服务引用

 

5、dubbo原理 -服务调用

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试培训之写给要学习自动化测试的同学的建议

基于我的经验,给你6条实用建议 1、先学习编程语言,然后再接触自动化工具。 语言选择上Java或者Python都是可以的,可以先从Python入手,之后再开始Java。在学习语言的过程中,一定要忘掉你是做测试的,把自己…

leetcode 698. 划分为k个相等的子集-状态压缩+记忆搜索的一步步实现

题目 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。 示例 输入: nums [4, 3, 2, 3, 5, 2, 1], k 4 输出: True 说明: 有可能将其分成 4 个子集(5&…

利用OpenCV的函数LUT()对矩阵的数据进行查表映射

利用OpenCV的函数LUT()对矩阵的数据进行查表映射 LUT是Look Up Table 的缩写,意为查表映射。 OpenCV的函数LUT()能实现图像灰度值或者说矩阵元素值的查表映射功能。 函数LUT()的C原型如下: void cv::LUT(InputArray src,InputArray lut,OutputArray …

XStream常用注解学习

XStream中文教程:https://www.wenjiangs.com/doc/iyx6stww 参考博客:https://www.jb51.net/article/201309.htm 用在xml中,常用注解: XStreamAliasType(value“要修改成的全限定名”): 包名修改 XStreamAlias(“user”) : 修改类,…

力扣hot100——第5天:22括号生成、23合并K个升序链表、31下一个排列

文章目录1.22括号生成1.1.题目1.2.题解2.23合并K个升序链表2.1.题目2.2.解答3.31下一个排列3.1.题目3.2.解答1.22括号生成 参考:力扣题目链接;题解1,题解2 1.1.题目 1.2.题解 这道题目是使用递归的方法来求解,因为要求解所有的…

这个macOS神器,让爱怀旧的人直呼:“爷青回!”

写在前面 Hello,大家好,我们又见面了。 停止更新了两周多,本来打算荒废这个CSDN的,但对写文章的热爱又逼着我继续写…… 这次我们要推荐一个macOS神器,叫“Aqua Menu Bar”。 以后永远不写水文了,告别CS…

AJAX异步请求解决跨域问题的三种方式

一 什么是跨域 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的…

移动应用测试场景的五个重点

移动应用程序测试在移动开发生命周期中至关重要。开发人员和应用程序测试人员在上线之前应该考虑不同的移动应用程序测试场景。考虑到每天发布的应用程序数量,这一点尤为重要。根据 Statista 的数据,2020 年全球移动应用下载量已增至 2180 亿次。这导致了…

通过.sh文件快捷部署jar包到服务器上

参考博客:https://blog.csdn.net/qq_43382350/article/details/125008727 直接写一个脚本文件,每次运行这个文件就可以通过.sh文件快捷部署jar包到服务器上。 在合适的文件夹下创建脚本文件 vim start.sh 内容如下(三个jar包分别放置在a1、a2、a3文件夹…

SAR雷达系统反设计及典型目标建模与仿真实现研究——目标生成与检测(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

白话强化学习(理论+代码)

文章目录前言强化学习概述案例alphaGo无人驾驶why强化学习特点基本理论部分基本概念马尔可夫模型马尔可夫链案例马尔科夫决策过程累计回报概念及其求取流程案例算法目的Q-Leaning真实值与预测值案例离线学习Sarsa选择动作函数代码DQN流程预估“表”与实际“表”编码坑点环境修改…

你的业务代码中Spring声明式事务处理正确了吗?

Spring 针对 Java Transaction API (JTA)、JDBC、Hibernate 和 Java Persistence API(JPA) 等事务 API,实现了一致的编程模型,而 Spring 的声明式事务功能更是提供了极其方便的事务配置方式,配合 Spring Boot 的自动配置,大多数 S…

试剂的制备丨艾美捷逆转录病毒定量试剂盒方案

QuickTiter逆转录病毒定量试剂盒提供了一种测定逆转录病毒滴度的快速方法。该测定法测量逆转录病毒的病毒核酸含量,可以在纯化病毒之前或之后进行。 Cell Biolabs艾美捷QuickTiter™ 逆转录病毒定量试剂盒不涉及细胞感染;相反,它专门测量纯化…

Linux | 可重入函数 | volatile | SIGCHLD信号

文章目录可重入函数volatilevolatile和const同时修饰变量SIGCHLD信号可重入函数 当一个函数可以被两个流调用,我们称该函数具有重入特征 如果一个函数被重入后可能导致内存泄漏的问题,我们称该函数为不可重入函数,反之,一个函数…

BER转Q

BER转Q Q(2^0.5)*erfcinv(2*BER) Q_dB20*log10(Q) 1、为什么要这样转: 暂时我也不知道,知道了再来补 2、关于erfcinv: yerf(x) 误差函数 yerfc(x) 互补误差函数 yerfinv(x) 逆误差函数(误差函数的反函数) yerfcinv(x) 逆互补误差函数(互补误差…

测试网络、磁盘使用情况和最大性能

1、测最大网络带宽,当前流量 查看网卡信息:ethtool p2p1 最简单的方法是用scp复制一个大文件,例如50G,复制时间要长,至少30分钟。之前在数据库迁移时,发现网速对迁移速度导致了重大影响,我们的…

基于go-micro微服务的实战-Gateway网关层的限流降级(八)

基于go-micro微服务的实战-Gateway网关层的限流降级(八) 文章最后附带完整代码 这一节主要是在Gateway网关层,基于go-micro的装饰器引入限流和降级。限流降级用的是开源库hystrix,类似java的hystrix,这里不做具体介绍和使用,可自行查看文档。…

车载ECU嵌入式设备的诊断测试 – DTC

作者 | 李伟 上海控安安全测评中心安全测评部总监 来源 | 鉴源实验室 01 DTC-Diagnostic Trouble Code(诊断故障代码) 车辆在运行的过程当中,控制器会监控状态,特定故障发生时控制器会记录这些故障。车辆送4S店进行维修保养时&…

Numpy入门[4]——数组类型

Numpy入门[4]——数组类型 参考: https://ailearning.apachecn.org/ 使用Jupyter进行练习 import numpy as np之前已经看过整数数组和布尔数组,除此之外还有浮点数数组和复数数组。 复数数组 a np.array([1 1j , 2 , 3 , 4]) aarray([1.1.j, 2.0.j, …

Java基于PHP+MySQL干洗店管理系统的设计与实现

干洗店管理系统是信息时代的产物,它是干洗店管理的一个好帮手。有了它不再需要繁重的纸质登记,有了它干洗店管理员不在需要繁重的工作,一些收费标准和干洗业务等基本信息可以由管理人员及时的对信息进行查询、更新、修改和删除,方便简易,且时效性高。 干洗店管理系统是一个典型…