七的博客

手写RPC框架系列- 项目概述

RPC手写系列

手写RPC框架系列- 项目概述

1. 背景

一直想找时间自己实践下 RPC 框架的基本原理,因此准备这几篇博客总结下。 通过这几篇博客可以从零开始构建自己的 RPC ( Remote Procedure Call ) 框架。 你可以学习到 RPC 的基本原理,并最终实现一个精简版本的 RPC 框架。

2. 技术栈介绍

  • Java 语言: 选择最熟悉的 Java 语言进行开发。

  • SpringBoot 2.3.7.RELEASE : 快速搭建以及配置项目。

  • Netty 4.1.45.Final: 网络通信框架,用于实现 RPC 框架的网络通信。

  • Apache curator-recipes : Zookeeper 的 Java 客户端。

  • Zookeeper: 分布式协调系统,用于服务注册以及发现。

  • Maven: 用于管理项目依赖等。

3. 为什么要学习 RPC 框架

在现代的软件开发中,一个项目或者系统或多或少都会由多个服务组成, 服务间的通信成为一个不可或缺的技术点。 通过 RPC 框架允许一个服务透明地调用另一个服务的方法,就像好像调用编程语言的本地函数一样,这可以极大的降低工作量以及重复代码,简化服务间的交互。

通过一步步写一个简单的 RPC 框架,可以了解到 RPC 的工作机制以及软件工程的一些概念,比如网络通信、反序列化、服务发现注册、负载均衡等。学习到了基本的套路之后,可以举一反三比较快速地上手实际项目中的 RPC 框架。

4. 需要提前掌握的知识点

  • 基本的 Java 语言语法、反射相关概念。
  • 会使用 Spring Boot ,掌握基本的使用方式。
  • 对 RPC 框架有基本的概念,最好有实践经验。
  • 有接触过 Zookeeper 或者类似的注册中心。
  • 了解基本的网络通信概念,比如 TCP 以及 HTTP。

5. 整体结构预览

整个系列将会分为多个章节,每个章节 RPC 框架的一个关键点。 章节以及内容暂定为如下:

5.1 手写RPC框架系列(一) - RPC基础理论与架构

  • RPC 是什么

  • RPC 的应用场景

  • RPC 基本工作原理

  • RPC 关键的组件

  • 流行的 RPC 框架介绍

5.2 手写RPC框架系列(二) - 搭建RPC框架基础工程

  • RPC 的工程结构设计

  • Maven 依赖管理

  • 整合 Spring Boot

5.3 手写RPC框架系列(三) - 在RPC框架中实现代理模式

  • 代理模式的基本概念

  • JDK 动态代理以及 JDK 静态代理的基本区别

  • 实现 RPC 客户端的动态代理

5.4 手写RPC框架系列(四) - 实现服务注册与发现机制

  • 服务注册以及发现的必要性
  • 服务注册中心的介绍以及选型
  • Zookeeper 的角色以及作用
  • 基于 Zookeeper 的服务注册以及发现

5.5 手写RPC框架系列(五) - RPC服务的自动扫描与依赖注入

  • SpringBoot 的自动扫描机制
  • 自定义注解以及 Bean 的处理
  • 实现服务自动注册以及依赖注入

5.6 手写RPC框架系列(六) - 构建RPC通信基础

  • 通信协议的选择

  • 序列化以及反序列化

  • 常用的网络通信模型

  • Java 生态的常用的网络编程框架

5.7 手写RPC框架系列(七) - 网络通信框架的选择以及Netty 快速入门

  • 理解 Netty 是什么以及核心组件
  • 为什么要选用 Netty
  • 快速上手 Netty

5.8 手写RPC框架系列(八) - 编写 RPC 网络通信

  • 编写基本的 Netty 服务端以及客户端代码
  • 设计 RPC 通信协议 (包括协议头以及协议体)
  • 实现消息编码解码器
  • 创建业务处理器以处理 RPC 请求
  • 将编解码器以及业务处理器加入 Netty 的 ChannelPipeLine
  • 理解心跳机制以及在 RPC 中的应用

5.9 手写RPC框架系列(九) - RPC请求处理以及应答

  • RPC请求以及应答的实体类抽象。

  • 客户端怎么去发送请求以及维护请求的维护。

  • 服务端怎么去接收请求以及处理本地方法调用。

  • 服务端怎么给客户端应答请求结果。

  • 客户端怎么接收请求结果。

5.10 手写RPC框架系列(十) - 客户端与服务端示例及调用流程

  • 创建公共 API 模块。
  • 创建 客户端示例。
  • 创建 服务端示例。
  • 发起 RPC 调用以及观察调用结果。

5.11 手写RPC框架系列(十一) - 总结与未来展望

  • 总结前面章节知识点
  • 问题以及不足
  • RPC 框架扩展点