RPC和REST

什么是RPC?服务器

是指远程过程调用,就是两个服务A、B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,因为不在一个内存空间,不能直接调用,须要经过网络来表达调用的语义和传达调用的数据网络

RPC 会隐藏底层的通信细节(不须要直接处理Socket通信或Http通信) 
RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(相似于Http的工做方式) 架构

那么:并发

  • 首先,要解决通信的问题,主要是经过在客户端和服务器之间创建TCP链接,远程过程调用的全部交换的数据都在这个链接里传输。链接能够是按需链接,调用结束后就断掉,也能够是长链接,多个远程过程调用共享同一个链接。
  • 第二,要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何链接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。好比基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。若是是RMI调用的话,还须要一个RMI Registry来注册服务的地址。
  • 第三,当A服务器上的应用发起远程过程调用时,方法的参数须要经过底层的网络协议如TCP传递到B服务器,因为网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),经过寻址和传输将序列化的二进制发送给B服务器。
  • 第四,B服务器收到请求后,须要对参数进行反序列化(序列化的逆操做),恢复为内存中的表达方式,而后找到对应的方法(寻址的一部分)进行本地调用,而后获得返回值。
  • 第五,返回值还要发送回服务器A上的应用,也要通过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用

一共9步:
1)服务消费方(client)调用以本地调用方式调用服务; 
2)client stub接收到调用后负责将方法、参数等组装成可以进行网络传输的消息体; 
3)client stub找到服务地址,并将消息发送到服务端; 
4)server stub收到消息后进行解码; 
5)server stub根据解码结果调用本地的服务; 
6)本地服务执行并将结果返回给server stub; 
7)server stub将返回结果打包成消息并发送至消费方; 
8)client stub接收到消息,并进行解码; 
9)服务消费方获得最终结果。框架

引用:https://www.zhihu.com/question/25536695/answer/109977506分布式

 

什么是REST?函数

REST是一种架构风格,指的是一组架构约束条件和原则。知足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把全部内容都视为资源,网络上一切皆资源。微服务

REST并无创造新的技术,组件或服务,只是使用Web的现有特征和能力。 能够彻底经过HTTP协议实现,使用 HTTP 协议处理数据通讯。REST架构对资源的操做包括获取、建立、修改和删除资源的操做正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。性能

 

 

REST和RPC的比较:测试

RPC来实现服务间调用的一些痛点:

1.RPC服务提供方与调用方接口依赖方式太强,会致使编码的复杂性,而REST接口相比RPC更为轻量化,服务提供方和调用方的依赖只是依靠一纸契约,不存在代码级别的强依赖。

2.RPC服务对平台敏感,难以简单复用:REST能够实现跨平台,任何一个语言的调用方均可以根据接口定义来实现。

比较项        规范

REST

RPC

通讯协议

HTTP

通常使用TCP

性能

灵活度

 Dubbo采用的RPC的服务调用,SpringCloud采用的REST。

  Dubbo Spring Cloud
服务注册中心 Zookeeper Spring Cloud Netflix Eureka
服务调用方式 RPC REST API
服务监控 Dubbo-monitor Spring Boot Admin
断路器 不完善 Spring Cloud Netflix Hystrix
服务网关 Spring Cloud Netflix Zuul
分布式配置 Spring Cloud Config
服务跟踪 Spring Cloud Sleuth
消息总线 Spring Cloud Bus
数据流 Spring Cloud Stream
批量任务 Spring Cloud Task
…… …… ……

Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件,服务治理只是其中的一个方面。

 

建议:

REST调用及测试都很方便,RPC就显得有点繁琐,可是RPC的效率是毋庸置疑的,因此建议在多系统之间的内部调用采用RPC。对外提供的服务,Rest更加合适。

相关文章
相关标签/搜索