网站首页 > 博客文章 正文
RPC是什么
RPC 即远程过程调用, 很简单的概念, 像调用本地服务(方法)一样调用服务器的服务(方法)。由于此前我已经向大家详细地介绍过RPC,此处不过多赘述。详见【学习笔记-RPC简单理解】 。之前章节详细介绍过现流行的三种RPC框架,分别是Google 的Grpc(学习笔记-GRPC简单理解),Facebook的Thrift(学习笔记-Thrift简单理解),阿里的Dubbo(学习笔记-Dubbo简单理解)。
REST是什么
REST 不是一种协议,它是一种架构, 一种 Web Service 能够如果满足 REST 的几个条件, 通常就称这个系统是 Restful 的.由于此前我已经向大家详细地介绍过RESTful,此处不过多赘述。详见【学习笔记-RESTful简单理解】。
RPC与REST的区别
REST一种架构设计风格,提供了设计原则和约束条件,而不是架构。严格意义上说接口很规范,操作对象即为资源,致力于通过http协议中的POST/GET/PUT/DELETE等方法和一个可读性强的URL来提供一个http请求。并且参数都放在URL上,但是不严格地说Http+json、Http+xml,常见的http api都可以称为Rest接口。
Rpc即远程方法调用,就是像调用本地方法一样调用远程方法,RPC会隐藏底层的通讯细节,通信协议大多采用二进制方式
只需要记住一点, RPC是以动词为中心的, REST是以名词为中心的, 此处的 动词指的是一些方法, 名词是指资源.
以动词为中心,意味着,当你要需要加入新功能时,你必须要添加更多的动词, 这时候服务器端需要实现 相应的动词(方法), 客户端需要知道这个新的动词并进行调用.
而以名词为中心, 假使我请求的是 user/name/, 无论这个URI对应的服务怎么变化,客户端是无需 关注和更新的,而这种变化对客户端也是透明的.
至于其它的区别,如对语言的依赖, 耦合性等,这些都是上面提到的这个根本区别所衍生的.
应用场景
REST和RPC都常用于微服务架构中。
RESTful使用的是HTTP协议,相对更规范,更标准,更通用,无论哪种语言都支持http协议。现在开源中间件几乎都支持。
RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节。让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务。
REST调用及测试都很方便,RPC就显得有点繁琐,但是RPC的效率是毋庸置疑的,所以建议在多系统之间的内部调用采用RPC。对外提供的服务,Rest更加合适。
总结:内对内RPC,内对外REST
协议对比
RESTful采用http,RPC使用高性能二进制协议
Restful架构是基于Http应用层协议的产物。http相对更规范,更标准,更通用,无论哪种语言都支持http协议。如果你是对外开放API,例如开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,相应的,如果采用http,无疑在你实现SDK之前,支持了所有语言,所以,现在开源中间件,基本最先支持的几个协议都包含RESTful。
RPC架构是基于TCP传输层协议的产物。RPC协议性能要高得多,例如Protobuf、Thrift、Kyro等,(如果算上序列化)吞吐量大概能达到http的二倍。响应时间更为出色。
REST与RPC比较
都是网络交互的协议规范。通常用于多个微服务之间的通信协议。
高与低是对实现两种规范框架的相对比较,但也不是绝对的,需要根据实际情况而定。
本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。
猜你喜欢
- 2024-10-30 SpringCloudRPC远程调用核心原理:代理模式与RPC客户端实现类
- 2024-10-30 基于HTTP RESTFul的远程调用和基于RPC的远程调用有什么区别?
- 2024-10-30 23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?
- 2024-10-30 基于HTTPRESTFul的远程调用和基于RPC的远程调用有什么区别?
- 2024-10-30 远程方法调用RMI详解,和RPC的思路很相似
- 2024-10-30 一文读懂几种远程调用的区别与联系
- 2024-10-30 架构实战面试必备:如何实现RPC调用保护
- 2024-10-30 事务的使用:不要在事务中包含任何rpc调用
- 2024-10-30 SpringBoot+RabbitMQ 实现 RPC 调用
- 2024-10-30 Java进阶:远程过程调用(RPC)及回调方法(一)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)