大刘终于当上了架构师

共 4543字,需浏览 10分钟

 ·

2021-08-19 00:37

今天这篇文章是架构师大刘的故事,架构师大刘——3 个 180 的男人(身高、体重、房子…………的贷款)(传送门:架构师大刘的故事合集

如果你想将来成为一名架构师,不妨看看大刘的经历。

正文开始。

大刘对架构师一直持有两个基本观点:

  1. 高级程序员和架构师是两种完全不同的物种,但足够强即可物种跨越。

  2. 不是每个程序员都有机会可以成为架构师,但准备的足够多即可争到机会。

大刘自己亦是如此。

多年前,大刘已经是一位高级程序员了。分给他的任务,完成的比团队中的任何一个同事速度都快,比任何一个同事质量都高,在完成自身任务之余,他甚至可以腾出手来帮别人。

当时,大刘公司有自己的电商平台,同时还从外接了一些项目单子,去维持公司的盈利。无论是电商平台,还是项目单子,都是用的同一套开发框架——SSH,也就是:

Struts + Spring2 + Hibernate3

这其中,有三个主要技术问题是迟迟没有解决的。

1. Hibernate 的 Session使用问题

Hibernate 的 Session 滥用,在大刘公司内部长期存在。这种情况造成的后果就是:

  • 要么资源狂占内存,使得应用崩溃;
  • 要么 Session 提前关闭,导致存储数据报错,数据丢失。

对这种问题,大刘他们的做法就是根据出现的错误栈,对应的修改下出错的方法。比如,临时 Google 查一下,去换种获取 Session 的 API 调用;又或者就修改下逻辑,创建个新的 Session 了事。

因此,大刘发现在他们的项目里获取 Session 的方式,那叫一个五花八门。估计 Hibernate 的作者看了,都会非常吃惊——“我竟然还写过这种获取 Session 的 API 呢?”

而这些花样繁多的获取方式,又进一步刺激了项目在线上的各种问题,这些问题又造成了各种 Session 的乱用的进一步泛滥。

恶性循环啊!

2. 缓存使用问题

在大刘他们的系统中,或多或少都用了外部缓存。缓存组件是当时最流行的 Memcached。

但是,由于对 Hibernate 没有深入了解,这套缓存并没有和 Hibernate 综合在一起使用,于是问题就来了。

缓存数据和数据库中的数据出现了各种脱节:

  • 查询数据的时候,本来可以走缓存的时候没有走;
  • 更新数据的时候,又经常忘记同步缓存状态。

说出来都不怕丢人,缓存命中率可能都不到 20%。

性能堪忧啊!

3. Spring 对框架对象的管理问题

在使用 Spring上,也是个笑话。

最大的问题是,有些人和 Spring 感觉有仇,他就是不让 Spring 去管理对象的生命周期。

这造成的问题就是,NPE 异常在线上成了过年的烟花一样,处处盛放。要不就是,本来应该是单例的地方,却出现了好几个亲兄弟,好家伙,搁那里玩克隆人呢。

解决起个小问题,都能让人着急的脱水。

错误不断啊!

面对以上那三个问题的折磨,大刘却不得不忍受着。因为大刘当时只是个高级程序员,受技术水平和话语权所限制,明知道有问题,但是想解决问题又有点有心无力。

大刘自己默默地学习、看书,去不断熟悉 Hibernate 和 Spring,除了日常写已经写腻了的 CRUD 代码以外,他对业务代码之间的关系也做了十分深入的研究。当用户发起请求后,从系统收到请求,一直到业务流程完全结束,大刘对其中的各种技术细节都摸了个滚瓜烂熟。

但是,他却不敢对系统做任何工作以外的改动。

直到有一次,有一个月的时间,大刘几乎每天都陷在解决那三个技术问题引发的线上错误的泥沼里,当然,整个团队都是一样的状态。不知道别人能不能忍受,大刘终于受不了了,他有自己的技术梦想,有对自己的技术要求,不能忍受在屎坑中游泳的日子。

于是,大刘行动了。

那时候大刘工作已经五六七八年了,做事也没那么莽撞了。为了证明他能搞定那几个问题,他需要一套证据,一套他亲自验证过的证据。是什么证据呢?

大刘先把当时的项目拷贝了一份,然后熬了几周的夜,就着一本《Pro Hibernate3》的英文电子书和一本廖雪峰写的《Spring 2.0核心技术与最佳实践》,把里面所有不对劲的问题,愣是统统的改了一遍。

改完代码后,又找运维同事借了机器,完全部署了一套改过的系统。

然后,通过 Memcached 的 stats 命令,去统计出了缓存命中率,此时,这套改过的系统的缓存命中率已经从不到 20% 提升到了 80% 以上。

接着,又用压测命令,那时候还是 Apache 的 ab 命令,对改过的系统、原有系统进行了压测,得出了一个对比报告。

做完这些,大刘拿着这些东西,径直去找了直属领导,和领导诚恳的谈了谈,说出他想对系统不合理使用框架的地方进行改造,并且已经把改造这事儿自己独立完成了 90% 以上。

领导听完,看着压测对比报告久久没说话。那个时候,大刘的心紧张的像极了一团天津麻花,甚至想,大不了就带着压测报告和改造的经验去找下家了。

没想到的是,领导开心极了。领导告诉大刘,早就想规范整个项目了,想对整个系统的技术进行精确的改造和深度的优化,但是一直没能找到一个人能挑起大梁来,现在他支持大刘全面去负责牵头搞技术优化和系统改造的事情。

那几周没白熬夜!大刘通过自己的疯狂输出,得到了一个能全面审视、改造这套系统的机会,并且可以根据自身对 Hibernate、Spring、缓存的研究,把一些最佳实践应用到实际项目中。

此时的大刘,对架构师这个词,只是听说过,至于他是个什么概念,又需要做些什么,是完全不清楚的。不过,由于对 Hibernate 和 Spring 的深入研究,以及不断地在项目中实践各种它们的特性,大刘初步有了一些当架构师的感觉,知道了一套好的框架该是什么样子,以及它们为什么要这样设计。

再后来,公司的其他项目只要遇到了 Hibernate、Spring 相关的疑难杂症,都会过来问大刘,慢慢的同事们都知道,有个叫大刘的程序员技术还不错,大家给他起了个名:“SSH一哥”。

又经过了一年的摔打,大刘对架构师这个岗位已经有了自身的理解,知道架构师就是攻坚克难的技术骨干,知道架构师能掌握所有的技术选型,更知道架构师能光明正大的预研前沿技术。

大刘对架构师真的是向往极了,特别想成为这样的一种人。可惜,公司当时没架构师这个岗位,也没这个 title,真是犯愁啊。

再后来,大刘的领导晋升了,领导把他原来负责的事情一分为二:

  • 鉴于对大刘技术能力的认可和信任,几个相关项目的整体技术都让大刘负责;
  • 项目的日常管理工作,安排给了另外一位产品经理。

对于这样的安排,大刘倒是并不在意,他本身对管理工作也没什么兴趣,让他负责技术,能随他心意的去规范化开发项目,他已经很知足了。

但是,一件大事的出现,最终整个项目都给了大刘来管理,这是他万万没有想到的。

事情是这样,由于电商系统需要引流,为了吸引用户,产品和运营搞了很多活动,很多很多,多到了什么程度呢?多到了写的 if 语句可能占到系统代码的三成以上了的程度。

if(xx 满足 xx条件) {
 //做xx事情
else if(xx 满足 xx条件) {
 //做xx事情
}

以上的这些代码,就像一条条择人而噬的鲨鱼,游荡在项目的字里行间。

多其实还好,也能忍。但最受不了的是,产品和运营自己也不知道活动会达到什么效果。结果就是,他们会不断的推陈出新,会不断地对活动修正。

这就难搞了。当时公司程序员人手本来就不够,不仅要维护电商系统,还要维护给客户做的各种系统,还要及时响应各种运营活动,响应的慢了还会被产品运营投诉。

不断地改啊改啊……终于有一天,一个程序员爆发了,疯狂的和负责管理的那个产品哥们儿对线。事实证明,祖安人是挑火的一把好手,于是嘛,产品和技术从动嘴终于到了动手的地步。

最终结果就是那位产品经理撒手不管项目了,那位程序员老哥被开除。

于是,就这么着,日常管理的这个事情也落到了大刘的头上了,技术和管理都是“SSH一哥”负责了。

但是公司对大刘的任命迟迟没有正式宣布,可能公司担心大刘资历尚欠,怕他 hold 不住吧。

对大刘来说,他能理解公司的这个考察期,想让领导吃上一颗定心丸,他就需要个机会证明自己。什么机会呢?还是运营活动和技术的矛盾这个事。

当时的问题大刘是非常明白的,根源就是产品运营给出的活动太多了,还频繁的各种修改,而这些活动规则的落地完全需要技术去实现,程序员们根本忙不过来。

如果把这些惹了大麻烦的活动,不管是新出还是修改,可以不让程序员们去修改代码就太好了。

于是,大刘引入了规则引擎这个东西,引擎用的是 JBoss Rules。

因为那个程序员老哥和产品经理的物理交流而走人了,所以,大刘手头有个招聘名额。此时,引入了规则引擎,正好就可以用上这个名额。

于是大刘招了一个程序员,专门负责改规则引擎的规则,这样,其他程序员就能解放出来干其他事情了。

总的来说,引入规则引擎这套方案实施的很好,大家都很满意,领导也非常满意。不久之后,大刘就正式的转正了。

可是,这不够啊,大刘想当架构师,现在这条路是技术管理。没有架构师的 title,对以后自己成为真正的专业的架构师不利啊。

因此,趁着领导满意之际,大刘向领导提出,能不能把 title改一改,改成架构师。

领导看着反正也没什么大碍,既没有增加什么成本,也没有什么负面影响,也就答应了这事儿。

于是大刘成了当时公司的第一位架构师。

以上就是大刘如何成为架构师的故事了。

你看,是不是这样:

  • 大刘能搞定SSH就是架构师了?有点水啊!架构师到底是一个什么样的岗位?不同的公司,对架构师有不同的要求,有的要求技术很强,有的要求技术+业务结合的好,有的要求手写框架,有的要求擅用框架解决问题……有的公司压根就没有架构师这个岗位。

  • 我们都希望成为一名架构师,同时也是希望自己是众多程序员当中的那位“技术一哥”。我当年也是非常渴望成为架构师。

  • 我们需要保持对技术的强烈热爱,很可能因为这种热爱,要做一些比较狂热的超出既定工作范畴的事情,这些事情既能极大提高我们的技术水平和视野,也能帮助团队的产品质量得到极大的提升,这是双赢的事情。

  • 有些机会,我们需要自己去把握住,去主动出击,去向机会亮剑,亮出我们的才能,亮出我们的态度,只有这样,才能向我们向往的职业岗位迈出坚实的一大步。

所谓不负此生,唯此而已。

最后,希望这篇文章对你有帮助。原创不易,希望得到你的三连支持


你好,我是四猿外。

一家上市公司的技术总监,管理的技术团队一百余人。

我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。

我会通过公众号,
把自己的成长故事写成文章,
把枯燥的技术文章写成故事。

我建了一个读者交流群,里面大部分是程序员,一起聊技术、工作、八卦。欢迎加我微信,拉你入群。


推荐阅读

当年,我从小公司翻身进大公司之后……

高效学习,我的最佳实践

我招了个“水货”程序员

浏览 43
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报