1、什么是RPC

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器(c/s)模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

2、OSI网络七层模型

在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型,它可以分为以下几层(自下而上):

第一层:物理层。这一层主要就是传输这些二进制数据。

第二层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;

第三层:网络层。定义网络设备间如何传输数据;

第四层:传输层。管理着网络中的端到端的数据传输;

第五层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;

第六层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;

第七层:应用层。定义了用于在网络中进行通信和传输数据的接口;

3、RPC调用流程

简单地说一下,一个完整的RPC架构里面包含了四个核心的组件,分别是Client ,Server,Client Stub以及Server Stub

1、 客户端(RPC Client):服务调用方

2、 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方

3、 服务端存根(Server Stub):接受客户端发送过来的消息并解包,再调用本地服务

4、 服务端(RPC Server):真正的服务提供者。

RPC采用C/S模式,请求程序就是一个客户端应用,而服务提供者就是一个服务器。首先,服务消费者(RPC客户端应用)调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务提供方(RPC服务器端),进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,调用服务端方法对调用请求进行计算而得到计算结果,并发送答复信息,然后等待下一个调用信息;最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

4、RPC架构的作用

RPC 的主要目标是让构建分布式计算(应用)更容易、透明,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。

5、常见RPC技术和框架

(1)、应用级的服务框架:阿里的Dubbo/Dubbox、Google GRPC、Spring Boot/Spring Cloud。

(2)、远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。

(3)、通信框架:MINA和Netty

6、HTTP服务 VS RPC服务

传输协议

RPC,可以基于TCP协议,也可以基于HTTP协议

HTTP,基于HTTP协议

传输效率

RPC,使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率

HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理

性能消耗,主要在于序列化和反序列化的耗时

RPC,可以基于thrift实现高效的二进制传输

HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能

负载均衡

RPC,基本都自带了负载均衡策略

HTTP,需要配置Nginx,HAProxy来实现

服务治理(下游服务新增,重启,下线时如何不影响上游调用者)

RPC,能做到自动通知,不影响上游

HTTP,需要事先通知,修改Nginx/HAProxy配置

RPC 服务 与 HTTP 服务的区别相关推荐

  1. 高并发之服务降级和服务熔断____服务降级、熔断、限流的区别

    高并发之服务降级和服务熔断 服务降级: 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行. 同时保证部分甚至大部分任务客户能得到正确的 ...

  2. RPC服务和HTTP服务对比

    很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...

  3. 【微服务】什么是微服务?微服务与分布式的区别?微服务怎么具体实践微服务?服务端发现和客户端发现...

    目录 什么是微服务 微服务与分布式的区别 HOW - 怎么具体实践微服务 So What - 思考 服务发现 微服务之客户端发现,服务端发现 参考资料和推荐阅读 什么是微服务 https://zhua ...

  4. 【微服务】什么是微服务?微服务与分布式的区别?微服务怎么具体实践微服务?服务端发现和客户端发现

    目录 什么是微服务 微服务与分布式的区别 HOW - 怎么具体实践微服务 So What - 思考 服务发现 微服务之客户端发现,服务端发现 参考资料和推荐阅读 什么是微服务 https://zhua ...

  5. RPC框架与REST服务

    1.常见的RPC框架 Dubbo:阿里开源的框架,仅支持Java语言. gRPC:Google开源的框架,支持多种语言. Thrift:Facebook开源框架,支持多种语言. Tars:腾讯开源的框 ...

  6. java服务降级与服务熔断区别_服务降级和服务熔断

    服务熔断 在微服务架构中,微服务之间的数据交互通过远程调用完成,微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,此时如果链路上某个微服务的调用响应时间过长或者不可用,那么对微服务 ...

  7. 单体、集群、分布式、SOA、微服务之间的联系与区别

    单体.分层架构.集群.分布式.SOA.微服务之间有什么联系和区别? 1.概念提出时间 单体 : 60.70年代 分层 : 20世纪80年代 集群: 1990年 分布式:1994年 SOA: 1996年 ...

  8. 白话:服务降级与熔断的区别

    虽然之前在<Spring Cloud构建微服务架构>系列文章中介绍了Hystrix服务降级与Hystrix断路器的概念.但是,还是一直收到这样的提问:降级与熔断区别是什么?并且在很多交流过 ...

  9. 一文探讨 RPC 框架中的服务线程隔离

    Kirito 推荐语:最近秋招开始了,很多学生开始准备起了秋招,有很多人想知道进一些有名的互联网公司实习有什么要求,正好最近跟一位阿里春招的实习小伙子聊了一些 RPC 相关的知识点,于是我把这篇他的思 ...

最新文章

  1. Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)
  2. boost::mpl::times相关的测试程序
  3. 读取Excel的文本框,除了解析xml还可以用python调用VBA
  4. JUnit 5 –扩展模型
  5. JAVA校内报纸实验_实验(实训)中心2011—2012学年第二学期工作计划
  6. (Foxit PDF阅读器设置)禁止改变当前缩放比例,改善书签跳转阅读体验
  7. archLinux 安装拼音输入法
  8. Atitti 编程语言高级 api 与高级知识 堆栈api 异常api Meta anno注解元数据api Ref 反射api Database meta api 字节码库如果你正在编写一个框架或者
  9. 全国OA系统下载 (转)
  10. 一页纸商业计划书 (Business Plan) 模板(转载)
  11. 互联网协议第四版ipv4
  12. WPS表格 JSA 学习笔记
  13. c语言名人名言大全,文明的名人名言集锦
  14. MySQL Java的JDBC编程
  15. 我的世界服务器矿怎么无限刷,我的世界中可以无限刷矿的指令是什么quest; | 手游网游页游攻略大全...
  16. wlop一张多少钱_回答:小白有个问题,为什么很多人都说 WLOP鬼刀 的画不够好?...
  17. css icon旋转
  18. 测试软件cpu占用率 可以用,CPU占用率检测工具
  19. gdut-与蓝神一起戳气球 hnust-硬币翻转 - 博弈论
  20. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. bmob php支付,支付服务 - 支付服务RESTful 开发文档 - 《Bmob 文档中心》 - 书栈网 · BookStack...
  2. Arrays类详细讲解
  3. oracle 删除表 索引也会删除吗,Oracle 删除当前用户下所有的表、索引、序列
  4. 分段二次插值例题_分段三次插值
  5. python中网页关闭再打开_Python Selenium 之关闭窗口close与quit的方法
  6. 您已从远程计算机注销,您无法从 Windows Server 2008 R2 中的远程桌面会话注销
  7. mysql+linux+无法启动服务无法启动不了_Linux实例中MySQL服务常见的无法启动或启动异常处理...
  8. java通信项目_Java项目中的多线程通信如何利用Socket实现
  9. mysql 5.7 数据库备份_MySQL5.7.20数据库备份与恢复
  10. android 支付宝月账单 统计图_记账其实很简单,用微信、支付宝就够了!