dubbo之原理

news2024/12/23 9:10:27

RPC原理

RPC就是远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。

原理

 一个完整的RPC主要包括三部分:

        1.服务注册中心(Registry):负责将本地服务发布成远程服务,并进行管理,提供给消费者使用

        2.服务提供者(RPC Server):负责提供接口定义和服务实现类

        3.服务消费者(RPC Client):通过远程代理调用远程服务

过程:

        1.服务提供者启动后向注册中心注册机器i、端口以及提供的服务列表

        2.服务消费者启动后向注册中心获取服务提供者的服务列表

        3.服务注册中心可实现负载均衡和故障切换

RPC调用过程

 

1.客户端调用服务

2.客户端存根(Client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体

3.客户端将消息发送到服务端

4.服务端存根(Server stub)收到消息后进行反序列化

5.服务端存根(Server stub)根据结果调用服务

6.执行服务并将结果返回给服务端存根(Server stub)

7.服务端存根(Server stub)将返回结果进行序列化

8.服务端将信息发送给客户端

9.客户端存根(Client stub)接收到结果后,进行反序列化

10.客户端得到结果

RPC 就是要把 2、3、4、7、8、9 这些步骤都封装起来

http与rpc的区别

        1.rpc基于tcp协议,也可以基于http协议;http基于http协议

        2.rpc可以让请求报文体积更小,提高传输效率;http请求中会包含很多无用的信息

        3.rpc可以基于thrift实现高效的二进制传输,http大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能

        4.rpc自带负载均衡,http需要配置nginx来实现

        5.rpc内部的服务调用,性能消耗低,传输效率高,服务治理方便,http用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等

dubbo原理

原理

 

主要包括五个节点:Provider、Consumer、Container、Register、Monitor

  1. Provider:服务提供者
  2. Consumer:服务订阅者
  3. Container:服务运行的容器
  4. Register:注册中心
  5. Monitor:监控中心,统计服务调用次数和调动时间

dubbo工作过程:

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

架构原理

dubbo架构有10层:

    service层(接口层):给服务提供者和消费者实现的(留给开发人员实现)
    config层(配置层):针对dubbo进行各种配置。
    proxy层(服务代理层):服务提供者调用的是接口,需要实现类,所以先生成动态代理类。
    registry层(服务注册层):负责服务的注册与发现
    cluster层(集群层):封装多个服务提供者的路由及负载均衡,将多个实例组合成一个服务。
    monitor层(监控层):对rpc接口的调用次数和调用时间进行监控。
    protocol层(协议层)(远程调用层):封装rpc调用,使用不同协议,如:dubbo、rest、……等。
    exchange层(信息交换层):封装请求响应模式,同步转异步。
    transport层(网络传输层):封装netty和mina为统一接口。
    serialize层:(数据序列化层):用于序列化数据

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

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

相关文章

基于Echarts的数据可视化大屏

本项目学习于b站up主(视频链接) up主分享的资料,gitee仓库: 其中有笔记,笔记链接 项目总结 项目主要分为前端页面的布局和Echarts图表的嵌入,页面主要就是css较为繁琐,图表毕竟官网有模板&…

elementUI时间选择器el-time-picker的坑

//开始时间<el-time-pickerplaceholder"选择时间":format"HH:mm:ss" //显示的时间样式value-format"HH:mm:ss" //绑定值的样式 //不给默认为 Date 对象值&#xff1a;"2023-07-31T16:00:00.000Z"v-model"FormData.startTime&…

【JAVA】我们常常谈到的方法是指什么?

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言方法方法的分类方法的定义方法调用方法重载 前言 在之前的文章中我们总是会介绍到类中的各式各样的方法&#xff0c;也许在应用中我们对它已经有了初步的了解&#xff0c;今…

(三) 搞定SOME/IP通信之CommonAPI库

本章主要介绍在SOME/IP通信过程中的另外一个IPC通信利剑,CommonAPI库,文章将从如下几个角度让读者了解什么是CommonAPI, 以及库在实际工作中的作用 SOME/IP通信之CommonAPI CommonAPI库是什么CommonAPI库的编译写个Demo实战一下CommonAPI库是什么 CommonAPI是GENIVI组织开发…

linux系统服务学习(二)linux下yum源配置实战

文章目录 Linux下yum源配置实战一、Linux下软件包的管理1、软件安装方式2、源码安装的配置过程3、详解源码安装的配置过程&#xff08;定制&#xff09;4、详解编译过程5、安装过程6、axel多线程下载软件源码安装7、使用软链接解决command not found8、使用环境变量解决command…

JavaScript进阶 第一天

作用域函数进阶解构赋值 一.作用域 局部作用域全局作用域作用域链JS垃圾回收机制闭包变量提升 1.1 作用域 ① 概念&#xff1a;规定了变量能够被访问的“范围”&#xff0c;离开了这个"范围"&#xff0c;变量不能被访问 ② 分类 局部作用域 &#xff08;1&…

END-TO-END、SCALE HYPERPRIOR、Checkerboard梳理总结

8.9-8.15学习汇报 阅读《END-TO-END OPTIMIZED IMAGE COMPRESSION》、《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》、《Checkerboard Context Model for Efficient Learned Image Compression》 传统的图像或视频压缩方法通常分为多个步骤&#xff0c;包括变换…

android设置竖屏仍然跟随屏幕旋转怎么办

如题所问&#xff0c;我最近遇到一个bug&#xff0c;就是设置了摇感&#xff0c;然后有用户反馈说设置了手机下拉的系统设置-屏幕旋转-关闭。然后屏幕还是会旋转的问题。 首先&#xff0c;我们先从如何设置横竖屏了解下好了 设置横屏和竖屏的方法&#xff1a; 方法一&#x…

IPv6项目开发测试记录

一、环境 1、网口 IPv6地址 fd00:0:0:1::15 子网前缀长度 64 网关地址&#xff08;非必须&#xff09; fd00:0:0:1::1 二、云环境、面板机连云测试 1、面板机设置IPv4地址后可以访问fd00::100这个地址 2、初始化时候服务器地址输入匹配正则式&#xff1a;IPv6地址匹配正则…

基因型比值比(genotypic odds ratio)和等位基因比值比(allelic odds ratio)的计算

基因型比值比&#xff08;genotypic odds ratio&#xff09;和等位基因比值比&#xff08;allelic odds ratio&#xff09;是两个不同的概念。一般而言&#xff0c;通过PLINK、GCTA等工具计算得到的比值比指的是等位基因比值比。 以下是基因型比值比和等位基因比值比的各自计算…

8月12日上课内容 综合配置详解 四层+七层代理

后续内容概述&#xff1a; Ivs集群: keepalive:vip实现代理高可用 NAT VPN DR (DR最常用) 数据库:增制改查 备份 高可用 主从复制 读写分离 DBA 市场量小&#xff0c;从业者不多&#xff0c;工资一般般。 中间件: redis.* 分布式存储: ELK日志分析。kafka消息队列 监控zabb…

知识分享:如何将一张图片转换成短链接?

今天我们要分享的知识是&#xff1a;如何将一张图片转换成链接&#xff1f; 之前我们有介绍过在二维彩虹将图片转换成二维码的方法&#xff0c;那么其实将图片转成链接也非常简单&#xff01;在做电商运营创建商品详情页面、作家为在线小说设置封面图、产品运营、策划活动等等…

IDC报告深度解读:2023年CRM发展趋势分析

近期&#xff0c;国际数据公司&#xff08;IDC&#xff09;发布了2022年下半年《中国客户关系管理(CRM)SaaS市场跟踪研究报告》&#xff0c;根据报告显示&#xff0c;2022年下半年中国CRM SaaS市场规模达到 11.6 亿美金&#xff0c;同比增长25.4%&#xff0c;CRM占中国整体SaaS…

SpringCloud初识

微服务架构4个核心问题&#xff1a; 这四个问题围绕这我们去学的一些东西&#xff0c;是重点!!! 1.服务很多&#xff0c;客户端该如何访问&#xff1f; 2.这么多服务&#xff0c;服务之间该如何通信&#xff1f; 3.这么多服务&#xff0c;该如何治理&#xff1f; 4.服务挂了…

Python 基础语法 | 常量表达式,变量,注释,输入输出

常量和表达式 我们可以把 Python 当成一个计算器&#xff0c;来进行一些算术运算 print(1 2 - 3) # 0 print(1 2 * 3) # 7 print(1 2 / 3) # 1.6666666666666665注意&#xff1a; print 是一个 Python 内置的 函数可以使用 - * / () 等运算符进行算术运算&#xff0c;先…

postman接口测试工具的常规使用

postman接口测试工具简介与安装 Postman简介&#xff1a; Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。 它提供功能强大的Web API&HTTP请求调试。它能够发送任何类型的HTTP请求&#xff08;GET&#xff0c;HEAD&#xff0c;POST&#xff0c;PUT..&a…

04-基础入门-WEB源码拓展

基础入门-WEB源码拓展 1、WEB源码拓展&#xff08;1&#xff09;关于web源码目录结构&#xff08;2&#xff09;关于 WEB 源码脚本类型&#xff08;3&#xff09;关于 WEB 源码应用分类 2、演示案例&#xff08;1&#xff09;asp、php等源码测试&#xff08;2&#xff09;平台识…

我们常说这个pycharm里有陷阱,第三方库导入失败,看这里!

最近有小伙伴遇到了明明安装了 python 第三方库&#xff0c;但是在 pycharm 当中却导入不成功的问题。 ​ 一直以来&#xff0c;也有不少初学 python 的小伙伴&#xff0c;一不小心就跳进了虚拟环境和系统环境的【陷阱】中。 本文就基于此问题&#xff0c;来说说在 pycharm 当…

【leetcode】【图解】617. 合并二叉树

题目 难度&#xff1a;简单 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xf…

基于DBN的伪测量配电网状态估计,DBN的详细原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的伪测量配电网状态估计 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法伪测量配电网…