系统流程的本质

  • 最近在思考系统流程的本质是什么,小到一个框架、大到一个系统,如何去快速掌握系统是一项重要的能力,笔者认为的技术能力体现在三个方面:解决实际问题的能力、线上问题排查能力、源码阅读能力。本文就谈谈笔者的最近的思考供大家参考。


一、从技术点到技术线说起

面对阅读大量的源码时,一开始的你的感受是什么?是恐惧还是看不懂,我想两部分都有,主要还是看不懂占大部分的因素,因为看不懂才会产生恐惧,如果都能看懂,剩下就是时间的投入,并不存在恐惧。那么再往下深入问一句:为什么你看不懂?这个问题很有意思,就像问一个学生,你道题为什么做不出来一样。

笔者相信大部分的源码应该要能看懂,看不懂的部分一般有如下的特征:

  • 源码数量多
  • 关联的对象多
  • 运用多种设计模式
  • 技术点没接触过
  • ......

笔者推崇的源码阅读方法是:先抓主线、看到一个点就想到往下必然出现的点。先抓主线的目的一开始不致于陷入到源码的汪洋大海中,从这条主线知道大概做了什么。看到一个点就想到往下必然出现的点,这是一个人技术基础扎实的体现,举个例子来说,工作2、3年的人,对Java里的动态代理肯定不会陌生,也有人会用它,那么一出现动态代理,二话不说去找实现InovationHandler接口中的invoke()方法、如果出现了线程池,二话不说去找线程中的run()方法,这些都是技术点,如果技术点不够敏感,出现了这些你都不知道怎么去看。

所以这样看,平时还是要多注重积累技术点,对每个技术点要多思考,这样在后面看其它的源码时会快很多,技术点是散的,而技术线是串起技术点的,这里线多指思维方式。

二、从技术线到技术面

如果只讲到上面的内容,没有多少用,上面经过时间的训练可以让你达到一定的技术敏感度,那笔者再深入问一个问题:拿上面的Java动态代理来讲,为什么就会跳到invoke()里面了呢?你在写代码的时候,压根儿没有调用它,如果你对Java动态代理有深入了解之后,会发现其实是生成了一个代理对象,它会重写你的方法,里面有handler.invoke()的调用,这才是为什么会跳到invoke()方法里面去。

上面只是一个技术点深入的探究罢了,如果止步到这里,我们会错失后面宝贵的推导。在上面的流程中,你发现了什么呢?如果仅仅是知道一个技术点的原理,的确能为我们解惑,如果能往前再深入一步,那就好,下面开始推导本文的精华部分。

先给出结论再往下解释,系统流程的本质就4个步骤:规范、注册、识别、运行。

  • 规范:这里指的是流程的规范、接口协议,不管是技术还是业务,都有一个固定的流程,这个流程就是规范的一种,接口协议是一种约定,从哪里加载数据,如何去实现接口等。
  • 注册:注册的目的是告诉系统我要用哪个功能,规范是静态的表述,而注册是实现规范。
  • 识别:注册之后就要能够识别,识别出注册了哪些内容。
  • 运行:就是系统实际的运行过程。

如果没有一定的经验,看到上面觉得非常虚,没关系,笔者举个例子来讲,你就不虚了。

对于SPI可能你不陌生,它应该得比较广泛,如加载JDBC驱动、SpringBoot中也应用得很多,除了你会用,通过它的原理,你再看看上面提到的,是不是很相似呢。

  • 1. 从指定的目标下读取文件(规范)
  • 2. 解释文件中的内容,将其放到容器中(注册)
  • 3. 在运行的时候,通过一定的规则选择容器中的对象(识别)
  • 4. 最后系统运行(运行)

笔者用这个方法去阅读Hadoop源码,要快得多。

三、从技术面到技术体

到了第二步,其实就已经厉害了,再往下走一步,你就能设计系统了,而且是非常棒的系统。上面规范、注册、识别、运行是一种范式,你会发现之前系统设计都会往上找到相似的影子,那如何形成立体的技术呢?就是把上面的落地实现,它的落地实现可不止一种实现,这又可以写一篇单独的文章来说了,这里抛出几个问题来:

  • 如何定义规范?
  • 如果注册?
  • 如果识别?

把这三个问题想清楚了,收获的又一样了。

作者简介

高福来,先后在Oracle、阿里工作,目前在滴滴小桔车服加油团队负责营销基础(优惠券、奖励金),在分布式中间件和系统架构方面积累了一定的经验,擅长用通俗易懂的语言描述复杂问题,个人微信号:gaofla。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值