有网友提议希望阅读有关架构师晋升的内容,因此撰写了这篇文章。首先,需要明确本文所指的架构师概念:其一,个人能力需具备相应水平,这看似显而易见;其二,企业愿意给予认可,不仅授予架构师职位,还能按照该级别标准支付薪酬。
程序员的职业生涯中,架构师是一个重要的转折点,一旦成功通过,未来的发展将十分广阔,反之则可能长期局限于编写代码的工作。
本文将围绕两个维度,阐述我对架构师的理解,第一个维度是关于能力提升的途径,第二个维度是日常的工作职责。
一、先说下大家对架构师认识的误区

架构师并非超凡脱俗,并非只在自己单独的房间里构思架构,而是必须与产品团队,需求团队,开发人员等各方人士沟通协调。
架构师确实更关注技术层面,然而绝不应当是技术上的极致追求者,毕竟任何产品或网站的构建过程都涉及诸多权衡取舍。
高级程序员与架构师之间的区分并不清晰,并非单凭某天高级程序员修习了何种课程,精通了哪项技艺就能自然转变为架构师,在部分标准不高的项目里,甚至可能由资深开发人员来承担架构的职责。
架构师并非样样都擅长,而是要明白某个需求的关键点有哪些可行的办法,接着会参照现有的经费,团队成员等条件,为当前的项目团队挑选恰当的方案。
架构师并非所有事情都需要亲自完成,例如在处理负载均衡问题时,不可能要求架构师用java编写一套完整的解决方案,而是至少要选择合适的组件,比如nginx,并在项目中成功部署该组件。
架构师构思出的,是产品,并非杰作。架构师构思出的产品或许只能满足流量等条件,或许只能从远处欣赏,近距离观察可能就杂乱无章了。但企业恰恰追求实效,而且产品研制的时限非常短,因此最终发布的架构也就只能应对当下的要求。
二、高级开发升级到架构师的必要条件
某些特定情境下,资深工程师若想晋升为架构师,就必须满足一系列要求,以下以 Java 架构为例进行说明。

Java基础知识和Java网络应用的核心能力,例如数据结构容器,并发处理机制,以及SSM架构,这些内容都是必须熟练掌握的。
能够查看 Linux 系统中的日志文件,这是基本要求,如果还能在 Linux 环境下部署和执行应用程序,那就更理想了。
能够进行参数调整,例如借助记录文件,实施 Java 虚拟机内存配置的改善,或者借助分析操作方案等途径,达成对数据库查询语句的优化处理。
必须掌握设计模式,无需达到精通程度,不过至少要明白,在何种情境下,能够借助何种模式来改进构造。
此项至关重要,思考时需超越孤立系统的思维定式,知识体系中必须涵盖负载均衡,消息队列,数据库集群等分布式架构的核心内容。
与人交往时,基本不会遇到阻碍,至少能够明确地传递自己的意图。
三、高级开发不会自动升级到架构,除非认真准备过
企业中不乏资深程序员晋升为系统架构师的情况,我留意到许多资深程序员经由转换工作,最终成为系统架构师。然而,机遇往往只垂青那些有备而来者。

假如资深工程师只顾着处理当前任务,业余时间也不进修,或许就难以达到晋升目标了,并且这次晋级的难度,远超初级工程师迈向高级工程师的过程,缘由何在呢?
企业通常要求应聘者拥有实际工作经验作为架构师,而资深程序员往往借助更换工作实现职位提升,但现阶段身为资深程序员的你,或许很难获得架构实践的机会,因此很难通过架构师职位的考核,缺乏架构实践经验,那么又该如何实现职业晋升呢?这仿佛陷入了一个难以突破的困境。

下面说下我见过的完成升级的捷径:
若供职于网络企业,资深工程师常需涉猎分布式系统与高并发技术,日常应加强学习并积累经验,待团队架构师离任后,通常能获得晋升良机。
部分企业依然沿用旧式技术,例如继续采用独立运行的 SSM 系统或 JDBC+java 的构建方法,这类机构在系统更新方面可能面临挑战,不过并非完全无法实现,在此类单位任职的高级程序员,日常需加强学习,阅读专业资料时,应聚焦特定方向:假如要构建一个能够承载双十一期间访问量的系统,应当如何规划?如果让我来构思一个能够应对极大访问量的限时抢购平台,我又该如何着手呢?事实上,许多技术面试中的问题都与此相关。
通过钻研,资历较深的技术人员已经掌握了架构师的能力,对于这类资深工程师怎样在个人履历上表述架构层面的工作,不必询问我,我无法透露,或者,或许许多人已经明了,但我不能讲。

四、架构师必备的技能(再说升级的方式)
要构建一个能够应对大量请求的系统,首先需要掌握负载分配的方法,其次要懂得如何控制访问频率,还要了解组件之间通过消息传递的机制,同时必须熟悉数据存储的优化手段,并且要考虑系统备份的方案,最后还要掌握数据库组合使用的技术。
对资深的软件开发者来说,掌握知识本身并非困难,核心问题在于不清楚应该钻研哪些内容,以及各项技能需要达到何种深度,如果你希望顺利通过应聘,那么对每个领域只需掌握基本概念即可
在学习规划方面,目前我了解到一种方案是遵循阿里巴巴的路径,另外我也目睹过有人深入研究 Spring Cloud 的各个模块,并据此完成了版本迁移的项目实例。
我升级时参考了《亿级流量网站架构核心技术》这本书,这本书内容很丰富,接着我按照书里的知识框架逐个钻研,比如,书里有讲用 hystrix 实现限流,我就去查阅更多资料,仔细研究这个组件的详细设置方法。首先,要观察整体,然后关注细节,接着再针对各个部分,构建一个能够处理大量请求的系统。
实践具有重大意义,而且在实践过程中不应畏惧产生失误,一旦出现偏差,就必须迅速进行反思。

可以这样说,架构师最初承担的几个设计任务,往往不尽如人意,必须反复修改。因此,在架构师的实习期间,经常需要加班加点工作,甚至可能持续受到上级的批评,设计的产品也常常引发不满。
此刻务必保持韧性,并且持续进行自我审视,此外,在构思整体蓝图的过程中,必然会涉猎各种相关领域的学问,如此一来,架构师就能逐步获得提升。
这一点很容易被人忽略,架构师必须擅长交流,这常常是晋升的阻碍。
架构师需要与产品方进行交流,以便明确整个系统的具体要求,同时也要和需求部门进行协商,由于时间有限,不可能满足所有条件,必须做出取舍,这一点需要提前沟通清楚。接下来进行系统设计,组合各个模块,然后要和程序员或项目经理沟通,确保他们理解架构设计时的真实想法。
我现阶段尚未成为架构师,正处在提升能力的过程中,结合我了解到的架构师进阶路径,以及我个人的成长感悟,在此梳理架构师技术能力提升的关键点:可以用两个词概括:集群,用三个字表达:分布式,再用更详细的说明:将庞大的业务请求与数据资源,均衡地分配到配置得当的硬件设备上。
理解了这一点,接下来就能确定需要学习的内容了,例如在流量分配方面,必须采用负载均衡机制,当处理大量存储数据时,需要借助数据库集群,或者实施分库分表策略,为了防止系统关键点失效,必须构建备份系统,在系统之间进行信息交互时,要使用消息传递平台,避免每次请求都直接访问后台服务器,因此可以考虑建立缓存系统,单个缓存容易发生故障,所以可以部署分布式缓存,为了评估系统运行状态,需要引入一些监控工具,比如对 JVM 和数据执行监控,为了方便查看系统记录,需要配备一些日志管理工具。等等。
理解了这些基础内容,然后进行整合,例如通过构建一个限时抢购平台来检测自己的掌握程度。
五、架构师平时干什么?
参加会议,包括讨论需求会议,进行设计评审会议等,这些活动大约要占据日常工作的三成到半数的时间。
如果不是经验丰富的架构专家或技术负责人,通常不会去构建一个全新的系统架构,多数时候是在原有框架上实施优化,诸如进行系统扩容,实施数据库分区,引入更高效的日志管理方案。在这种情况下,架构师往往会提供一个示范实例,比如在一台Linux服务器上部署日志管理系统,将具体操作流程详细记录下来,以便开发人员能够参照执行。对于经验丰富的架构师来说,或许需要从基础重新规划,或者选定技术模块等方案,通常先在部分系统或部分设备上进行测试验证。
处理技术难题,这些难题未必属于整体设计层面,但只要资深程序员无法攻克,架构师通常就需要介入,毕竟架构师是专家型人才,遇到架构模块层面的挑战,例如设定参数或安装部署环节的障碍,架构师更应参与其中
但首要任务是钻研,例如思考,倘若现有数据传输速率是每秒两千,一旦提升至每秒五千该如何应对?接着需要寻觅若干设备,并构建相应装置进行一番测试。
六、架构师更多的是和人打交道
与科技打交道较为简单,但和人类交往却十分复杂,由于每个人心中都有各自的观念。

所以说,除了技术之外,架构师还得具备如下的能力:
1、能通过交流展示自己的想法。
2、在各方利益不一致时得会协调妥协,其实这也得靠各方沟通。
3、管理团队的能力。
4、充分倾听别人想法的能力。