前言
提到RPC(Remote Procedure Call)
大家应该都不陌生,特别是像我一样做web开发的,可以说天天和rpc打交道。常见的rpc框架主要包括Dubbo
、SpringCloud
、Thrift
等。
既然有了那么多已经成熟的开源RPC
框架,我为什么还要自己写呢,是已有的RPC
框架不能满足我的业务需求?是因为我想写一款完美的RPC
框架一战成名?NO! NO! 都不是,你给自己加戏太多了!我只是想以此来学习,督促自己学习,同时印证自己所学。
我的知识库
做开发也好几年了(本人一直是做java开发),从最开始的最基本语法到html
、spring
、javaScript
、redis
、mysql
,再到后来的springboot
,再到zookeeper
,学习了分布式系统的CAP
理论,学习了分布式事务怎么处理,学习了应用怎么做可以抗住高并发。然后前几年大数据兴起,还去找课程学习了hadoop
一套,买了一两台乞丐版云服务器,自己搭建hadoop
集群,自己写MR
任务,跑在自己搭建的集群,满满的成就感。然后学习了HIVE
发现,原来我不用自己写MR
任务,直接一条SQL搞定!接着机器学习兴起,python
是机器学习的首选语言,然后找教程学了python
语法,又听说机器学习需要数据基础,然后找了概率论
、统计学
、专为程序员设计的线性代数
来学习。然后又看到微信公众号说 go语言为并发而生,阿里、腾讯等大厂现在大量招收有 golang
语言工作经验的人,你们懂的,我尝试去学习了go语言,也跟着视频超了几个项目,也能正常运行。稍稍回首发现,自己好厉害,林林总总学了这么多东西!
学会了?
然而,你真的学会了吗?是的,真的学废了!
hadoop
我记得它的基石hdfs
中namenode
、datanode
的概念!
hive
我知道它可以把一条sql
转化为MR
任务运行!
我记得老师多次提到过的大数据的计算的一个原则或者说理念计算向数据移动
!
关于python
,我可以写一个hello world
,写一个九九乘法表
,装环境可能还需要百度!
关于golang
,可以写hello world
、可以写一个基于控制台的人机交互的猜大小
的游戏!
然而,仅此而已!我的工作环境没有大数据的场景和需求,所以学完的东西很快就会忘记,因为没有使用场景。python
也几乎没有使用场景。关于go
,很多人说感觉golang
的语法像
,学完后真香!但我还一直处于第一个阶段!
学不动了?
除了上面的说的那些,做为一个java开发者,你难道忘了自己的本职工作,怎么提高接口的响应速度,缓存的知识要了解吧?引入了缓存,缓存数据一致性怎么保证?要优化查询速度,数据库索引的知识需要知道的吧,必要的时候还需要进行优化。要想保证代码的健壮和优雅,java编程最佳实践了解下?
但是你真的敢不学了么!
有时候突然会很迷茫,感觉自己懂了很多东西,仔细想想又感觉自己什么都不懂,更加迷茫了。但是总不能一直迷茫
无论怎么样,生活总要继续!
愿看到这篇文章的你在生活中的漩涡里激流勇进,愿和我一样迷茫的你,静下心来一起努力。
来吧,趁着有时间,一起写个rpc框架,万一写出来了呢?
系列文章传送门如下:
手写RPC(二) 碎碎念
手写RPC(三) 基础结构搭建
手写RPC(四) 核心模块网络协议模块编写 ---- netty服务端
手写RPC(五) 核心模块网络协议模块编写 ---- 自定义协议
手写RPC(六) 核心模块网络协议模块编写 ---- 实现编解码器
手写RPC(七) 核心模块网络协议模块编写 ---- 实现客户端
手写RPC(八) provider、consumer 实现
手写RPC(九) 测试
手写RPC(十) 优化
关于 LengthFieldBasedFrameDecoder 不得不说的事