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

2023-11-10

目录

好日子

为什么你需要学习造轮子

投资自己

不要成为调包侠

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

下一步计划


好日子,宣布一件事情!

好日子

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 - CoderLeixiaoshuai/easy-rpc: Easy RPC是一款低性能的服务框架,主要用于学习造轮子Easy RPC是一款低性能的服务框架,主要用于学习造轮子. Contribute to CoderLeixiaoshuai/easy-rpc development by creating an account on GitHub.https://github.com/CoderLeixiaoshuai/easy-rpc

如果大家特别感兴趣后面也可以开直播讲解哦~ 

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 查看GPU使用的最佳方式

    1 watch n 1 nvidia smi 最有名 没有之一 nvidia自带了一个nvidia smi的命令行工具 会显示GPU使用情况 作为监控 GPU 的工具就显得有点过于简陋了 比如 Process name 栏只显示命令行的程序
  • Redis布隆过滤器详解

    目录 一 前言 二 RedisBloom 安装与使用 三 RedisBloom 常用命令汇总 四 通过 Jedis 使用 RedisBloom 五 Redisson 封装的布隆过滤器 六 使用哪种方式的过滤器比较好 一 前言 布隆过滤器 B
  • 【数据结构与算法】时间复杂度与空间复杂度

    目录 一 前言 二 时间复杂度 1 概念 二 大O的渐进表示法 概念 总结 三 常见时间复杂度计算举例 例1 例2 例3 例4 例5 计算冒泡排序的时间复杂度 例6 二分算法的时间复杂度 例7 阶乘递归Fac的时间复杂度 例8 斐波那契递归
  • js异步提交form表单之serialize()方法及FormData对象

    serialize 和FormData对象都可将表单数据序列化 后通过ajax异步提交 但二者有实质区别 1 serialize serialize 是JQuery方法 可序列化表单值创建 URL 编码文本字符串 就是将表单数据以字符串的形
  • 浏览器的工作原理

    浏览器可以被认为是使用最广泛的软件 本文将介绍浏览器的工 作原理 我们将看到 从你在地址栏输入google com到你看到google主页过程中都发生了什么 将讨论的浏览器 今天 有五种主流浏览器 IE Firefox Safari Chr
  • java.lang.UnsatisfiedLinkError: No implementation found for

    E AndroidRuntime FATAL EXCEPTION main Process com example pimr PID 20314 java lang UnsatisfiedLinkError No implementatio
  • leecode刷题笔记-数组

    数组题注意事项 1 切记while循环的循环条件一定要判断遍历长度是否越界且要先判断该条件 否则就会报错 例如 while j
  • 50道编程小题目之【分解质因数】

    题目 将一个正整数分解质因数 例如 输入90 打印出90 233 5 python解题代码 ii int input 请输入一个正整数 jj 2 ii b ii fj while jj lt ii if ii jj 0 if ii jj f
  • linux下安装helm

    我这里使用的系统是centos7 6 Helm是一个kubernetes应用的包管理工具 用来管理charts 预先配置好的安装包资源 有点类似于Ubuntu的 apt 和CentOS中的 yum 方式一 使用官方提供的脚本一键安装 点击查
  • wallhaven.cc网站图片超清壁纸爬虫

    测试时间 2021 02 16 1 参考博客 2 python代码 1 参考博客 From 侵删 https blog csdn net qq 41849471 article details 89607706 2 python代码 图片保
  • python search用法,Python-re中search()函数的用法详解(查找ip)

    1 首先来看一下search 和find 的区别 import re s1 2221155 search 字符串第一次出现的位置 print re search 1 s1 print s1 find 1 它们的输出分别是 search 函数
  • 苹果系统itunes连iphone连不上服务器,itunes不识别iphone,iPhone连接不上iTunes怎么解决?连接不上iTunes怎么办?...

    今天一网友求助 itunes不识别iphone iPhone手机插上电脑后可以弹出设备 在电脑里面可以显示并能打开手机的相册 怎么样iphone也连不上iTunes 而换另外的一个iPhone连接又很正常 iPhone连接不上iTunes怎
  • 6-17 使用函数实现字符串部分复制 (20 分)

    6 17 使用函数实现字符串部分复制 20 分 本题要求编写函数 将输入字符串t中从第m个字符开始的全部字符复制到字符串s中 函数接口定义 void strmcpy char t int m char s 裁判测试程序样例 include
  • 使用JSONP解决跨域

    1 首先需要知道什么是跨域 浏览器从一个域名的网页去请求另一个域名的资源时 域名 端口 协议任一不同 都是跨域 出于浏览器的同源策略限制 同源策略 Sameoriginpolicy 是一种约定 它是浏览器最核心也最基本的安全功能 如果缺少了
  • c语言中auto、register、extern、static用法

    转载地址 http www 111cn net net c 38998 htm 四种存储类别说明符有两种存储期 自动存储期和静态存储期 auto和register对应自动存储期 具有自动存储期的变量在进入声明该变量的程序块是被建立 它在该程
  • 删除system/app下的apk

    要删除系统system app目录下的的APK 由于 system app目录默认是只读 所以 想要删除这些APK 必须首先获得system目录的删除权限 通过如下步骤删除system app下的apk文件 1 连接设备 如果是手机则需要打
  • Linux 基础笔记 权限与文件管理

    Linux 基础笔记 权限与文件管理 字符界面中退出登录可用哪种方法 exit 命令或 Ctrl D 组合键 pwd命令的功能是什么 显示当前目录的绝对路径 当前目录为 home 使用以下哪个命令后可进入 home Studd test目录
  • React中常见的TypeScript定义使用

    前言 在我学习typescript时 想在react中使用typescript写代码 从头开始的时候是懵逼的 因为官方文档并没有使用typescript的教程 多是自己在网上查 自己看定义摸索 所以今天把我用过的 总结归纳一下 希望能帮助到
  • MySQL查询合并结果去重_MySQL数据表合并去重的简单实现方法

    场景 爬取的数据生成数据表 结构与另一个主表相同 需要进行合并 去重 解决 直接举例 首先创建两个表pep pep2 其中pep是主表 CREATE TABLE IF NOT EXISTS pep pep2 id INT UNSIGNED
  • 「从零开始造 RPC 轮子系列」01 我为什么要去造一个轮子?

    目录 好日子 为什么你需要学习造轮子 投资自己 不要成为调包侠 通过造轮子你能学到什么 下一步计划 好日子 宣布一件事情 好日子 12月有个好日子 20211202 从左往右读 接着从右往左读你会发现居然是对称的 这是属于程序员的 浪漫 身