服务化有什么好处?数据库
RPC:Remote Procedure Call Protocol,远程过程调用协议,像调用本地函数同样,去调用一个远端服务。编程
相比“同一个进程”的“本地”函数调用,有没有办法,调用一个“跨进程”的“远程”函数呢?json
Socket 通信,只能传递连续的字节流,如何将 “入参/函数” 放到连续的字节流里呢?须要设计“应用层报文(协议)”架构
“跨进程”“远程”调用的过程框架
上述跨进程调用远端的服务,存在的问题是没有将通用操做抽离出来。异步
RPC框架职责:函数
向调用方屏蔽各类复杂性,向服务方也屏蔽各类复杂性,让调用方感受上就是在调用本地函数同样,来调用一个远端的服务;让服务方就像实现一个本地函数同样,便捷地提供远端服务。线程
为何须要序列化?设计
须要将对象等数据进行二进制转储。调试
所谓序列化,是将“对象”形态的数据转化为“连续空间二进制字节流”形态数据的过程。
如何将一个 class User
的内存实体 u1 转化为二进制字节流?
方案一:自描述
自描述的标记性语言 (XML/JSON)
,来进行转换。规定好转换规则。
方案二:序列化协议
序号 | key 长度 | key 值 | value 长度 | value 值
RPC-server:IO
线程,中间是一个队列,工做线程处理结果,返回。
调用方调用,生成上下文,编程报文,放入队列;调用结束
一条链接,异步请求、响应报文如何匹配? 能够经过“请求ID”关联!!!
监听一个端口,收发线程收发数据库包,中间一个包队列,工做线程来处理,整个 RPC-Server 就是一个比较简单的生产者-消费者。
什么是 RPC?
像调用本地函数同样,去调用一个远端服务
为何须要 RPC 框架?
用来屏蔽 rpc 调用过程当中,跟业务代码无关的底层技术细节
什么是序列化?为何须要序列化?
将对象转换为二进制流的过程
同步 RPC-Client 的核心组件是什么?
序列化/反序列化、链接池
异步 RPC-Client 的核心组件是什么?
收发队列(用于解耦)、工做线程、上下文管理器