通知:代码随想录算法训练营 53期在下周三(12月25日)正式开营,目前还可以报名!
手写一个RPC框架(Java)是一个很好的入门轮子项目。
总代码也就两千多行,比起动辄几万行的项目,手写RPC是比较容易入门。
同时RPC框架也是很重要的一个轮子。
星球RPC项目(Java)目前已经更新到第五版:
项目代码直接开源到Github:https://github.com/youngyangyang04/RPC-Java
欢迎去star,fork!
本项目专栏(前置知识,模块架构,代码详解,简历写法,面试问题,项目拓展等等)仅开放在知识星球里。
第五版RPC优化了哪里?
相对与RPC项目第四版,第五版补充了如下内容:
1、在前置技术模块中新增了更多学习资料,供录友深入学习。如 Java 动态代理、网络编程资料、netty 的资料等。
2、 从零开始讲解 RPC 框架的具体设计思路,涵盖协议设计、序列化、动态代理、架构设计、网络通信、服务发现、心跳机制、负载均衡、异常重试以及熔断限流等核心环节
3、 在代码详解中,把整个项目分为多个版本。
对每个版本的主要类的方法以及字段都做了详细的讲解。在每个关键类中都提出了问题并作出解答。帮助小伙伴在写代码时,对哪个类不理解,一查便知。
4、更新了第五个版本,一个整体项目进行了拆包,并增加了更多的序列化方式、配置顶、SPI 机制等
5、 补充了经典 RPC 框架的介绍及优缺点,并在对应下面提供了,文档地址和源码链接。
如 gRPC、Dubbo。分析这些框架的好处在于,能够学习成熟的设计理念,深入理解核心模式和技术难点。
同时通过对比性能、扩展性和适用场景,帮助选择更优的方案。此外,这种分析还能避免重复造轮子,将精力聚焦于创新与优化,提升技术积累与实践能力。
6、 提供了更多优化思路。比如自设计的服务中心、改善到微内核架构。
项目特色
本项目不是一口作气就带大家做一个完善的RPC,而是通过四个实现版本循序渐进带大家逐步完善RPC
每一个版本都有详细文章讲解:
每一章的详细讲解中都给出项目架构图,大家可以清晰知道,本章版本在上一版本添加了什么。
版本一,实现一个最简单可以用的RPC:
版本二,添加netty自定义编码器,解码器和序列化器,创建缓存:
版本三,添加负载均衡、超时重试 &白名单:
版本四,服务-限流、熔断:
项目背景与简单介绍
项目背景
随着业务不断升级,系统规模不断扩大, 单体架构会产生越来越多的问题,需要引入微服务将原先架构解耦为一个个模块。
每个服务模块放在不同的服务器上,能够保证系统在高并发环境下的正常运转。
各个服务模块之间如何相互调用,就使用到了RPC协议的思想(远程调用)。
RPC介绍
概念
RPC(Remote Procedure Call Protocol) 远程过程调用协议。 RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。 RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。
常用RPC技术或框架
应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。 通信框架:MINA 和 Netty
为什么要有RPC?
服务化:微服务化,跨平台的服务之间远程调用; 分布式系统架构:分布式服务跨机器进行远程调用; 服务可重用:开发一个公共能力服务,供多个服务远程调用。 系统间交互调用:两台服务器A、B,服务器A上的应用a需要调用服务器B上的应用b提供的方法,而应用a和应用b不在一个内存空间,不能直接调用,此时,需要通过网络传输来表达需要调用的语义及传输调用的数据。
技术栈
fastjson和protobuf等主流数据序列化方式 高性能网络框架netty 分布式协调应用zookeeper 负载均衡算法实现 限流算法实现 重试任务和定时任务在项目场景下的运用
简历写法
学习完本项目,如何写到简历上呢?
Java方向选手一定看过不少带有rpc的简历,写法如出一辙,重复性都很高。
这是因为大部分人的rpc框架都是只实现了最基本的模型,没有对后续的功能进行思考和优化。
这样的项目写进简历没有亮点,面试官也抓不住想问的点。所以,我们要将写简历的重点放在【优化】上。
在知识星球RPC项目专栏 会给出本项目的参考简历写法,为了不让 这些写法重复率太高,所以公众号上是打码的。
本项目常见问题
同时项目专栏也会针对本项目的常见面试问题,经行归类总结,并持续更新
以上仅仅是一部分截图,除了常见问题,还给出基于本项目场景题的案例:
突击来用
如果大家面试在即,实在没时间做项目了,可以直接按照专栏给出的简历写法,写到简历上,然后把项目专栏里的面试问题,都认真背一背就好了,基本覆盖 绝大多数 RPC项目问题。
获取本项目专栏
本文档仅为星球内部专享,大家可以加入知识星球里获取,在星球置顶一:
加入后可以获取知识星球全部项目文档和八股资料 包含:7个C++项目、2个Java项目、两个前端、一个Go项目、最强八股文第五版、面试突击八股文。
这里给出十元代金券,使用后,仅196元一年,可以获得星球里全部资料远不止这个RPC项目,加入星球如果发现不满意,支持3天(72h)内全额退款。
加入星球后,可以加如下微信,发动星球支付截图,拉你到星球交流群: