| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 【远程调用框架概述 一】基于HTTP和RPC的远程调用方式 -> 正文阅读 |
|
[网络协议]【远程调用框架概述 一】基于HTTP和RPC的远程调用方式 |
无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。之前只会使用相关框架,但其实没有体系的了解过这一块内容,从这篇Blog开始详细学习远程调用的方式、原理、常用框架,基于两个基本大的分类:HTTP和RPC来进行学习,本篇主要是进行综合性概述,分别了解两种不同方式的基本原理和常用框架,最后依据使用场景进行一个讨论。 RPC调用方式RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易 说得通俗一点就是:A计算机提供一个服务,B计算机可以像调用本地服务那样调用A计算机的服务
虽然不同的RPC框架实现方式不同,但是封装的基本范式类似,封装的基本范式如下: RPC基本原理两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。RPC就是要像调用本地的函数一样去调远程函数 客户端发起网络调用
网络传递数据
服务端接收到调用:
服务端生成调用结果:
网络传递数据
客户端收到响应
从RPC调用中我们发现至少需要生产者(服务提供者)和消费者(服务调用者)两个角色。
对于生产者而言:
所以从上述描述中我们发现,完整的流程其实还需要监听器和注册中心,这在不同的框架中有不同的实现方式,例如Dubbo使用Zookeeper做注册中心 RPC常用框架RPC常用框架分为两类:一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的。跟语言平台绑定的开源 RPC 框架主要有下面几种:
而跨语言平台的开源 RPC 框架主要有以下几种。
如果你的业务场景仅仅局限于一种语言的话,可以选择跟语言绑定的 RPC 框架中的一种。如果涉及多个语言平台之间的相互调用,就应该选择跨语言平台的 RPC 框架。这几种里我会重点学习和介绍Dubbo和Spring Cloud,如果有多余精力,会学习一下gRPC和Thrift。更多关于这几种框架的对比:RPC框架对比 HTTP调用方式http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议。也可以用来进行远程服务调用。现在热门的Rest风格,就可以通过http协议来实现。其实这个无需做过多的介绍了,HTTP在我之前的多篇Blog中均有提到,尤其是这篇:【计算机网络基础 六】应用层 HTTP基本原理Http协议,又叫超文本传输协议,是一种应用层协议。规定了网络传输的请求格式、响应格式、资源定位和操作的方式等。但是底层采用什么网络传输协议,并没有规定,不过现在都是采用TCP协议作为底层传输协议。Http与RPC的远程调用非常像,都是按照某种规定好的数据格式进行网络通信,有请求,有响应。 HTTP常用框架不同于RPC框架中生产端服务端我们都需要重新配置,通常我们对外封装的Controller接口其实就可以充当服务端,也就是被调用方。所以HTTP的框架这里只要了解调用方的框架即可,其实也就是HTTP的客户端,其实浏览器访问本质上也算HTTP服务,不同的是需要客户端浏览器渲染服务端返回的结果,常见HTTP客户端框架如下:
不同于RPC框架的多样选择,我建议HTTP框架直接使用Retrofit,它吸收了OkHttp的所有好处,还帮我们做了最大程度的封装,使用起来非常方便 RPC和HTTP的区别二者之间的核心区别就是,RPC基于TCP协议,有一定侵入性,但性能高;HTTP基于HTTP协议,侵入性低,性能低:
RPC主要用于公司内部服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器调用,APP接口调用,第三方接口调用等等。 既然两种方式都可以实现远程调用,我们该如何选择呢?
因此,两者都有不同的使用场景:
其实微服务,更加强调的是独立、自治、灵活。而RPC方式的限制较多,因此微服务框架中,一般都会采用基于Http的Rest风格服务。从成本上考虑,如果从一个服务需要调用的接口太多或者入参及响应Model过于复杂,还是建议RPC,因为HTTP的封装代码需要写太多了,反之,则使用HTTP,且要用Retrofit2。RPC接口即相当于调用本地接口一样调用远程服务的接口;HTTP接口是基于http协议的post接口和get接口(等等,2.0版本协议子支持更多) 总结一下无论是RPC还是HTTP,它们都是远程访问的一种方式,基于不同的网络层级,所以优缺点也显而易见,RPC直接基于传输层的TPC协议,所以性能更好,但是RPC要求有注册中心,客户端服务端语言不同需要做兼容(例如thrift和gRpc框架可以进行语言兼容);HTTP基于应用层的HTTP协议,socket传输时多做一层转化,性能差一些,但是HTTP一般不需要注册中心,客户端服务端语言无关,只要能接收和发送HTTP请求即可。使用时如果是内部同语言栈子系统相互调用且接口众多复杂建议使用RPC,如果是异构多语言形式或者接口定义较为简单则建议使用HTTP。 |
|
网络协议 最新文章 |
使用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 10:31:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |