vlambda博客
学习文章列表

自己动手,基于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实现单机版的RPC

分模块

我把netty相关的代码放在了一起,按照client、server、common进行分类;
对于注解、工具类和bean的注册器分包放置。

三、拆分后的各层在编码实现时分别有怎样的难点?

  • 如何把rpc组件注册到spring的Ioc容器中?

  • 如何在服务消费方给服务接口生成动态代理并注册到Spring中?

  • 服务提供方如何找到要执行的方法?

  • TCP协议本身是异步的,如何把异步响应结果转换为同步结果?

四、后续的升级迭代努力方向有哪些?

  • 支持集群

  • 插件化扩展

  • 高并发、高可用

也可以用下边的两张图表示,图片来自极客时间《RPC实战与核心原理》专栏

像dubbo一样插件化,让rpc框架变得可维护、易扩展才是更高的目标。