当前位置:网站首页>RPC过程
RPC过程
2022-04-23 07:48:00 【weixin_46272577】
本文属于【夯实Dubbo】系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习 Dubbo 技术,希望能给读者带来一些干货。系列目录如下(可能随着写作的进行,会做一些调整):
【夯实Dubbo】什么是 RPC 框架?
【夯实Dubbo】Dubbo 的核心特性
【夯实Dubbo】Dubbo 架构和 zookeeper 注册中心的搭建和配置
【夯实Dubbo】Dubbo 和 Spring Boot 整合完成服务注册
【夯实Dubbo】Dubbo 的配置总结
【夯实Dubbo】Dubbo 的负载均衡设置
【夯实Dubbo】Dubbo 的服务熔断和降级处理
【夯实Dubbo】Dubbo 的核心原理
这篇文章主要来分享一下什么是 RPC 框架,关于 RPC 的解释,网上也有很多资料,为了保证教程的完整性,我在这里也简单分享一下,同时自己也顺便巩固巩固。在介绍 RPC 之前,先来看看我们传统是怎么调用的。
比如现在我要调用一个方法,是获取到订单信息,那么在传统项目中,一般是直接调用的,如下:

现在,基于高性能和高可靠等因素的考虑,你决定将系统改造为分布式应用,将很多可以共享的功能都单独拎出来,比如上面说到的订单信息,你单独把它放到一个服务里头,让别的服务去调用它。所以就变成了下面这样:

这下问题来了,服务A里头并没有 OrderServiceImpl 这个类,那它要怎样调用服务B的 OrderServiceImpl 的 get 方法呢?这就可以用到 RPC 框架了,所以我们知道,RPC 框架主要用来解决两个问题:
- 解决分布式系统中,服务之间的调用问题。
- 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
我们来看看 RPC 是怎么解释的:Remote Procedure Call,是指的远程过程调用,是一种进程间通信方式,它是一种技术思想,而不是一个规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。所以细节对程序员来说是不用管的。
我们来看下 RPC 框架内部都做了啥,引用一下网上的图:

从这幅图中可以看出,整个 RPC 的调用过程涉及到一个过程和几个概念,我们来总结下:
- Client:调用端,以本地调用方式调用服务,就相当于上面的 Server A。
- client stub:接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化);client stub找到服务地址,并将消息发送到服务端。
- server stub:收到消息后进行解码,反序列化;server stub根据解码结果调用本地的服务;本地服务执行并将结果返回给server stub。server stub将返回结果打包成消息并发送至消费方。
- client stub接收到消息,并进行解码,反序列化,服务消费方得到最终结果。
这个过程,我们可以用一个流程图来表示,会更加直观:

所以可以看到,RPC 的两个核心模块是:通讯和序列化。RPC 的框架有很多,比如:Dubbo、gRPC、Thrift、HSF等等,我主要来总结一下 Dubbo 的使用。
版权声明
本文为[weixin_46272577]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_46272577/article/details/124357397
边栏推荐
- dried food! Point based: differentiable Poisson solver
- 数论求a^b(a,b为1e12级别)的因子之和
- LeetCode中等题之旋转函数
- form中enctype属性
- Qtablewidget header customization and beautification developed by pyqt5 (with source code download)
- 将实例化对象的方法 给新的对象用
- 刨析——浏览器如何工作
- CGM optimizes blood glucose monitoring and management -- Yiyu technology appears in Sichuan International Medical Exchange Promotion Association
- PyQt5开发之QTableWidget表头自定义与美化(附源代码下载)
- There are some problems when using numeric type to query string type fields in MySQL
猜你喜欢

Listed on the Shenzhen Stock Exchange: the market value is 5.2 billion yuan. Lu is the East and his daughter is American

作文以记之 ~ 二叉树的后序遍历

【深度好文】Flink SQL流批⼀体化技术详解(一)

freertos学习02-队列 stream buffer message buffer

LeetCode-199-二叉树的右视图

The whole house intelligence bet by the giant is driving the "self revolution" of Hisense, Huawei and Xiaomi

How to read books and papers

Somme numérique de la chaîne de calcul pour un problème simple de leetcode

青苹果影视系统源码 影视聚合 影视导航 影视点播网站源码

ATSS(CVPR2020)
随机推荐
Discussion on ES6 tail tune optimization
The simple problem of leetcode is to calculate the numerical sum of strings
PyQt5开发之QTableWidget表头自定义与美化(附源代码下载)
Listed on the Shenzhen Stock Exchange: the market value is 5.2 billion yuan. Lu is the East and his daughter is American
作文以记之 ~ 二叉树的前序遍历
idea:使用easyYapi插件导出yapi接口
程序,进程,线程;内存结构图;线程的创建和启动;Thread的常用方法
ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建
redis主从服务器问题
扎心了!一女子发朋友圈羡慕别人按时发工资被开除,连点赞的同事也一同被开除了...
项目上传部分
ApplicationReadyEvent的使用
关于ORB——SLAM运行中关键帧位置越来越近的异常说明
【路科V0】验证环境2——验证环境组件
MySQL数据库中delete、truncate、drop原理详解
Data security has become a hidden danger. Let's see how vivo can make "user data" armor again
Jetson Xavier NX (3) bazel mediapipe installation
CSV column extract column extraction
Campus transfer second-hand market source code download
Flink SQL实现流批一体