一个从零开始构建的高性能Java RPC框架,支持多种序列化协议、负载均衡、服务发现和熔断机制。
- ✅ 多版本演进: 从基础Socket到Netty,逐步完善的RPC实现
- ✅ 多种序列化: 支持JSON、Hessian、Kryo、Protostuff等多种序列化协议
- ✅ 服务治理: 集成ZooKeeper服务发现与注册
- ✅ 负载均衡: 随机、轮询、一致性哈希等多种负载均衡策略
- ✅ 熔断降级: 完善的熔断器机制和限流保护
- ✅ 性能优化: 连接池、线程池、对象复用等全方位优化
- 基于Socket的简单RPC通信
- 同步阻塞IO模型
- 基本的请求响应协议
- 引入Netty异步网络框架
- NIO非阻塞通信
- 自定义编解码器
- ZooKeeper服务注册与发现
- 客户端服务缓存机制
- 动态服务列表更新
- SPI机制支持扩展
- 多种序列化协议
- 配置化框架设计
- 熔断器模式实现
- 限流保护机制
- 负载均衡策略
- 连接池管理
- 全面的监控统计
- 性能基准测试
- 异常处理体系
- 日志追踪系统
- 网络框架: Netty 4.x
- 服务发现: ZooKeeper 3.8
- 序列化: JSON/Hessian/Kryo/Protostuff
- 构建工具: Maven 3.6+
- Java版本: JDK 17+
- 负载均衡: 随机/轮询/一致性哈希
rpc/
├── version1/ # 基础Socket版本
├── version2/ # Netty网络优化
├── version3/ # 服务发现版本
├── version4/ # SPI扩展版本
├── version5/ # 企业级功能版本
├── version6/ # 生产就绪版本
├── benchmark/ # 性能测试模块
└── README.md # 项目说明文档
- JDK 17+
- Maven 3.6+
- ZooKeeper 3.8+
- 启动ZooKeeper
# 使用Docker快速启动
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.8- 运行服务提供者
cd version6/krpc-provider
mvn exec:java -Dexec.mainClass="com.kama.provider.ProviderTest"- 运行服务消费者
cd version6/krpc-consumer
mvn exec:java -Dexec.mainClass="com.kama.consumer.ConsumerTest"// 服务接口
public interface UserService {
User getUserById(Long id);
boolean saveUser(User user);
}
// 客户端调用
UserService userService = ClientProxy.getProxy(UserService.class);
User user = userService.getUserById(1L);// 配置负载均衡策略
@RpcReference(loadBalance = "roundRobin")
private UserService userService;// 配置熔断参数
@RpcReference(
circuitBreaker = true,
failureThreshold = 5,
resetTimeout = 30000
)
private UserService userService;项目包含完整的性能测试套件,涵盖:
- 序列化性能对比
- 网络吞吐量测试
- 负载均衡效率
- 熔断器响应时间
- 高并发压力测试
运行基准测试:
cd benchmark
mvn clean compile exec:javapublic class CustomSerializer implements Serializer {
@Override
public byte[] serialize(Object obj) {
// 自定义序列化逻辑
}
@Override
public <T> T deserialize(byte[] bytes, Class<T> clazz) {
// 自定义反序列化逻辑
}
}public class CustomLoadBalance implements LoadBalance {
@Override
public String select(List<String> serviceUrls) {
// 自定义选择逻辑
}
}- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
感谢所有为本项目做出贡献的开发者,特别感谢在RPC技术领域的先驱者们为我们奠定了坚实的技术基础。