# fox-root **Repository Path**: cuic/fox-root ## Basic Information - **Project Name**: fox-root - **Description**: RPC框架 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2020-04-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # fox 一个自实现RPC的框架 #### 介绍 RPC框架 #### 软件架构 - **分层架构图** ![输入图片说明](https://images.gitee.com/uploads/images/2020/0517/142551_e602a53e_419644.jpeg "Rpc框架架构概图1.10.jpg") - **Config** : 整体框架配置层 - **Engine** : 整体框架入口层 - **RpcNode** : 框架的业务封装层 实现了客户端/服务端的配置和客户端的对服务节点的保存及负载均衡及服务治理的监听 - **Invocation** : 服务/消费接口透明代理层,实现对Rpc接口Api的调用 - **Registry** : 通过Zookeeper或其他中间件的实现Rpc服务治理的功能,该功能的最小数据单位为每个RpcPrivoder - **Exchange** : 以Message、ExchangeChannel、RpcRequest、RpcResponse对数据封装进行对Rpc数据的应答能力及异步转化为同步的实现对对上层API 实现统一API调用,及对Transporter 连接监听事件发布者的封装。 - **Transporter** : 通过Netty实现底层RPC传输的封装,针对服务的连接、心跳及数据序列化和发送处理、针对服务端连接的管理。 - **Serializable** : Rpc传输的序列化和反序列化组件。 - **调用结构图** ![输入图片说明](https://images.gitee.com/uploads/images/2020/0517/142606_c21bc56f_419644.png "Rpc模块详细架构1.10.png") - **Config** : 整体框架配置层通过默认或自定义来实现框架的配置 - **Engine** : 框架的API入口层 - **ClientBootstrap** : Rpc客户端启动类 - **ServerBootstrap** : Rpc服务端启动类 - **Invocation** : Rpc服务调用层实现Api调用的统一性 - **Proxy** : 客户端利用动态代理机制实现了客户端对服务端服务的Rpc远程调用 - **Inovker** : 服务端调用外置业务容器的执行者并返回结果给底层框架 - **Register** : 服务端Rpc服务注册实现 - **Discovery**: 客户端Rpc服务发现实现 - **RpcClient**: 框架的入口层 实现了客户端配置和客户端的对服务节点的保存及负载均衡及服务治理的监听 - **RpcServer**: 框架的入口层 实现了服务端配置和服务端的对注册中心的注册实现 - **RpcNode**: Rpc服务者的逻辑空间。上层API调用的最小单元 - **Rule**: 针对Rpc客户端对远程服务者地址选取规则的封装,默认为RoundRobin - **ClientExchange**: 客户端以RpcRequest、RpcResponse对数据封装进行对Rpc数据的应答能力、池化链接、及Tcp连接事件的发布者 - **ExchangeChannel**: 客户端对底层Tcp连接的封装 - **ServerExchange**: 服务端以RpcRequest、RpcResponse对数据封装进行对Rpc数据的应答能力、池化链接、及Tcp连接事件的发布者 - **ExchangeHadler**: 处理针对Rpc业务数据封装的RpcRequest和RpcResponse预处理并交给上层API进行调用. - **MessageDispatch**: 服务端Tranposter对Exchange消息的统一分发器 - **ClientTransporter**: 对开源TCP开源框架客户端的封装,统一调用接口Api - **ServerTransporter**: 对开源TCP开源框架服务端的封装,统一调用接口Api - **ChannelHandler**: 处理TCP事件的执行器 连接、断开、心跳、业务数据的请求和应答。 - **Codec**: TCP传输中协议格式的粘包、拆包。 #### 使用说明 因项目多数结构依赖接口开发后期各个组件可以根据自身要求自行实现接口组件。 1. JDK环境为1.8以上。 1. netty版本为 4.1.43.Final 1. zookeeper版本为4.3.0 1. zookeeper客户端为curator 1. 序列化框架为kryo #### Fox-1.2.0-SNAPSHOT 更新说明 1. 添加RpcContext模块.该模块为上层API核心模块,主要包括:代理对象的执行、Rpc服务者与消费者的注册与容器化管理。 1. 修改上层API部分结构(rpcEngine、rpcContainer)使其更能依赖外部容器实现Rpc服务 1. 添加下层API的MarkInterface便于自动化构建 1. 修改RpcModuleConfigure部分代码便于自动化构建 1. 添加NodeDiscovery模块getAndSubscribe方法用于订阅并返回节点消息 1. 重构Rpc启动模块 消费者与服务者启动项合二为一 便于自动化构建 1. 修改RpcClient 代码便于自动化构建以及懒加载 1. **添加fox-rpc-spring-boot-starter 模块来支持spring-boot开发(自动化配置、自扫bean、Rpc节点容器化)** #### Fox-1.1-SNAPSHOT 更新说明 1. 修复客户端因异常导致重试失败的bug 1. 修复kryo序列化已知框架BUG 1. 修正Kryo序列化框架的某些功能,提升其性能 1. 添加config配置功能,优化各层模块支持配置功能 1. 添加rpc服务注解方式配置 1. 添加请求 timeoutException失败重试机制 1. 添加transport-exchange交互层messageDispatcher 实现2个层级之间解耦 1. 添加 RpcDefinition实现engine同源问题 1. 添加Invocation 接口及其默认实现,统一代理层调用 1. 添加ExchangeChannel接口及其实现,统一客户端exchange与transporter之间的调用 1. 优化底层transporter-netty配置 1. 优化transporter-netty心跳控制器 invalid 处理方式由监听方式改为消息分发方式 1. 优化 engine结构 使其支持同源问题 1. 优化 Container 模块 抽离接口 方便日后扩展 1. 优化代理层结构支持同源问题 1. 优化RpcNode 使其支持同源问题 1. 优化包及代码结构,使其结构语意更合理 1. 优化zookeeper客户端及添加封装层 1. 重新编写测试demo 添加同源处理demo #### 未来修改/更新内容 - 更改服务节点下线算法(没太想好,目前算法不影响使用) - 优化invoke结构(通过字节码技术实现插桩调用eg:太懒没写) - 添加定时服务针对各个服务节点进行连接检查 - 添加服务节点配置存储到注册中心的支持(本地已实现待调整) - 添加java-serializable 序列化实现(本地已实现待调整) - 添加protobuf序列化(本地已实现待调整) - 添加针对于客户端请求与响应的过滤器模块(slot已预留) - 添加客户端数据缓存层(其实就是filter模块其中一个子实现) - 添加对spring的支持 bean化 config化 - 添加底层传输的模块的传输传输支持:mina、akka(看心情) #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)