高性能RPC框架 - 从零自研企业级分布式通信框架
大约 8 分钟
本项目是什么?
本项目是一个从零自研的高性能 RPC 框架,旨在提供企业级的分布式系统通信能力。
RPC(Remote Procedure Call,远程过程调用)是分布式系统的核心技术,它让调用远程服务就像调用本地函数一样简单。
本项目实现了一个功能完整、性能优异的 RPC 框架,支持多种序列化协议、负载均衡策略、服务注册与发现等企业级特性。
本项目代码更简洁、架构更清晰,非常适合用来学习 RPC 的核心原理和分布式系统的设计思想。同时,项目采用模块化设计,每个模块都可以独立学习和测试,让你能够逐步掌握从网络传输到服务治理的完整技术栈。
本项目有哪些独特优势?
相比于工业界的成熟 RPC 框架,本项目作为学习型项目具备以下独特优势:
1. 完整的企业级功能
- 多协议支持:支持 JSON、Protobuf 等多种序列化协议
- 负载均衡:实现随机、轮询、权重三种负载均衡算法
- 服务注册与发现:基于 Zookeeper 实现服务的动态管理
- 数据压缩:支持 Zlib、Zstd 两种压缩算法,减少网络传输开销
- 安全通信:使用 OpenSSL 实现数据加密传输
- 高可用设计:包含重试机制、过载保护、异步处理等
2. 清晰的模块化架构
项目采用分层设计,各模块职责明确、低耦合高内聚:
- 网络层:处理 TCP 连接、消息收发
- 协议层:定义 RPC 通信协议
- 序列化层:支持多种序列化方式
- 服务治理层:负载均衡、服务注册与发现
- 传输优化层:压缩、加密
- 业务层:服务定义与调用
3. 代码简洁,适合学习
- 核心代码量适中,相比 gRPC 等工业级框架更容易理解
- 完善的示例代码,每个模块都有独立的测试和演示
- 清晰的目录结构,一目了然
4. 实用的性能优化
- 线程池:高效的任务调度和处理
- 缓存机制:减少重复的服务发现开销
- 异步处理:提升系统并发能力
- 连接管理:支持连接复用和管理
本项目的核心功能
1. 系统架构设计
模块化设计:将系统划分为网络传输、序列化、服务注册与发现、压缩解压、加解密等多个模块,确保系统的灵活性和可维护性。
高可用保障:使用多种负载均衡手段、重试机制、过载保护,确保服务的高可用性。
2. 序列化与反序列化
- 多协议支持:支持 JSON、Protobuf 等多种序列化协议,满足不同数据格式的需求
- 高效处理:优化序列化和反序列化的性能,减少数据传输的开销
- 灵活切换:通过配置即可切换不同的序列化方式
3. 网络传输
- 高效的网络模型:基于高性能的网络编程实现
- 多种负载均衡策略:随机、轮询、加权轮询,优化资源利用,提高系统吞吐量
- 连接管理:支持连接池和连接复用
4. 服务注册与发现
- 动态扩展:使用 Zookeeper 支持服务的动态注册与发现,方便服务的扩展和缩减
- 一致性保证:确保服务注册信息的一致性和可靠性
- 实时更新:服务上下线实时感知
5. 安全性
- 加密通信:使用 OpenSSL 实现数据传输的加密,确保通信的安全性
- 认证机制:支持服务间的身份认证
6. 性能优化
- 异步处理:支持异步调用和处理,提高系统的并发能力
- 缓存机制:引入缓存机制,减少获取服务列表的频率
- 线程池:高效的任务调度,避免频繁创建销毁线程
7. 数据压缩
支持多种压缩算法,可根据不同使用场景选择:
- Zlib:广泛使用的压缩算法,具有良好的通用性和兼容性。在压缩率和处理速度之间取得较好的平衡
- Zstd:以高压缩比和快速的压缩解压速度著称。在处理大数据集时,可以在不牺牲过多性能的前提下实现更高的压缩效率
本项目适合哪些人?
适合学习者
- 后端开发工程师:想要深入理解 RPC 原理和分布式系统通信机制
- 系统架构师:希望掌握微服务架构中的服务通信技术
- 校招生和毕业三年内的社招同学:需要一个有深度、有亮点的项目作品
- 技术爱好者:对网络编程、分布式系统感兴趣
适合场景
- 校招/社招准备:作为简历亮点项目
- 技术提升:系统性学习 RPC 和分布式技术
- 毕业设计:完整的项目架构和文档
- 二次开发:清晰的代码结构便于扩展
本项目的前置知识
必备知识
- C++ 基础:掌握 C++11/14 的核心特性(智能指针、lambda、多线程等)
- 网络编程基础:了解 TCP/IP 协议、Socket 编程
- 数据结构与算法:基本的数据结构和算法知识
建议掌握
- Linux 系统编程:熟悉 Linux 环境下的开发
- 多线程编程:理解线程、锁、条件变量等概念
- 分布式系统基础:了解分布式系统的基本概念
可选知识
- Protobuf:了解 Protobuf 的使用会更容易理解序列化部分
- Zookeeper:了解 Zookeeper 的基本原理
- CMake:项目使用 CMake 构建,了解 CMake 有助于自定义编译
学习完本项目能收获到什么?
1. 深入理解 RPC 通信原理
你将从零实现一个完整的 RPC 框架,掌握:
- RPC 调用的完整流程
- 网络协议的设计与实现
- 服务端和客户端的交互机制
2. 掌握分布式系统核心技术
- 服务注册与发现:理解微服务架构中服务如何管理
- 负载均衡:掌握多种负载均衡算法的实现
- 服务治理:学习服务的健康检查、故障转移等机制
3. 精通网络编程
- Socket 编程:深入理解 TCP 通信
- 网络 IO 模型:掌握高性能网络编程技术
- 协议设计:学习如何设计高效的网络协议
4. 掌握序列化技术
- 理解不同序列化协议的优劣
- 掌握 JSON、Protobuf 的使用
- 学习如何设计可扩展的序列化框架
5. 学习性能优化技术
- 线程池设计:实现高效的任务调度
- 异步编程:提升系统并发能力
- 数据压缩:减少网络传输开销
- 缓存优化:降低系统延迟
6. 掌握企业级系统设计能力
- 模块化设计:学习如何将复杂系统拆分为清晰的模块
- 接口设计:掌握良好的 API 设计原则
- 配置管理:学习使用配置文件管理系统参数
- 可扩展性:理解如何设计易于扩展的系统
7. 提升 C++ 工程能力
- 实践现代 C++ 特性(智能指针、右值引用、lambda 等)
- 掌握多线程编程技术
- 学习 CMake 项目构建
- 理解大型 C++ 项目的组织方式
8. 了解常用中间件的使用
- Zookeeper:分布式协调服务
- OpenSSL:加密通信库
- Protobuf:高效序列化协议
- Zstd/Zlib:数据压缩库
9. 建立高质量的项目作品
- 完整的功能模块,展示系统设计能力
- 清晰的代码结构,体现工程素养
- 丰富的技术栈,证明学习能力
- 可运行的 Demo,增强说服力
10. 为进阶微服务架构打下基础
本项目将为你后续学习和使用以下技术打下坚实基础:
- gRPC、Thrift 等主流 RPC 框架
- Spring Cloud、Dubbo 等微服务框架
- 服务网格(Service Mesh)技术
- 云原生架构
项目代码结构
├── CMakeLists.txt
├── README.md
├── build.sh // 编译脚本
├── config
│ └── rpc_server.json // 配置文件
├── example
│ └── client_demo.cpp // 简单 demo
├── protos
│ ├── compile_proto.sh
│ ├── message.pb.cc
│ ├── message.pb.h
│ └── message.proto
├── rpc_src
│ ├── compress_data // 压缩模块,目前提供了 zstd
│ │ ├── CMakeLists.txt
│ │ ├── demo_main.cpp
│ │ ├── zstd_compress.cpp
│ │ └── zstd_compress.h
│ ├── conn_balancer // 负载均衡,提供了三种负载均衡算法
│ │ ├── CMakeLists.txt
│ │ ├── demo.sh
│ │ ├── load_balancer.cpp
│ │ ├── load_balancer.h
│ │ ├── random.h
│ │ ├── round.h
│ │ ├── test_main.cpp
│ │ ├── weight.h
│ │ ├── zk_conn_handler.cpp
│ │ └── zk_conn_handler.h
│ ├── core // 核心代码,服务端客户端
│ │ ├── client_main.cpp
│ │ ├── client_main.h
│ │ ├── error_code.h
│ │ ├── rpc_service.h
│ │ └── servers_main.cpp
│ ├── generate_code // 代码生成模块
│ │ ├── CMakeLists.txt
│ │ ├── parse_proto.cpp
│ │ ├── parse_proto.h
│ │ └── user.proto
│ ├── load_config // 配置文件加载,使用 nlohmann_json 来加载配置文件
│ │ ├── registry_config.cpp
│ │ ├── registry_config.h
│ │ ├── rpc_server_config.cpp
│ │ ├── rpc_server_config.h
│ │ ├── thread_pool_config.cpp
│ │ └── thread_pool_config.h
│ ├── network // 网络连接相关
│ │ ├── connection.cpp
│ │ ├── connection.h
│ │ ├── connection_manager.cpp
│ │ ├── connection_manager.h
│ │ ├── create_socket.cpp
│ │ ├── create_socket.h
│ │ ├── message_cycle.cpp
│ │ └── message_cycle.h
│ ├── protocol // rpc 协议相关
│ │ ├── rpc_protocol.cpp
│ │ └── rpc_protocol.h
│ ├── registry // 注册模块 zookeeper
│ │ ├── CMakeLists.txt
│ │ ├── demo.sh
│ │ ├── service_registry.cpp
│ │ ├── service_registry.h
│ │ └── test_registry.cpp
│ ├── serializer //序列化和反序列化,目前是支持 json 和 proto
│ │ ├── CMakeLists.txt
│ │ ├── demo_main.cpp
│ │ ├── json_serializer.h
│ │ ├── protobuf_serializer.h
│ │ ├── serializer_manager.h
│ │ └── test.sh
│ ├── service
│ │ ├── service.h
│ │ └── service_manager.h
│ └── thread_pool // 线程池相关
│ ├── CMakeLists.txt
│ ├── task_processor.cpp
│ ├── task_processor.h
│ ├── test.sh
│ ├── test_main.cpp
│ ├── thread_pool.cpp
│ └── thread_pool.h
└── utils // 常用函数
├── log_manager.h
├── util_fun.cpp
└── util_fun.h
有完整训练计划做支撑,再加上导师针对性帮扶,让你从 0 到 1 顺利完成项目无压力,需要学习该项目的同学,可以微信联系我,添加时务必备注项目名称






