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

亦一银河 2021-01-14 14:59:20
rpc 了解 一下 诞生


了解一下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吗?
版权声明
本文为[亦一银河]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/sinclairni/p/14277238.html

  1. Redis basic command
  2. Summary of MySQL articles
  3. 2、 Create k8s cluster in 5 seconds
  4. data自定义属性在jQuery中的用法
  5. Linux常见解压缩
  6. Detailed explanation of HBase basic principle
  7. 1、 Why and how to learn k8s
  8. Java advanced (29) -- HashMap set
  9. java中大文件上传
  10. Weblogic 2017-3248 analysis of Java Security
  11. Kubernetes official java client 8: fluent style
  12. Explain the function of thread pool and how to use it in Java
  13. Programming software tutorial video Encyclopedia: C + + / Java / Python / assembly / easy language (with tutorial)
  14. Description of dependency problem after javacv is updated to 1.5. X and how to reduce the size of dependency package
  15. Java reflection & dynamic agent
  16. Building Apache 2.4 + php7 + mysql8 in centos7 environment
  17. Summary of Java multithreading (1)
  18. Oracle AWR report generation
  19. Four magic functions of mybatis, don't step on the pit!
  20. A 16-year-old high school student successfully transplanted Linux to iPhone and posted a detailed guide
  21. Centos7 one click installation of JDK1.8 shell script
  22. Mounting of file system in Linux (centos7)
  23. How does serverless deal with the resource supply demand of k8s in the offline scenario
  24. Detailed explanation of HBase basic principle
  25. Spring security oauth2.0 authentication and authorization 4: distributed system authentication and authorization
  26. Redis performance Part 5 redis buffer
  27. JavaScript this keyword
  28. Summary of Java multithreading (3)
  29. Sentry(v20.12.1) K8S 云原生架构探索, SENTRY FOR JAVASCRIPT 手动捕获事件基本用法
  30. Sentry(v20.12.1) K8S 云原生架构探索, SENTRY FOR JAVASCRIPT 手动捕获事件基本用法
  31. (10) Spring from the beginning to the end
  32. Summary of Java multithreading (2)
  33. Spring source notes! From the introduction to the source code, let you really understand the source code
  34. A stormy sunny day
  35. Zookeeper (curator), the implementation of distributed lock
  36. Show the sky! Tencent T4's core Java Dictionary (framework + principle + Notes + map)
  37. Spring boot project, how to gracefully replace the blank value in the interface parameter with null value?
  38. Spring boot project, how to gracefully replace the blank value in the interface parameter with null value?
  39. docker+mysql集群+读写分离+mycat管理+垂直分库+负载均衡
  40. docker+mysql集群+读写分离+mycat管理+垂直分库+负载均衡
  41. To what extent can I go out to work?
  42. Java 使用拦截器无限转发/重定向无限循环/重定向次数过多报错(StackOverflowError) 解决方案
  43. Implementation of rocketmq message sending based on JMeter
  44. How to choose the ticket grabbing app in the Spring Festival? We have measured
  45. Implementation of rocketmq message sending based on JMeter
  46. My programmer's Road: self study java
  47. My programmer's Road: self study java
  48. All in one, one article talks about the use of virtual machine VirtualBox and Linux
  49. All in one, one article talks about the use of virtual machine VirtualBox and Linux
  50. Java 使用拦截器无限转发/重定向无限循环/重定向次数过多报错(StackOverflowError) 解决方案
  51. [Java training project] Java ID number recognition system
  52. How does serverless deal with the resource supply demand of k8s in the offline scenario
  53. Detailed explanation of HBase basic principle
  54. Explain the function of thread pool and how to use it in Java
  55. Kubernetes official java client 8: fluent style
  56. 010_MySQL
  57. Vibrant special purchases for the Spring Festival tiktok section, hundreds of good things to make the year more rich flavor.
  58. 010_MySQL
  59. Of the 4 million docker images, 51% have high-risk vulnerabilities
  60. Rocketmq CPP client visual studio 2019 compilation