likes
comments
collection
share

「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?

作者站长头像
站长
· 阅读数 16

文章所提的项目代码已经在 Github 上开源了,Github 源码地址在这里!

好日子,宣布一件事情!

好日子

12月有个好日子,20211202,从左往右读,接着从右往左读你会发现居然是对称的,这是属于程序员的「浪漫」,身边有程序员朋友还特地选择了今天去领证。

熟悉算法的小伙伴应该发现了,这就是经典的算法题:「回文串」,那么问题来了,你知道下一个回文串日期是什么时候吗?评论区见~

既然是个好日子,那不能浪费啊,总得搞搞搞搞搞点事情吧。

最近一段时间思绪很乱,加上工作上巨忙,经常会怀疑自己:我现在做的事情有价值吗?我写的文章是不是能帮助到读者?文章写的通俗易懂吗?后面应该写什么?

每当我想放弃的时候,总会看到一些小伙伴们发来一些私信:雷小帅,你写的技术文章对我太有用了,通俗易懂,思路清晰,我在车上看的太专注了,都坐过站了。

有些话可能是开玩笑,但至少是帮助和影响了部分人,这对于我来说是莫大的鼓励,很欣慰!

既然还有人惦记,那必然不能让大家失望。回顾近一年,作为技术博主输出了很多技术文章:

  • 《玩转 Redis 面试》
  • 《图解分布式&中间件》
  • 《死磕 Java 并发编程》
  • Java 学习路线
  • Java 八股文
  • 《五分钟入门系列》
  • 武汉互联网
  • ……若干水文

一篇文章的产生通常会经过:选题、构思、画图、排版这些步骤,稍微用点心,至少得花三个晚上以上。

那这样一篇文章会产生多大价值呢?大部分人可能是这样的状态:读完了,写的不错 = 我学会了 ,但实际在工作或者面试中遇到时又忘了,究其原因是:懂了很多「点」但无法将知识点连成「线」和「面」,从而无法将学的东西运用到项目中来。

那最好的办法就是「项目实战」,以战促学。前一阵子,我也在 B 站(id:程序员雷小帅,欢迎关注)直播过几次,本来想带着大家一起直播写个项目,奈何电脑太卡了,开了直播软件,我的 IDE 就卡的不行,只好放弃了。

最近我想了一下,做一个这样的业务项目其实也没什么意思,无非就是增删改查,企业中真正的难点是「理解业务」,而真正涉及到的技术难点都会交给基础框架组或者中间件组搞定。

那既然这样,我们是不是也应该干点他们干的事情呢?是的,我想到了一个idea:自己造一个 RPC 轮子

为什么你需要学习造轮子

投资自己

有人要问了:现在各种好用的框架都开源了,直接拿过来用不就得了,自己造一个不是浪费时间么?

这个问题看你用什么视角看了,如果从领导视角看:

领导:现在项目交付这么紧,你赶紧找个开源项目,copy 改一下,能跑起来就可以了。

有技术追求的哥哥:我想自己写一个框架,性能肯定比开源的那个好。

领导:这周五你得把项目交付了,你自己看着办吧?!

领导在乎的是你能不能快速交付项目,能不能快速产生价值创造收益。

如果从自己的视角来看:

有技术追求的哥哥:这个框架我已经实现了

领导:好用吗?

有技术追求的哥哥:通过写这个框架,我学到了好多知识,我已经开源了,好多 star

领导:项目已经延期了,你明天不用来了。

通过自己造一个,学到了很多以前没接触到的东西,自己的技术有了更进一步的提升。

那你们说:自己造一个轮子,是浪费了时间吗?

不要成为调包侠

很多人进入公司后都会陷入复杂的业务场景,一周可能要花四天讨论业务,剩下一天就可以把代码写完了。

回过头想想,我们写的是什么代码呢?大多数是在写 CRUD,写 if else for,调一调开源的 jar 包接口。

  • 以为是在写高并发,有牛逼技术的代码,其实是个 CRUD boy。
  • 以为懂得了各种中间件,其实只是学会了如何调用他们的接口,是个调包侠。

我不是在诋毁写业务代码的人,而是怕大家对自己有误解。

如果想在技术上有更进一步的成长,你必须要跨过 CRUD boy调包侠这个阶段,深入到框架底层,熟知源码和原理。

通过造轮子你能学到什么?

敲黑板:首先强调一下造轮子的目的不是为了放在生产上面去用,而是通过造轮子促进你学习,让你将零散的知识点贯穿起来。

这一次我会带领大家从零开始撸一个 RPC 框架,如果你还不知道 RPC 是什么?建议你先去了解一下。

目前常见的 RPC 框架有:

  • 阿里 Dubbo
  • 谷歌gRPC
  • Apache Thrift
  • 微博 Montan
  • SpringCloud(类似)
  • ……等

我们会参考 Dubbo 框架去写一个 mini 版的 RPC 框架,实现最基本和核心的功能。

如果你认真学下来,可以掌握以下的技术:

  1. 底层网络层基于 netty,学完 netty 入门没有问题;
  2. 使用自定义注解,学完可以了解注解的基本运行机制;
  3. 服务注册基于 zookeeper,学完 zk 入门没有问题;
  4. 会用到反射机制;
  5. 会用到动态代理技术;
  6. 教你如何定义一个 xxx-spring-boot-starter,了解spring boot自动配置机制;
  7. 学会如何自定义配置项,并绑定到 bean;
  8. 学习监听 spring 容器的事件;
  9. ……等等

有没有一点心动呢?!

下一步计划

这篇文章就当做是一个引入和前言吧,主要是为了增强大家的信心,肯定是能学到东西的。

下一步,我会用多篇文章详细介绍 RPC 框架的源码以及涉及到的技术点,还会将框架源代码放到 Github 上供大家下载学习,包教包会,后面面试拿这个出去吹牛B 完全没有问题。

框架项目的代码已经在 Github 上开源了:

源码在这里!Github开源项目,从零开始撸一个 RPC 框架

如果大家特别感兴趣后面也可以开直播讲解哦~ (B站ID:程序员雷小帅,欢迎提前关注)

好了,我是雷小帅,以上就是今天的全部内容啦,如果你对手动造一个轮子感兴趣,三连支持一下吧,给点信心~

敲黑板:这是一个系列文章,欢迎大家持续关注!

转载自:https://juejin.cn/post/7044535634119098404
评论
请登录