RPC和REST的区别
REST和RPC是两种通讯方式,并不是协议,这一点大家要注意。
REST是基于HTTP协议的,而RPC可以基于HTTP协议来实现,也可以通过TCP协议来实现。
业界普遍采用的做法是,内部系统之间调用用 RPC,对外用 REST,因为内部系统之间可能调用很频繁,需要 RPC 的高性能支撑。对外用 REST 更易理解,更通用些。
API网关内部和外部通讯方式
在进行协议转换前我们要先思考一个问题,从什么协议转成什么协议呢?
我们说的协议转换是把客户端的请求协议转为微服务内部的接口协议,处理完之后再把结果转化成客户端能够接受的协议类型。
- 对于客户端的请求,我们建议采用适用面广泛的REST方式,另外,还可以借助于Swagger这样的工具生成接口代码,对于外部用户来说使用更方便。
- 对于微服务内部的通讯,建议采用性能更好的RPC通讯方式。因为RPC相对于REST方式效率更高一些。
主流的几种RPC框架
RPC框架按可否跨语言来分类,可以分为两种,一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的。
跟语言平台绑定的开源 RPC 框架主要有下面几种:
- Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。
- Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。
- Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言
而跨语言平台的开源 RPC 框架主要有以下几种:
- gRPC:Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。
- Thrift:最初是由 Facebook 开发的内部