Skip to main content

RNF 是什么?

RNF 简介

概览

RNF(全称:RPC-Netty-Framework)是一款动态远程方法调用的 RPC 框架。

解决方案

  • 动态代理远程方法调用的解决方案;
  • IO异步非阻塞的解决方案;
  • 信息摘要算法应用的解决方案;
  • TCP长连接、低延迟的解决方案;
  • 开放组件扩展的解决方案;
  • 自定义安全协议的解决方案;
  • HA高可用性的解决方案;
  • HC高并发的解决方案;
  • 健壮性的解决方案;
  • 分布式超时重试机制的解决方案;
  • 微服务场景应用的解决方案;
  • 分布式缓存与容错故障的解决方案;

主流RPC框架性能对比

性能对比

开放组件

源码及组件

概念

RNF 是一款开源 MavenRPC 框架,遵循 Apache License 2.0 协议,使用前建议用户阅读该声明。

如有涉及版权纠纷请及时联系作者。

服务发布

注册服务

注册服务到注册中心,需要有注册中心支持,完成服务的客户端调用和服务获取。

执行服务

服务注册时,用户编写的服务实现实例会以 k-v 的形式保存到本地(或从其他容器中获取,如 spring 容器)。

换句话说,服务执行是以单例的模式执行的,在 RNF 中以JDK代理和 Javassist 代理为主,主要通过反射调用,这与支持注解依赖在时间会存在一定的问题,阅读 解决方案

注销服务

服务注销发生在服务下线或者服务端关闭时,使用关闭钩子及时注销本地缓存的服务实例和注销注册中心上线的服务。

服务调用

创建代理

客户端不直接创建调用远程服务,而通过创建代理的方式封装反射调用逻辑,待客户端发送请求后,以 Future 的形式,让客户端代理回调处理结果。

发现服务

使用第三方注册中心提供的服务API,获取注册中心上线服务的服务器地址和其他服务信息。

往往需要有注册中心客户端依赖包的支持。

调用服务

客户端可以调用服务,将用户请求的参数逻辑转成远程方法的调用逻辑,通过编码和序列化的方式在网络中传播和接收二进制数据。

数据处理

序列化

序列化是将服务调用请求参数或者服务执行结果从某种语言的实例转成规则的二进制形式,RNF 主要使用了 JSONHessian2KryoCJSON/SJSON(封装 JSON 的跨语言序列化)等工具进行序列化和反序列化。

协议编码

TCP是一个可靠的长连接协议,在这个基础上,需要有编码和解析数据的规范,并且是一种唯一的协议,不能与现有协议冲突,例如 HTTP 协议这种应用层协议。

架构

RPC架构