自己动手,基于netty实现单机版的RPC
上篇文章,我介绍了一下基于Http协议实现了单机版RPC, 而RPC框架通常会采用TCP作为网络通信协议,所以这两天我又运用netty(一个异步的、事件驱动的高性能网络应用程序框架)、基于TCP协议实现了一个RPC的demo, 后续再基于此demo做迭代升级。
一、RPC由哪几个部分组成?分别有怎样的解决方案?
网络通信:三种网络IO模型——BIO、NIO、AIO
序列化:JDK原生序列化、JSON、Hessian、Protobuf、ProtoStuf
动态代理:jdk的InvocationHandler、Javaassist 、byte buddy、cglib
二、如何分模块、分层?
分模块
我并没有像其他netty rpc示例那样,把rpc的代码和业务代码耦合在一起,而是将两者进行了解耦
而这里的netty_rpc_common就是用来模拟rpc框架的,需要服务的提供方和消费方来依赖。
分模块
我把netty相关的代码放在了一起,按照client、server、common进行分类;
对于注解、工具类和bean的注册器分包放置。
三、拆分后的各层在编码实现时分别有怎样的难点?
如何把rpc组件注册到spring的Ioc容器中?
如何在服务消费方给服务接口生成动态代理并注册到Spring中?
服务提供方如何找到要执行的方法?
TCP协议本身是异步的,如何把异步响应结果转换为同步结果?
四、后续的升级迭代努力方向有哪些?
支持集群
插件化扩展
高并发、高可用
…
也可以用下边的两张图表示,图片来自极客时间《RPC实战与核心原理》专栏
像dubbo一样插件化,让rpc框架变得可维护、易扩展才是更高的目标。