时间来不及,快速手撕RPC项目

文摘   2024-08-27 11:31   广东  

星球里关于CPP的项目,已经有四个了,质量都很高:

但星球里一直都缺一个高质量的Java项目,这次终于来了!

这次我们手撕一个RPC项目:

项目代码直接开源到Github:https://github.com/youngyangyang04/RPC-Java

欢迎去Github上star,fork

本项目以专栏的方式发布到 知识星球,在星球置顶一,大家就可以看到该项目专栏。

本项目专栏(详细讲解)仅开放在知识星球

如果大家不加入知识星球,也可以通过源码学习本项目,当然希望大家可以加入星球支持一波。

项目特色

本项目不是一口作气就带大家做一个完善的RPC,而是通过四个实现版本循序渐进带大家逐步完善RPC

每一个版本都有详细文章讲解:

每一章的详细讲解中都给出项目架构图,大家可以清晰知道,本章版本在上一版本添加了什么。

版本一,实现一个最简单可以用的RPC:

版本二,添加netty自定义编码器,解码器和序列化器,创建缓存:

版本三,添加负载均衡、超时重试 &白名单:

版本四,服务-限流、熔断:

项目背景与简单介绍

项目背景

随着业务不断升级,系统规模不断扩大, 单体架构会产生越来越多的问题,需要引入微服务将原先架构解耦为一个个模块。

每个服务模块放在不同的服务器上,能够保证系统在高并发环境下的正常运转。

各个服务模块之间如何相互调用,就使用到了RPC协议的思想(远程调用)。

RPC介绍

概念

  1. RPC(Remote Procedure Call Protocol) 远程过程调用协议。
  2. RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
  3. RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。

常用RPC技术或框架

  • 应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
  • 远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
  • 通信框架:MINA 和 Netty

为什么要有RPC?

  1. 服务化:微服务化,跨平台的服务之间远程调用;
  2. 分布式系统架构:分布式服务跨机器进行远程调用;
  3. 服务可重用:开发一个公共能力服务,供多个服务远程调用。
  4. 系统间交互调用:两台服务器A、B,服务器A上的应用a需要调用服务器B上的应用b提供的方法,而应用a和应用b不在一个内存空间,不能直接调用,此时,需要通过网络传输来表达需要调用的语义及传输调用的数据。

技术栈

  • fastjson和protobuf等主流数据序列化方式
  • 高性能网络框架netty
  • 分布式协调应用zookeeper
  • 负载均衡算法实现
  • 限流算法实现
  • 重试任务和定时任务在项目场景下的运用

简历写法

学习完本项目,如何写到简历上呢?

Java方向选手一定看过不少带有rpc的简历,写法如出一辙,重复性都很高。

这是因为大部分人的rpc框架都是只实现了最基本的模型,没有对后续的功能进行思考和优化

这样的项目写进简历没有亮点,面试官也抓不住想问的点。所以,我们要将写简历的重点放在【优化】上。

在 知识星球 RPC项目专栏(https://t.zsxq.com/0CVPn)里会给出本项目的参考简历写法,为了不让 这些写法重复率太高,所以公众号上是打码的。

本项目常见问题

同时项目专栏也会针对本项目的常见问题,经行归类总结,并持续更新

以上仅仅是一部分截图,除了常见问题,还给出基于本项目场景题的案例

项目专栏部分截图

突击来用

如果大家面试在即,实在没时间做项目了,可以直接按照专栏给出的简历写法,写到简历上,然后把项目专栏里的面试问题,都认真背一背就好了,基本覆盖 绝大多数 RPC项目问题。

当然建议还是要花时间认真来做这个项目,这样会有真正能力上的提升。

获取本项目专栏

本项目专栏仅为星球内部专享,大家可以加入知识星球 里查看,在星球置顶一:

知识星球支持三天(72h)内全额退款,可以进去看看,星球里的资料都可以获取,如果感觉没收获就退款,退款方式在知识星球APP右上角。(全程无套路)

扫码加入代码随想录知识星球,方向比努力更重要,一群人可以走的更远!


代码随想录
认准代码随想录,学习算法不迷路。 刷题网站:programmercarl.com
 最新文章