「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?
Posted 爱笑的架构师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?相关的知识,希望对你有一定的参考价值。
目录
好日子,宣布一件事情!
好日子
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 框架,实现最基本和核心的功能。
如果你认真学下来,可以掌握以下的技术:
-
底层网络层基于 netty,学完 netty 入门没有问题;
-
使用自定义注解,学完可以了解注解的基本运行机制;
-
服务注册基于 zookeeper,学完 zk 入门没有问题;
-
会用到反射机制;
-
会用到动态代理技术;
-
教你如何定义一个 xxx-spring-boot-starter,了解spring boot自动配置机制;
-
学会如何自定义配置项,并绑定到 bean;
-
学习监听 spring 容器的事件;
-
……等等
有没有一点心动呢?!
下一步计划
这篇文章就当做是一个引入和前言吧,主要是为了增强大家的信心,肯定是能学到东西的。
下一步,我会用多篇文章详细介绍 RPC 框架的源码以及涉及到的技术点,还会将框架源代码放到 Github 上供大家下载学习,包教包会,后面面试拿这个出去吹牛B 完全没有问题。
项目源码已经在 Github 开源了:
如果大家特别感兴趣后面也可以开直播讲解哦~
好了,我是雷小帅,以上就是今天的全部内容啦,如果你对手动造一个轮子感兴趣,三连支持一下吧,给点信心~
以上是关于「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?的主要内容,如果未能解决你的问题,请参考以下文章
「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?