什么是RPC?服务器
是指远程过程调用,就是两个服务A、B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,因为不在一个内存空间,不能直接调用,须要经过网络来表达调用的语义和传达调用的数据。网络
RPC 会隐藏底层的通信细节(不须要直接处理Socket通信或Http通信)
RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(相似于Http的工做方式) 架构
那么:并发
一共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更加合适。