| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 001.flink1.14源码分析之-RPC框架 -> 正文阅读 |
|
[网络协议]001.flink1.14源码分析之-RPC框架 |
RPC分布式系统离不开RPC远程调用,本文首先理一下什么是RPC。 1.java本地方法调用假设你有一个Calculator,那么单体应用时,要调用Calculator的add方法来执行一个加运算,你可以方法中直接使用,因为在同一个地址空间,或者说在同一块内存,这个称为本地函数调用。 java的本地方法调用中,每个方法会作为java虚拟机栈中的一个栈帧放入到java虚拟机栈中,方法调用的时候执行入栈操作,方法执行完成执行出栈操作。 ? 2.远程方法调用-RPC 需求:系统不同模块之间能够像本地方法一样调用。在一个典型的主从分布式系统中,master-slave结构,自己开发网络通信程序,TCP socket,http通信。 ? 例如,使用tcp的方式,服务端启动网络服务程序等待连接,客户端启动程序连接服务端端,当客户端需要发送连接给服务端,比如心跳,需要自定义一个心跳的数据结构,并开发网络通信代码模块,发送给服务端,服务端接收后判断请求类型,做对应的处理,其中还要处理拆包,粘包等网络底层问题。使用HTTP的实现也有同样的问题,只不过将socket编程换成了HTTP调用。不论使用哪种通信协议,都需要在开发时嵌入这么一段远程通信的代码,客户端发起xxRequest,服务端返回xxResponse响应。 对于上面的代码我们可以做一些改进:使用一个代理,而这个代理对象的内部,就是通过Client来实现远程过程调用的。就变成了了下图所示: ? ? 这个方式中解决了如下两个问题: 1.分布式系统中,服务之间的调用问题。 2. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。 RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,也可以使用HTTP,为通信程序之间携带信息数据。RPC的核心并不在于使用什么协议。RPC的目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。通过RPC能解耦服务,这才是使用RPC的真正目的。RPC的原理主要用到了动态代理模式。 RPC = 网络协议 + 序列化 服务器通讯原理就是一台socket服务器A,另一台socket客户端B,现在如果要通讯的话直接以流方式写入或读出。这样能实现通讯。比如需要发送流大小,编码,Ip等。这样就有了协议,协议就是规范,就是发送的流中携带了很多的内容。发送的内容就是文本类型,客户端就得序列化,那么常用的就有json,xml之类,如果想把内容变得更小,那就有二进制了。把文本变成二进制传递。 RPC 只是一种概念、一种设计,就是为了解决?不同服务之间的调用问题, 它一般会包含有?传输协议?和?序列化协议?这两个。 ? ? RPC调用过程
RPC框架屏蔽了底层细节,对于调用者来说感受不到远程调用的存在 ? ? 常见的RPC协议框架:
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:52:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |