阅读本文大概须要 4 分钟。前端
昨天写的一篇,关于架构师是作什么的文章,以后就有读者在后台问起,说要想成为架构师要具有那些方面的知识,那今天就让咱们一块儿来扒一扒。程序员
曾经有这么个段子:面试
甲:我已经应聘到一家中型软件公司了,今天上班的时候,全公司的人都来欢迎我。数据库
乙:羡慕ing,都什么人来了?编程
甲:CEO、COO、CTO、All of 程序员,还有会计、司机都来了。后端
乙:哇,他们过重视你了,人才啊,这么多人迎接你!缓存
甲:没有啊,就一我的!安全
乙:靠,#%¥$%...服务器
业内不少的创业型公司都是这样,在公司发展前期,因成本有限,每每须要一我的身兼多职,也比较锻炼人。架构师有时也扮演着这样的角色,身为团队的顶梁柱,公司的「IT架构灵魂人物」,天然大小事务均可能会涉及。微信
那什么是架构师?
架构师英文 architect,这个词源于建筑学。软件工程当中的架构师和建筑工程当中建筑师有许多相通之处,都是负责「产品」宏观的架构设计。
在一个团队里,架构师充当了技术 Leader 的角色,不只要完成项目的总体设计和规划,还要带领技术团队一块儿解决实际问题,攻克技术难点,使得软件的设计、开发、测试、发布流程得以顺利完成。
下面这张图,表达了一个应用架构师(技术 Leader)在团队当中的角色:
须要注意的是,这张图中的架构师只是应用架构师,因此运维和 DBA 人员没有纳入到他的管辖范围。同时,每一个公司的具体组织结构也不尽相同。
架构师都作些什么?
1. 架构设计
架构师,顾名思义,第一职责就是在软件设计阶段,作好软件「骨架」的设计。架构师须要把产品的需求翻译成软件工程的设计文档,肯定各个系统与模块的边界,评估系统的量级。
2. 技术选型
从前端到后端,从缓存到数据库,面对为数众多的第三方组件,架构师须要做出合理的选择。
前端页面选择模板引擎仍是动静分离?服务端选择 Java 仍是 Go?
服务治理选择 Dubbo 仍是 Spring Cloud?
消息队列选择 ActiveMQ 仍是 Kafka?
分布式缓存选择 Redis Cluster 仍是 Codis?
数据库选择 MySQL 仍是 Oracle?
全文检索选择 Solr 仍是 ES?
技术没有绝对的好坏之分,关键看是否适用于公司的业务场景。
3. 管理非功能性需求
知足需求是项目开发和架构设计的根本,而管理非功能性需求则是项目的升华。
在公司从 0 到 1 的创业阶段,开发者更关注的是功能性需求,每每一个简单粗暴的 MVC 项目就能够搞定一切。当业务量级逐渐增大,用户需求逐渐多样化,非功能性需求的重要性就逐渐显现。
非功能性需求有不少,好比:性能、可扩展性、可用性、安全性、可监控、灵活性、可维护等方面。
4. 攻克技术难题
架构师不仅须要关注宏观的设计,也须要具备攻克技术细节的能力。在团队开发过程当中遇到难以实现和优化的技术问题时,架构师须要发挥技术优点,解决系统的疑难杂症。
5. 技术人员的管理和指导
架构师不仅是一个技术大牛,也应该是一个好的管理者,在工做中须要把较大的项目和需求拆分一个个 Story,依照每一个人的状况分配给研发团队的成员,而且在必要的时候进行技术上的培训指导。
6. 制定技术规格说明
架构师在项目开发过程当中,是技术权威。他须要协调全部的开发人员,与开发人员一直保持沟通,始终保证开发者依照它的架构意图去实现各项功能。
架构师与开发者沟通的最重要的形式是技术规格说明书,它能够是UML视图、Word文档,Visio文件等各类表现形式。经过架构师提供的技术规格说明书,保证开发者能够从不一样角度去观察、理解各自承担的子系统或者模块。
怎样才能成为架构师?
1. 技术的深度和广度
有一句话说得好,将军就是更优秀的士兵。架构师做为程序员中的将军,首先须要有足够的技术深度,同时须要普遍了解行业内的主流技术,以便更好地设计架构和技术选型。
2. 业务的理解
抛开业务谈架构就是耍流氓。这一点对应用架构师来讲尤为重要。只有对业务有了充分的理解,才能对项目的设计和扩展作出合理的规划。
3. 良好的沟通能力
架构师不仅是低头作技术,更须要协调指挥团队内的成员,也须要跨部门和产品、运营、项目经理等人员作及时有效的沟通,因此沟通能力是必不可少的。
架构师都有哪些种类?
1. 应用架构师
应用架构师是行业中数量最多的架构师,主要负责公司产品的技术架构。产品架构师须要对业务有足够的理解,根据产品需求设计架构,在运营团队的协助下评估量级,并管理项目的整个生命周期。
2. 中间件架构师
中间件架构师主要负责基础框架、公共组件,通用服务的搭建。好比分布式服务框架诸如 Dubbo,HSF;好比消息队列诸如 RocketMQ,Kafka。在大型互联网公司中,每每不是把开源框架简单「拿来」,而是研发出符合自身业务的企业中间件。
3. 基础设施架构师
基础设施架构师负责服务器资源、网络资源、数据库等基础设施的建设;以及持续集成工具、持续部署工具的搭建。
以上所说的三种,只是架构师最基本的分类。一些特殊领域也有着专门的架构师,好比网络安全架构师、大数据架构师等等。
推荐阅读
·END·
路虽远,行则必至
本文原发于 同名微信公众号「程序员的成长之路」,回复「1024」你懂得,给个赞呗。
微信ID:cxydczzl