架构师的技术升级之路( 二 )


也就是说,资深架构已经积累了很多处理问题的经验,遇到一般问题时,无需再通过比较耗时的debug看问题根源,往往在脑子里已经存储了大量可能会导致问题的原因,再通过查看关键日志即可定位到具体的代码点,然后就能很快地给出解决方案 。
2 在给出解决方案时,比如要上个分布式redis集群,或者上个消息中间件,对高级开发而言,往往会有很多试错的时间,比如上线后有某些功能点没调通,得通过Debug或查日志来逐一解决问题,或上线某个基于Python的大数据分析系统后,虽然能满足基本的功能,但在某个场景(比如写日志线程并发量太多)里,可能会导致OOM异常 。
而对资深架构来说,往往之前已经做过同类事情,所以能避免很多坑(少了很多试错成本和时间),而且由于对底层代码比较熟悉,所以哪怕出现比较疑难的问题(比如不能稳定重现),资深架构能通过看日志很快定位到具体的底层类,(而高级开发一般对此就束手无策了) 。相比之下,资深架构的中流砥柱效应就能体现出来 。
3 资深架构一般具有对各组件的差别非常了解,比如做分布式队列,该先用Kafka还是rabbitMQ,或者搭建数据库集群时,该用MySQL里的哪种引擎 。
这样,在选型时,由于知道了各种方案的优缺点,所以能知道哪类方案更适合本业务系统,或者说,通过重写哪类组件的底层代码,能很快地搭建起满足本系统的中间件组件 。这点,高级开发未必能做到 。
总结一下,资深架构得对关键组件的底层非常了解,并且精通针对某些组件(比如消息组件,分库组件)的实施和排查问题的能力,此外,资深架构的基本功也得非常扎实 。
1 debug能力就不用说了,得能熟练地通过linux命令,从各类日志中发现并解决问题 。
2 无需了解所有组件的底层代码(这太难了,也做不到),但需要了解一些常用组件的关键底层实现(比如Spring IOC或常用中间件) 方式,更得具备到组件内部jar里debug排查问题的能力 。
3 学习能力更不说了,和高级开发相比,资深架构更得了解哪类组件该学,而且,每个组件内部的知识太多,比如Kafka的知识就能写至少一本书,对于资深架构而言,首先需要用较短的时间了解该组件(比如kafka)的架构以及和其它分布式组件(比如Flume)的整合方式,而且还得具备过滤知识的能力,即知道哪些知识不用学 。这样一旦有需求,就可以较快地搭建出系统原型骨架,随后再逐步完善功能效果 。
4 对于程序员而言,如何高效地升级到架构或资深架构?
当我还处在一般开发和高级开发的中间水平时,我认为我能很快地升级到架构师的水平,所谓无知者无畏 。当我迈出升级的步伐时,刚开始,我突然发现升级的难度很大,从而无处下手,因为平时我缺乏实践架构师技能的实战机会 。现在,通过一些努力,我虽然没有自信说自己一定达到了架构师的水平,但大多数架构师能干的活,我勉强能做好 。而且我平时也在不断揣摩身边技术架构的思考方式和解决问题的方法,所以在这方面我自认为给出的建议不会耽误大家 。
首先是巩固自己基本功方面的建议 。
1 学再多的视频和材料,也不及动手实践一个案例 。
比如,大家在学习消息队列时,一定得动手搭建个环境,最好用虚拟机模式分布式的场景,这时可能就有同学说了,环境太难搭建,怎么办?自己查资料,这种动手能力对架构师而言就属于基本功,如果这也做不好,那么也没希望升级到架构师了 。
类似这样,大家可列个学习列表,网上升级到架构师的系列视频很多,质量高的也不少,都是别人的经验之谈,但如果就看理论,或者看关键点,这连架构师的面试都通过不了,更何况做实际的架构师的活 。
2 平时不能畏难,一定得多解决问题 。
在平时工作中,一定会出很多问题,而且不少是出在核心代码和底层代码里,这时就一定得通过看日志等方式去排查问题 。我知道,对很多想升级的高级开发而言,刚开始的时候一定很难,比如linux命令都不熟,或者效率很慢,别人都找出问题点了,自己才刚打开日志 。其实大家都这样过来的,多查多练,最多三个月,动手能力一定能提升 。
3 得锻炼自己在linux里(或在分布式环境里)部署系统部署组件的能力,尤其是部署集群的能力,在此基础上,通过各种工具能进行压力测试 。
比如还是拿kafka来说,搭建好集群后,就可以用kafka自带的Performance来做压测 。其实如果是自己练习,压测的结果没太大的意义,但这个流程走下来,一定能对搭建环境,使用工具和看日志等技巧就非常熟悉了 。


推荐阅读