目前我在互联网公司里干了1年多,接触了多位技术和业务的架构师,因为我正在升级到架构师,因此能直观地感觉到高级开发和架构的差距,并且,对于高级开发如何升级到架构师,本人目前更有切身体会。本文将结合我在互联网公司的工做体验,和你们分享下架构师和高级开发在工做中的侧重点,由此能给你们带来升级到架构师的启示。 linux
架构师或立志升级到架构师的高级开发,平时工做中必定有以下的特质。面试
1 出了问题第一时间去调查分析问题,哪怕这个问题看上去和本身无关,而不是想办法推脱问题。 数据库
2 上班的时候,基本没时间看无关网页或手机,哪怕手头没活,也会看项目框架或看技术,或者思考如何优化。缓存
3 出了问题,通常会深挖,哪怕当前没法从根源解决问题,但通常会找到根源缘由,而不是想办法绕过去。服务器
这点我深有体会,别说互联网公司的架构师都这样,连表现不错的高级开发也会这样,由于要在互联网公司生存下来,这些多是必备条件。固然,我也见到过得过且过的,但通常上升空间都比较小,或者没法进一步提高,或者没能力竞争外面更高工资的岗位。 架构
通常的开发大多关注“单机版” 的代码,只要在本机上开发完成任务就行,而后外带些debug技能,能跟踪到代码,能使用数据库就行。框架
而高级开发的“高级”体如今两个地方,第一,对业务更熟悉,但话说回来,换了公司,业务值多少钱呢?第二就是对代码底层有进一步的了解,好比理解Spring Boot的启动步骤等。less
而架构师的基本功要比高级开发要高些,下面来对比下我见到的架构师和高级开发的各类表现,你们从中能看出二者的差异。运维
1 因为高级开发大可能是调试单机版程序,因此看日志的时候,通常是在本地看,或者是用工具把日志下载到Windows本地,而后用文本工具查找关键字。但对架构师而言,这种查日志的效率过低,大多都是用less和grep之类的命令来看,也就是说,架构师必须对linux的操做和很熟悉。maven
2 高级开发通常无需考虑打包部署等问题,而架构师在优化分布式组件前,必需要打包项目,因此架构师须要对项目打包(好比maven命令),项目部署(好比jenkins或uDeploy)还有项目质量管理(好比继承sonar)有了解,若是项目还须要部署在云平台上,可能还得了解Docker或k8s之类的工具。也就是说,除了写代码以外,架构师还至少得了解项目的集成部署这块内容。
3 架构师更得了解组件集群等内容,好比分布式组件,云平台集群,反正不是单机版。可能高级开发也会多少了解些Dubbo,缓存之类的组件知识,但架构师更得掌握这些组件的分布式部署相关内容,即一台机器失效了,其它热备的机器该如何顶上。
架构师多少得具有些产品的相关意识,这些意识必须始终贯穿于工做中,这块就是和高级开发相比,架构师值钱的技术了。
1 对于架构师而言,产品(或相关组件模块)不是作出来就行了,更得进行压力测试,压测结束后,架构师还得鸡蛋里挑骨头,锱铢必较地想优化点。
2 架构师还得借鉴些当前的同类产品(或者是竞争产品),对性能而言,只有更好没最好,好比一个模块当前运行时间是2秒,还得想尽一切办法压缩到1秒,这就要求架构师精通各类技术。
3 架构师更得评估各类风险,尤为是当新版本上线时,发布时候就比如一个关口,首先得保证新老代码兼容,不能致使停服,其次得控制风险,预先设计好各类基于代码或数据库的回退或处理预案, 一有风吹草动,就得当即回退。
也就是说,架构师首先得保证系统能平稳上线,其次在开发过程当中,应当预先考虑到线上的各类风险,而且更得时刻考虑优化的方向,而高级开发并无这类要求。
架构师不只只是技术控,更得结合业务,和相关团队合做,制定出当前可行,且实施风险较小的各种方案。也就是说,架构师虽然不会像项目经理那样侧重于项目管理,但也须要有带人的经验,一方面把本身的设计理念让组员落实,另外一方面,一旦本身分管的系统出了问题,高级开发尚能够退缩,而架构师应当义不容辞地负责解决。
这里我列些我见过的架构师平时的一些工做场景。
1 架构师手机上有各类群,包括业务和技术相关的,要求是@你的必定得第一时间解决,若是客户不是@你,虽然没@,但报的问题和你有关, 也得第一时间解决,因此大多数架构师养成了手机不关,并且半夜醒来看手机的习惯。而高级开发还能够等着架构师来分配活。
2 出任何问题,好比业务上功能有问题,或者系统运行时出了OOM等性能问题,或者经过监控发现关键性指标降低,架构师都须要在第一时间介入。
3 本身组内,或者别的组对本身分管领域内有任何问题,包括业务上的和技术上的,都应当是协调解决。
4 更多的时候,架构师更得和相关人员(产品,其它组或系统运行维护人员等)开会,评估各类方案的实施方式。在定方案的时候,每一个组都会有私心,想本身组少改些,这时架构师就得协商或妥协出各种方案。架构师在这方面的工做量甚至超过了写代码的工做量,我就常常见到诸多架构师上班时开会,下班或者周末才有本身的时间来写代码。
在高级开发的眼里,系统发布仅仅是把最新代码和脚本部署到生产服务器上,以前我也是这样认为的。但在这个阶段,架构师须要考虑以下方面的问题。
1 在发布的时间段里,会新老代码并存,好比灰度发布时,会切一部分流量到新代码上,这时如何保证兼容性。
2 发布时的回滚步骤,若是涉及到数据库回滚,还得准备好各类SQL。
3 数据清洗和数据迁移的步骤,每每上新功能后,数据清洗的范围是全局的,架构师还得考虑性能问题。
4 系统上线后,该对那些关键步骤进行监控打点,以及打点后,提示异常的阀值该如何设置?
从中咱们能看到,架构师更得掌握系统运维+性能综合调优+系统监控等能力,这块对高级开发而言,其实要求是很低的。
在进互联网公司前,因为我写了两本书,也接触过一些牛人,但进互联网公司后,发现第一牛人的数量比预期多不少,并且都很年轻,第二牛人在一些领域的精通程度超过个人想象。
就说个人师傅,除了工做态度好责任心强肯帮助人之类的软实力外,看日志调试代码到jar包里去debug的硬实力也厉害,更重要的,对一些分布式组件,达到了出畅销书(至少1万本)的地步。而我师傅的师傅,更是业内大牛,不只在Spring方面出了不少书,并且最近在极客世界里录制的视频课,目前销量就2万+了,后期估计至少5万+。
跟着牛人学,我在互联网公司里能力提高不慢,且架构方面有了必定的进步,以个人切身体会,怎么快速提高呢?
1 固然得熟悉业务,不然无法干活,但熟悉之后不能沾沾自喜,更得看技术(尤为是值钱的技术)如何同业务整合。
如何熟悉业务?没捷径,第一看文档,第二看代码,第三问人,第四还得看本身领域外的但本系统会调用的上下文系统。
2 出了问题别推,经过看日志等方式排查,再不行,还得深刻debug一些组件包去看。当排查问题的数量和种类积累到必定程度后,本身可能就无师自通了,我见过的一些大牛,基本上有问题就调查,从不推诿。
3 毕竟我的的眼界有限,接触到的面也未必多,因此必定多跟牛人打交道。请牛人帮忙排查问题时,本身必定得在旁边多看,平时更得和牛人交流,牛人们每每会给出学习的方式和学习的点,并且牛人会帮忙指导各类技术里的坑。
4 多参与些本身领域外的工做,好比压测和系统部署,干活的时候不能仅仅停留在技术领域,更得关注项目启动,组件部署乃至项目部署等方面,其实很多牛人不只干过开发,更干过系统集成和系统运行维护的活,这样对分布式组件等以前的知识,就不只仅停留在“会开发”的地步。有时候哪怕本身未必被分配到这类活,但也必定要多参与。
1 目前网上有大量的架构师进阶资料,包括分布式组件的,包括云计算等的,甚至有架构师相关的面试技巧的。对此,你们必定得多看带框图的,和业务实践相关的文档。
2 必定得理论结合实际,架构师相关的文档若是光看,比较枯燥,很容易就半途而废,这点我本身有体会。怎么结合呢?最好能去互联网公司锻炼一段时间,哪怕在其中就干高级开发的活,平时也绝对有机会接触到架构师的技能。
3 必定得多和人打交道,小到和本身组员多沟通,中到和本身公司里相关的牛人多沟通请教,再大点范围,能够和网上的一些大牛多交流。我体会下来,这些交流毫不会白费,除了能获得技术交流的机会外,还能掌握到一些挣钱的渠道和方法。
确实,提高到架构师离不开技术的提高,但架构师最终是要让技术解决实际业务问题,因此在提高过程当中,我更多关注的是“技术+案例”的资料,好比我会搜索“dubbo案例”之类的,以此深挖技术的落地方式。
并且,架构师还得和人打交道,这比与技术打交道难多了,由于各样的人都有。
那么升级到架构师之后,会带来哪些收益呢?固然是钱多,不只如此,架构师每每会是在某个领域里是专家,因此在这个领域更能用技术换钱,好比卖视频教程等。最重要的是,经过升级到架构师积累起来的一些软实力,好比责任心,管理时间的方式,高效的工做方法以及思考问题的方式,这才是最值钱的。