高性能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 和分布式技术
  • 毕业设计:完整的项目架构和文档
  • 二次开发:清晰的代码结构便于扩展

本项目的前置知识

必备知识

  1. C++ 基础:掌握 C++11/14 的核心特性(智能指针、lambda、多线程等)
  2. 网络编程基础:了解 TCP/IP 协议、Socket 编程
  3. 数据结构与算法:基本的数据结构和算法知识

建议掌握

  1. Linux 系统编程:熟悉 Linux 环境下的开发
  2. 多线程编程:理解线程、锁、条件变量等概念
  3. 分布式系统基础:了解分布式系统的基本概念

可选知识

  1. Protobuf:了解 Protobuf 的使用会更容易理解序列化部分
  2. Zookeeper:了解 Zookeeper 的基本原理
  3. 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 顺利完成项目无压力,需要学习该项目的同学,可以微信联系我,添加时务必备注项目名称

wechat