RPC(Remote Procedure Call)即远程过程调用,说简单点就是服务端和客户端遵守一套约定好的协议,然后客户端就可以调用服务端的函数。目前主流的rpc框架对比如下:
| 功能 | Hessian | Montan | rpcx | gRPC | Thrift | Dubbo | Dubbox | Spring Cloud |
| 开发语言 | 跨语言 | Java | Go | 跨语言 | 跨语言 | Java | Java | Java |
| 分布式(服务治理) | × | √ | √ | × | × | √ | √ | √ |
| 多序列化框架支持 | hessian | √(支持Hessian2、Json,可扩展) | √ | × 只支持protobuf) | ×(thrift格式) | √ | √ | √ |
| 多种注册中心 | × | √ | √ | × | × | √ | √ | √ |
| 管理中心 | × | √ | √ | × | × | √ | √ | √ |
| 跨编程语言 | √ | ×(支持php client和C server) | × | √ | √ | × | × | × |
| 支持REST | × | × | × | × | × | × | √ | √ |
| 关注度 | 低 | 中 | 低 | 中 | 中 | 中 | 高 | 中 |
| 上手难度 | 低 | 低 | 中 | 中 | 中 | 低 | 低 | 中 |
| 运维成本 | 低 | 中 | 中 | 中 | 低 | 中 | 中 | 中 |
| 开源机构 | Caucho | Apache | Apache | Alibaba | Dangdang | Apache |
公司内部目前使用的方案是(server mesh or http) + protobuf,并不是真正意义上的RPC,最近自己研究了下,可以采用Thrift实现远程服务调用,然后使用zookeeper构建服务发现和治理功能。下面主要介绍Thrift的使用。
Thrift项目的使用主要为以下流程(安装工具环境等请自行百度):
服务端:
1.定义接口文件
2.根据接口文件利用命令生成服务端对应语言的接口代码
3.构建服务端代码,部署服务端代码
客户端:
1.找服务端开发获取其定义的接口文件
2.根据接口文件利用命令生成客户端对应语言的接口代码
3.构建客户端代码,调用服务端方法



