Dubbo之认识RPC架构

news2024/11/21 1:42:41

文章目录

  • 一、互联网架构演变
    • 1.1 RPC架构
    • 1.2 SOA架构
    • 1.3 微服务架构
    • 1.4 SOA vs 微服务
  • 二、RPC 基本概念
    • 2.1 RPC 协议
    • 2.2 RPC 框架
    • 2.3 RPC 运行流程
    • 2.4 RPC vs HTTP


提示:以下是本篇文章正文内容,Dubbo 系列学习将会持续更新

在这里插入图片描述

官方文档:https://cn.dubbo.apache.org/zh-cn/overview/home

一、互联网架构演变

在这里插入图片描述

1.1 RPC架构

RPC 架构是指在 MVC 架构的基础上,将公共业务模块抽取出来,作为独立的服务供其他调用者消费,以实现服务的共享和重用。

  • RPC:Remote Procedure Call,远程过程调用。他一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
  • 代表技术Thrift (Facebook 开发的系统内部各语言之间协调通讯的 RPC 框架,带有强大的代码生成引擎,支持跨语言、多平台调用的)、Hessian (基于HTTP协议的 RPC 框架,提供 RMI 功能,且采用二进制协议的轻量级框架) 等等。
  • 优点:应用直接调用服务,服务之间是隔离的。
  • 缺点:服务过多时,管理成本高昂。服务治理,服务注册、发现,服务容错,服务跟踪,服务网关,IP暴露等都是此架构无法避免的问题。

1.2 SOA架构

  • SOA:Service oriented Architecture,面向服务架构;ESB:Enterparise Service Bus,企业服务总线,服务中介,主要是提供了一个服务于服务之间的交互。
  • ESB 的功能:负载均衡,流量控制,加密处理,服务的监控,异常处理,监控告急等等。
  • 代表技术Mule (Java 为核心的消息框架和整合平台,提供服务中介、数据转换、消息路由、服务创建和托管等功能)、 WSO2 (开源的服务总线,提供了 SOA 基础设施的搭建,内置数据服务支持,服务角色管理等功能)。

1.3 微服务架构

  • 微服务是一种架构风格。一个大型的复杂软件应用,由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好的完成该任务。微服务就是一个轻量级的服务治理方案。
  • 微服务架构在某种程度上是面向服务的架构 SOA 继续发展的产物。对比 SOA 架构,使用注册中心代替 ESB 服务总线。注册中心相比服务总线来说,更加轻量级。
  • 代表技术Dubbo (SOA时代的产物)、SpringCloud (微服务时代的产物)

1.4 SOA vs 微服务

在这里插入图片描述

功能SOA微服务
组件大小大块业务逻辑单独任务或小块业务逻辑
耦合通常松耦合总是松耦合
公司架构任何类型小型、专注于功能交叉团队
管理着重中央管理着重分散管理
目标确保应用能够交互操作执行新功能、快速拓展开发团队

回到目录…

二、RPC 基本概念

2.1 RPC 协议

RPC (Remote Procedure Call Protocol):远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。

 RPC 采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

2.2 RPC 框架

 在单机时代一台电脑运行多个进程,进程之间无法通讯,显然这会浪费很多资源,因此后来出现 IPC(Inter-process communication:单机中运行的进程之间的相互通信),这样就能允许进程之间进行通讯,比如在一台计算机中的A进程写了一个吃饭的方法,那在以前如果在B进程中也要有一个吃饭的方法,必须要在B进程中进行创建,但有了 RPC 后B只需要调用A进程的程序即可完成,再到后来网络时代的出现, 大家电脑都连起来,这时可不可以调用其他电脑上的进程呢,当然可以,这样 RPC 框架就出现了。严格意义上来讲:Unix 的生态系统中 RPC 可以在同一台电脑上不同进程进行,也可以在不同电脑上进行;而在 windows 里面同一台电脑上不同进程间的通讯还可以采用 LPC(本地访问)。综上:RPC 或 LPC 是上层建筑,IPC 是底层基础。

RPC框架有很多:比如 JAVA RMIThriftDubbogrpc 等。

2.3 RPC 运行流程

在这里插入图片描述

 首先,要解决通讯的问题。主要是通过在客户端和服务器之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。

 第二,要解决寻址的问题。A 服务器上的应用怎么告诉底层的 RPC 框架,如何连接到 B 服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于 Web 服务协议栈的 RPC,就要提供一个 endpoint URI,或者是从 UDDI(一种目录服务,通过该目录服务进行服务注册与搜索) 服务上查找。如果是 RMI 调用的话,还需要一个 RMI Registry 来注册服务的地址。

 第三,要进行序列化或编组。当 A 服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如 TCP 传递到 B 服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,通过寻址和传输将序列化的二进制发送给 B 服务器。

 第四,B 服务器收到请求后,需要对参数进行反序列化,恢复为内存中的表达方式,然后找到对应的方法进行本地调用,然后得到返回值。

 第五,返回值还要发送回服务器 A 上的应用,也要经过序列化的方式发送,服务器 A 接到后,再反序列化,恢复为内存中的表达方式,交给 A 服务器上的应用。

2.4 RPC vs HTTP

RPC 是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 所以 RPC 的实现可以通过不同的协议去实现,比如 HTTP、RMI 等。

  1. RPC 是一种概念,可以通过 HTTP 来实现,也可以通过 Socket 自己实现一套协议。

  2. HTTP 接口:信息初期的一种通信手段;优点就是简单、直接、开发方便,利用现成的 HTTP 协议进行传输。
    RPC 框架:不需要复杂的三次握手,在子系统较多、接口非常多的大型网站下,减少了网络开销。

  3. HTTP 接口:服务端必须位于 HTTP 容器里,受限于 HTTP 协议,需要带 HTTP 请求头,导致传输起来效率或者说安全性不如 RPC。
    RPC 框架:它要保证传输的两端都要用 Java 实现,且两边需要有相同的对象类型和代理接口,不需要容器,但加大了编程的难度。

  4. Java 中最基本的 RMI 技术,它是 java 原生的应用层分布式技术。在传输性能方面,RMI 的性能是优于 HTTP 的。

  5. RPC 框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。第三个来说就是安全性。最后就是流行的服务化架构、服务化治理,RPC 框架是一个强力的支撑。

回到目录…


总结:
提示:这里对文章进行总结:
本文是对Dubbo的学习,先介绍了互联网架构演变的过程,又认识了 RPC 架构,了解了 RPC 和 HTTP 的区别。之后的学习内容将持续更新!!!

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

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

相关文章

电池连接接触电阻的优化研究

金属与金属接触处的接触电阻主要受以下因素影响: 表面结构机械负载 表面结构可以通过表面平整度、表面氧化和吸水性进一步描述。 电池组中的这些接头将采用焊接或螺栓连接方式。最初最容易想到的是螺栓母线接头。 螺栓扭矩可用于估算力,从而估算接触压…

mvc的编辑和删除

之前实现了mvs的翻页登录显示等等一系列操作,现在我们再照葫芦画瓢实现一下编辑和删除。 1、编辑 我的思路是首先在list页面要给出编辑的超链接按钮,点击后跳转到一个jsp页面用来输入编辑的相关内容,再提交到负责编辑功能的servlet中。 首…

双硬盘安装Ubuntu22

1、下载Ubuntu系统的iso文件 官方下载地址:Download Ubuntu Desktop | Download | Ubuntu 阿里云镜像下载地址:ubuntu-releases安装包下载_开源镜像站-阿里云 2、制作U盘引导盘 下载软件 Rufus:https://rufus.akeo.ie 绿色免安装&#xff0…

Spring Security源码剖析从入门到精通.跟学尚硅谷(二)

Spring Security源码剖析从入门到精通.跟学尚硅谷 二4. SpringSecurity 微服务权限方案4.1 什么是微服务1、微服务由来2、微服务优势3、微服务本质4.2 微服务认证与授权实现思路1、认证授权过程分析2、权限管理数据模型3、项目技术说明4、搭建工程(1).创建父工程(2).创建子模块…

2023年天猫青团销售数据:口味更个性化,但老字号品牌依然称霸

青团本是清明时节祭祀的产物,但随着时节的推移,青团已经突破了地域与时间的限制,如今的青团已经成为地域性特色小吃的一种,并逐渐被全国消费者所接受。 随着消费回暖及内容营销的助力,今年的青团季比往年相比提高了不少…

天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)

前言 近年来,随着信息化进程的不断深入,人们对于信息的获取和处理需求越来越高。而其中,天气查询API是一个非常重要的服务,它能够帮助人们快速获取所在位置的天气情况,同时也为各类应用提供了必要的气象数据支持。 本…

Vue组件化编程

模块与组件、模块化与组件化 传统方式编写应用 使用组件方式编写应用 模块 理解:向外提供特定功能的 js 程序,一般就是一个 js 文件为什么:js 文件很多很复杂作用:复用 js,简化 js 的编写,提高 js 运行效…

RabbitMQ( 发布订阅模式 ==> TopicExchange)

本章目录: 何为TopicExchangeTopicExchange的具体使用一、何为TopicExchange 老样子,先看官方文档 在DirectExchange中,我们可以发送携带routingkey的消息到交换机中,交换机通过routingkey再去匹配一个或多个符合条件的队列。 …

不要告诉同事你要离职!打算跳槽,新公司开出两倍薪资,私下告诉要好的同事,却被同事出卖给领导!...

职场上有真正的朋友吗?来看看这位网友的讲述:一位前同事本来打算跳槽,新公司开出的薪资是原来的两倍。她私下告诉了几位同事自己打算离职的消息,并跟同事们分享了工资翻倍的喜悦。可她万万没想到,两天之后的公司会议上…

VSCode 配置arduino 开发

下载扩展,Arduino 其次,找到ta,看图片设置 配置完上述两个步骤后VS Code底部出现一个菜单栏,如下; 首先的有一个电灯的项目,我们可以去Arduino IDE 的示例中 另存一份出来 ,通过VSCode打开&am…

mysql 主从同步案例集合

记一次 MySQL 主从同步异常的排查记录,百转千回! relay log 损坏了,导致从库的 SQL 线程解析 relay log 时出现异常。从库恢复方式是通过手动设置当时出错的 GTID 的下一个值,让从库不从主库同步这个 GTID,最后从库就能…

Hadoop集群启动后,在web:50070端口只有两个datanode节点

spark集群部署规划: hadoop1 master worker datanode namenode secondarynamenode(hadoop) resourcemanager nodemanager(yarn) hadoop2 worker datanode nodemanager hadoop3 worker datanode nodemanager 问题引出:​​​​​​Hadoop集群启…

Java对象模型

介绍 Java是一种面向对象的语言,而Java对象在JVM中存储是由一定结构的。而这个 Java对象自身的存储模型称之为Java对象模型HotSpot虚拟机中,设计了一个OOP-Klass Model.OOP指的是普通对象指针,而Klass用来描述对象的具体类型。如下图所示是一…

字节测试总监8年测试路,如何从功能测试转成自动化测试——愿测试人不再迷茫

我大学学的计算机专业,有一点编程基础。我的软件测试职业开始和大多数测试人员一样,一开始在一家电商公司做软件功能测试。 大部分进入测试行业的朋友,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测…

Python深度学习实战:人脸关键点(15点)检测pytorch实现

引言 人脸关键点检测即对人类面部若干个点位置进行检测,可以通过这些点的变化来实现许多功能,该技术可以应用到很多领域,例如捕捉人脸的关键点,然后驱动动画人物做相同的面部表情;识别人脸的面部表情,让机…

北邮22信通:(13)二叉树 统计结点总数 深度和叶子结点数

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章: 下一篇文章: 目录 一.统计结点总个数 二.统计二叉树深度 三.统计叶子结点总数 四.完整代码 4.1测试int存储类型&…

基于via的课堂学生行为数据标注 与yolov7目标检测与自动标注系统

目录0 相关链接1. 总体功能描述2.软件安装说明2.1. 环境搭建2.2. 激活环境2.3. 退出环境2.4. 删除环境2.5. 安装opencv3.标注数据处理3.1. 收集3.2.via对标注举手3.3. via 举手标注转化yolo格式3.4. via动作标注扩展3.5. via 举手看书写字标注转化yolo格式4. 标注数据检查与可视…

Vue3.0中的响应式原理

回顾Vue2的响应式原理 实现原理: - 对象类型:通过 Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。 - 数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹&…

jekins部署java和vue

一、安装jekins,下面安装的是2.387.2版本 必须安装有jdk11或jdk17 二、部署java项目 1.安装插件:Maven Integration plugin和Deploy to container Plugin 2.配置全局环境变量:jdk、git、maven 3.创建maven项目 cd docus-server/docus-serv…

深入底层谈谈String

深入底层谈谈String一、聊聊字符串拼接【底层】二、聊聊String实现(源码分析)实现的接口内部属性及其部分构造函数部分方法说明明明replace,replaceAll,substring等方法得到了新的字符串,为什么说String是不变的呢&…