演进
stub 封装了 client 对 RPC 服务的调用,屏蔽了网络的细节。
核心
动态代理,是 RPC 的核心。
通过动态代理实现了这个实例。就像 PHP 的 call_user_function 一样,传入了 代理、方法、参数。由代理去做网络的处理细节。远程去连接并调用。
序列化框架
序列化,转换成二进制,另一端反序列化,转换成要处理的对象。
RPC 的序列化框架(Serialize Framework)
- google protobuf
- Hessian
- thrift
- kyro
- json 序列化框架(Jackson、google Gson……)
- xmlrpc
- ……
完整的 RPC 的框架,要包含:服务注册、服务发现、服务治理、服务的负载均衡…… protobuf 只是一个序列化框架。
- 序列化:将对象转换成二进制字节数组
- 反序列化:将二进制字节数组转换成序列化
为什么要用序列化
- 长度变小,节省流量
- 时间更少,响应更快
RPC 网络协议
RPC 还可以选不同的协议,如 http、tcp、webservice、mail等。gRPC 是用的 http2.0 双工的,可以传二进制。
webservice 是 http + xml 的标准化 Web API。XML 纯文本,太大了。几乎要被淘汰了。取而代之的是 RESTful API,http + json。
网友评论