RPC
Remote Procedure Call,远程过程调用 跨进程到跨物理机器 RPC是分布式系统常见的一种通信方法;
跨进程交互形式:RESTful、WebService、HTTP、基于DB做数据交换、基于MQ做数据交换、以及RPC
图解
- 依赖中间件做数据交互
系统A和B异步执行的;
客户端和服务端同步执行的;
RPC中 Server:Provider,服务提供者 Client:Consumer、服务消费者 Stub:存根、服务描述
服务治理:RPC调用和服务管理
RPC核心原理
注册中心不一定是必须的;call是这个结构的关键部分
RPC中重要的部分,3和8的网络传输部分,RPC中肯定要有一个网络管理的模块,系列化,client端;
client中内部有stub对象,server中有对服务管理和服务反射调用的功能;
技术栈
基础:JavaCore、Maven、反射 Maven分成多模块管理
动态代理(生成client存根实际调用对象)
序列化(Java对象与二进制数据互换)fastjson,序列化:Java对象转位二进制数组,反序列化:二进制数组转为Java对象
网络通信(传输序列化后的数据)jetty、URLConnection
tcp长连接是RPC的主流,这里使用HTTP;
实战篇
- step1 创建工程、制定协议、通用工具方法
- step2 实现序列化模块
- step3 实现网络模块
- step4 实现Server模块
- Step5 实现Client模块
- gk-rpc使用案列
类图
Response返回信息 ServiceDescriptor:服务的描述信息
序列化模块:把对象进行序列化和反序列化
网络魔魁啊:基于HTTP实现
Server模块:ServiceInstance暴露出去的实例
client: RemoteInvoke和RpcServer进行交互
动手
1 模块的定义
gk-rpc-client:用户端模块 gk-rpc-codec:序列化和反序列化模块 gk-rpc-common:通用模块 gk-rpc-protol:rpc协议模块 gk-rpc-server:服务端模块 gk-rpc-transport:
|