RPC:Remote Procedure Call,远程过程调用
一个RPC框架要解决的问题:
一. 数据的序列化与反序列化
跨语言的序列化方案
事实上的跨语言序列化方案: protobuf, thrift, json
二. 数据传输
1. 序列化与反序列化(采用的二进制通信协议(所谓协议就是数据报文格式))
为什么单独把这个RPC框架要解决的问题呢,难道前后端的调用不需要序列化与反序列化吗?难不成前后端调用也是一个RPC吗?
如果抛开使用场景,个人感觉他们是一样的。
不同之处在于一个是前端调用后端,一个是后端调用后端服务,而且后端调用的时候,像是调用本地服务一样方便快捷。
比较下feign组件与dubbo组件的区别:
feign:用的是http协议调用的,采用JSON序列化,xml序列化;
dubbo:是基于TCP层实现的,默认采用的是dubbo协议,采用的序列化方式是
hessian 二进制序列化。还有二进制 thrift/protobuf等。
- 数据库传输
feign:http,属于应用层
dubbo:默认dubbo,还可以选择Rmi、http、redis等
场景比较:
feign:多用于前后端调用
dubbo:多用于系统内部调用