Skip to content

binaryyang/MyRPC

Repository files navigation

手写 RPC 框架

项目介绍

本项目基于 Java、Etcd 和 Vetx 实现了一个高性能 RPC 框架,使用自定义协议进行通信。编写了对应的 Spring-boot-starter ,开发者可以通过通过注解和配置快速使用框架;还支持通过 SPI 机制动态扩展序列化器、负载均衡器和重试容错策略。

项目架构

image-20241025112834618

项目组成

全局模块

  1. 加载配置:支持 .properties 和 .yml 格式的配置文件,通过双检索单例模式生成全局唯一的配置对象
  2. 序列化器:支持多种序列化器,如 Jdk 序列化器,Json 序列化器,Hessian 序列化器,kyro 序列化器。
  3. 通信:消费端和服务端通过自定义协议进行通信。

消费端

  1. 使用工厂模式和 jdk 动态代理实现无感知的远程过程调用。
  2. 支持将服务信息缓存到本地,并利用 Etcd 的 watch 监听数据的变化,维护数据的一致性。
  3. 支持多种负载均衡策略,如轮询,随机,一致性哈希。
  4. 支持多种重试策略,如不重试,固定次数重试。
  5. 支持多种容错策略,如快速失败,静默处理。

服务端

  1. 本地服务注册器:将提供的服务和实现类存放在本地的 map 中,方便查找和调用。
  2. 使用 vert.x 的高性能网络服务器,基于 Vert.x 的 Handler 接口实现请求的异步处理,通过 recordParser 解决数据传输过程中的半包粘包问题,

注册中心

默认使用 Etcd 作为注册中心的实现,提供服务注册,发现和心跳检测等功能。

项目亮点

  1. 支持 SPI 机制:框架所使用的序列化器、注册中心、负载均衡策略、容错策略都被定义为接口,用户可以根据需要编写自己的服务实现类,然后将信息注册到配置文件里,框架的 SPI Loader 会自动加载这些实现类。
  2. 使用自定义协议:相比 http 协议,自定义协议的格式更轻,更能满足定制化的需求,在本协议中,消息头只占 17 个字节。
  3. 使用 vert.x 的高性能网络服务器,异步处理请求,采用多路复用技术提高效率。
  4. 编写了对应的 Spring-boot-starter ,开发者可以通过通过注解和配置快速使用框架。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages