文章目录
- [鱼皮 yu-rpc:从 0 到 1 手写 RPC 框架的实践教程](#鱼皮 yu-rpc:从 0 到 1 手写 RPC 框架的实践教程)
-
- [1、 这玩意儿是干嘛的](#1、 这玩意儿是干嘛的)
- [2、 为什么是个教学项目](#2、 为什么是个教学项目)
- [3、 设计模式怎么落](#3、 设计模式怎么落)
- [4、 适合哪些人](#4、 适合哪些人)
鱼皮 yu-rpc:从 0 到 1 手写 RPC 框架的实践教程
yu-rpc 在 GitHub 上已经拿到 601 Star 了。
这是鱼皮开源的一个 RPC 框架教学项目,专干一件事:用 Java 加 Etcd 加 Vert.x 从零手写一个能跑的 RPC 框架,把基础版和扩展版拆开讲,跟着敲一遍就能填进简历。

1、 这玩意儿是干嘛的
学过 Java 的人多半看过 RPC 这三个字母,但真让你写一个,会发现从网络层到序列化再到注册中心全是坑。市面上的 RPC 框架比如 Dubbo 做得太重,源码读下来累半死,新手想弄懂每一层在干嘛,往往一进来就被绕晕。
yu-rpc 把这件事拆成两段。基础版只讲清楚 RPC 是什么,几个小时的活儿,写完能跑通就行。扩展版往里塞 Vert.x 网络服务器、Etcd 注册中心、自定义网络协议、负载均衡、重试容错、Spring Boot Starter 注解驱动,把一个生产级 RPC 该有的零件一个个手搓一遍。
技术栈选得有点意思。Vert.x 用来做 TCP 服务器,比传统 Servlet 那套轻。Etcd 当注册中心,云原生那一路的活儿。ZooKeeper 也实现了,方便横向对比两套主流方案。序列化器给了 JSON、Kryo、Hessian 三种,配合 SPI 机制做可扩展切换。
2、 为什么是个教学项目
很多简历上的 RPC 项目都是套 Dubbo 壳,问下去连网络层怎么粘包都不知道。这个项目把每一行代码都摆出来给你写。教程把内容切成四十三章,第一章讲简易版十个步骤,第二章从配置加载一路讲到 Spring Boot Starter 注解驱动。

简易版先搭 web 服务器,写本地服务注册器,做序列化器,写请求处理器,最后消费者代理跑通测试,十个步骤走下来 RPC 的基本骨架就有了。扩展版往里加全局配置、Mock 设计、SPI 机制、Etcd 注册中心、心跳续期、服务下线、消费端缓存、Etcd 监听、ZooKeeper 实现、自定义协议、粘包半包处理、装饰者模式、一致性 Hash 负载均衡、Guava Retrying 重试、容错策略。
代码分了几个模块。yu-rpc-core 放核心代码,yu-rpc-easy 是给新手的入门版本,example-common 是示例公用模块,example-consumer 和 example-provider 是裸跑消费者和生产者的样例,后面带 springboot 后缀的是 Spring Boot 集成版本,yu-rpc-spring-boot-starter 单独抽出来做注解驱动,扔进业务项目就能用。
3、 设计模式怎么落
跟着扩展版走一遍,单例、工厂、代理、装饰者这些模式全落在序列化器切换、注册中心切换、负载均衡器切换、重试策略切换、容错策略切换这五个点上。每加一种新实现,就套一次 SPI 加工厂模式,这种结构上的复用比单纯背设计模式记得牢。
反射和注解驱动那块也讲得细。注解打在 service 接口上,框架扫描后生成代理,调用方像调本地方法一样调远程接口,背后跑的是消费者代理那一整套。Spring Boot Starter 把这件事封装成了引入即用,yu-rpc-spring-boot-starter 这个模块单独抽出来,业务方引个依赖就完事。
4、 适合哪些人
简历上想加一个能讲清楚架构来龙去背的 Java 项目的人。跟着 Dubbo 套壳写完问不出细节的,建议来过一遍这种从 0 拼装的过程。准备面 Java 后端岗位,想搞懂 RPC 网络层、序列化、注册中心、负载均衡、容错之间怎么串起来的人。愿意花十几个小时把一个完整项目的代码敲完一遍的初学者。基础版几个小时就能跑通,扩展版内容多,需要跟着教程一章一章做。
项目源码在 GitHub 公开放着,教程第一章节免费看,导学视频也公开,想试水的可以先看第一章再决定要不要往里扎。
第一章节免费看,导学视频也公开,想试水的可以先看第一章再决定要不要往里扎。