了解一下RPC,为何诞生RPC,和HTTP有什么不同?

开篇提问

  1. 什么是RPC?
  2. 为什么需要RPC,用来解决什么问题?
  3. RPC与HTTP有什么不同?
  4. 你知道几种RPC?

认识RPC

RPC:Remote Procedure Call,远程过程调用。是指计算机程序使过程在不同的地址空间(通常在共享网络的另一台计算机上)执行时,其编码方式就像是正常的(本地)过程调用,而无需程序员明确为远程交互编码细节。

RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

RPC是进程间通信(IPC)的一种形式,因为不同的进程具有不同的地址空间:如果在同一主机上,即使物理地址空间相同,它们也具有不同的虚拟地址空间;如果它们位于不同的主机上,则物理地址空间是不同的。许多不同的(通常是不兼容的)技术已被用来实现这一概念。

【简单理解】:两台不同计算机(程序),计算机A有一个约定协议计算机B想调用计算机A需要通过约定协议来进行通讯调用。

RPC的诞生

其实早在1982年左右RPC就被人用来做分布式系统的通信,最早发明『远程过程调用』这个词语的人是『布鲁斯·杰伊·尼尔森 (Bruce Jay Nelson)』大约是在1981年。

我们所熟知的Java在1.1版本提供了Java版本的RPC框架(RMI),此时在1990年后,基本上RPC被广泛用于系统之间的调用。但是只在后端方向熟知,对于大众更多的还是接触HTTP等协议,也因此RPC更晚让大众了解认知。

RPC与HTTP

先讲讲HTTP

HTTP:Hypertext Transfer Protocol即超文本传输协议。

HTTP协议在1990年才开始作为主流协议出现;之所以被我们所熟知,是因为通常HTTP用于web端,也就是web浏览器和web服务器交互。当ajax和json在前端大行其道的时候,json也开始发挥其自身能力,简洁易用的特性让json成为前后端数据传输主流选择。HTTP协议中以Restful规范为代表,其优势很大。它可读性好,且可以得到防火墙的支持、跨语言的支持

HTTP的缺点也很快暴露:

  1. 有用信息占比少,HTTP在OSI的第七层,包含了大量的HTTP头等信息
  2. 效率低,因为第七层的缘故,中间有很多层传递
  3. HTTP协议调用远程方法复杂,需要封装各种参数名和参数值以及加密通讯等

所以RPC好在哪?

  1. 都是有用信息
  2. 效率高
  3. 调用简单
  4. 无需关心网络传输或者通讯问题

HTTP和RPC其实有联系

http也是rpc实现的一种方式。

RPC和HTTP一句话说不同

RPC就像地区方言,只有内部知道,双方都需要知道方言,不然没法沟通

HTTP就是普通话,基本都能懂,也会说

RPC一般用于什么地方?

微服务、分布式已经成为日常的今天,服务通常都部署在不同的服务器,服务器也在不同地区,这时候就存在跨地域跨服务器调用问题,RPC即用于这样类似的情况

RPC适用于公司内部使用,性能消耗低,传输效率高,服务治理方便,但是不建议传输较大的文本、视频等。

篇末提问

  1. 是否让你理解HTTP和RPC的一些不同了?
  2. RPC用来干嘛了解了吗?
  3. 你有在用RPC吗?

最新文章

  1. MVC 使用 Ueditor富文本编辑器
  2. 经典String str = new String("abc")内存分配问题
  3. 80.Android之内存管理
  4. Unity3D基础知识梳理
  5. Angular学习
  6. proxool详细配置
  7. 【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)
  8. 10个必备的移动UI设计资源站(转)
  9. $( ).focus()与$( )[0].focus()区别
  10. Mysql表操作
  11. 修改docker默认172.17网段
  12. HTML5 新增通用属性
  13. 轻量级分布式RPC框架
  14. /proc/mtd 各参数的含义 -- linux内核
  15. 【WebGIS系列】Typescript+WebGL+Webpack开发环境搭建
  16. Python3调谷歌翻译
  17. 【代码笔记】Web-JavaScript-JavaScript正则表达式
  18. How not to alienate your reviewers, aka writing a decent rebuttal?
  19. phpmyadmin无法访问503错误的解决方法
  20. 在rhel6上安装Python 2.7和Python 3.3

热门文章

  1. js 几种跨域解决方法
  2. 懒松鼠Flink-Boot(Flink+Spring):一款将Flink与Spring生态完美融合的脚手架工程
  3. C# 继承类的值赋
  4. 转:什么是Shingling算法
  5. 如何使用交易开拓者(TB)开发数字货币策略
  6. jmeter跨线程使用token
  7. LLVM程序分析日记之CMake使用
  8. Flink批处理读写Hive
  9. Python实现全自动购买火车票!抢票回家过年咯
  10. Python字符串常用的一些东西