REST VS RPC

首先说一下为什么要做微服务。
当你有 100台MySQL数据库,1000个Redis,1000个ES,1万个容器,部署着100种服务。

无论是微服务、SOA、还是 RPC 架构,它们都是分布式服务架构,都需要实现服务之间的互相通信,我们通常把这种通信统称为 RPC 通信。

RPC(Remote Process Call),即远程服务调用,是通过网络请求远程计算机程序服务的通信技术。RPC 框架封装好了底层网络通信、序列化等技术,我们只需要在项目中引入各个服务的接口包,就可以实现在代码中调用 RPC 服务同调用本地方法一样。

小型的项目用什么语言都行,爱用什么用什么。但是,真正的企业级架构就不一样了,其中并不仅仅只是 RESTful API 或 RPC,还有各种配套设施和控制系统,比如:应用网关,服务发现、配置中心、健康检查、服务监控、服务治理(熔断、限流、幂等、重试、隔离、事务补偿)、Tracing监控、SOA/ESB、CQRS、EDA……

本文不会告诉你必须用什么,但是会告诉你两者的优缺点。

rest 以 springcloud为例,rpc以dubbo为例。

从性能上来讲,在数据量小(单个请求小于20K)并发大的场景下,rpc的性能比restful api的性能要好。
从上手、使用、维护 方面来说,springcloud更容易上手、维护。

各组件配置使用运行流程:
1、请求统一通过API网关(Zuul)来访问内部服务.
2、网关接收到请求后,从注册中心(Eureka)获取可用服务
3、由Ribbon进行均衡负载后,分发到后端具体实例
4、微服务之间通过Feign进行通信处理业务
5、Hystrix负责处理服务超时熔断
6、Turbine监控服务间的调用和熔断相关指标

springcloud提供了微服务所需的全套组件,降低了架构和开发成本,解决了微服务的多个痛点问题。具体如下:

  1. 注册中心
  2. 配置中心
  3. 服务间的调用方式
  4. 链路追踪
  5. 服务的限流、降级、熔断

如果使用dubbo,配置中心、分布式跟踪这些内容都需要自己去集成,无形中增加了难度。

References

[1] 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
[2] 比较spring cloud和dubbo,各自的优缺点是什么
[3] 中小型互联网公司微服务实践-经验和教训
[4] SpringBoot和SpringCloud为什么会那么火?对开发有哪些帮助?
[5] 项目中为什么首先spring cloud,而不是dubbo
[6] Microservices-微服务原文