
点击箭头处前端
“JAVA日知录”java
,关注并星标哟!!程序员
导读:本系列文章教你怎么样成为一名架构师,而本篇文章则带你先认识一下什么是架构师,架构师的工做是什么?web
为何须要架构师
为何须要架构师或者说架构师能解决什么样的问题,咱们不妨先从两个不一样的视角来看一下。数据库
技术高手的视角
小张做为一名拥有3-5年开发经验的技术高手,他常常会思考如下几个问题:
• 我已经工做好几年了,未来如何发展?是要一直写代码吗?
• 是否是要往上走就得作管理?
• 在中国35岁以后不能再作技术了吗?
• 继续作技术是否是待赶上不如作管理?
• 若是继续作技术我还要学习什么?
• 若是改作管理我应该如何转型?
• 我适合作技术仍是作管理,仍是别的什么?编程
软件企业的视角
软件企业在的产品开发过程当中也常常会思考如下几个问题:
• 为何咱们的产品交付周期为何须要那么长时间?竞争对手可能只要半年,为何咱们须要1年?
• 为何咱们的产品总有这样那样的质量问题?程序员在开发的时候为何很差好把控质量,上完线出这样那样的问题?
• 为何当初这个产品会选择这样的技术路线,技术选型的时候为何不慎重?致使如今要用另外一种技术推翻重作,带来巨大的人力成本?
• 网站的用户愈来愈多,性能很是吃紧,想扩展却很难?
• 为何这个产品的代码这么难维护,找谁改都说不敢动?
• 究竟谁能在技术上保证咱们的产品或项目取得成功?后端
从不一样的角度出发会引起出一连串的疑惑,那么能解决以上疑惑的角色就是系统架构师,也能够说咱们须要系统架构师来解决这些问题。缓存
架构、架构设计与架构师的相关概念
架构
架构,又名软件架构,也称为软件体系结构。软件架构就是一个系统的蓝图,是一种设计方案,将客户的不一样需求抽象成为抽象组件,而且可以描述这些抽象组件之间的通讯和调用,及包括一些内部的关键机制。它有下面三个关键概念:安全
-
组件 一般是指开发或部署的一个单元,根据考查对象的大小,组件的粒度也有所区别。在作架构的时候咱们须要把握好这个力度,不能陷入代码细节,若是过分的关注代码层面的力度,那对系统的总体把握可能会出问题。 -
组件与组件之间的关系 是架构要考虑的重要因素,来自系统外部的请求一般是由多个组件协做完成的,系统内部结构是否良好,很大程度上取决于组件之间的关系。 -
关键机制 是指影响到系统可用性、安全性、性能等重要非功能特性的一些技术方案,好比技术选型、关键设计、处理流程等等。
系统架构 vs 架构设计
系统架构 是指系统在运行期的实际内部结构,架构设计是对这种内部结构的书面描述。微信
架构设计 是以需求分析为输入,经过架构师的分析,产出架构设计资料,用于指导后续概要设计、详细设计、开发、测试、部署、上线运行。因此说若是架构设计作的很差或者没作架构设计,那么后面环节的开发测试部署可能会出各类各样的问题。
架构设计 vs 概要设计
架构设计是以组件的视角来思考系统如何分解,并定义分解出来的组件之间的关系。概要设计是从功能模块的视角来对系统进行分解,并定义这些功能模块之间的关系。如今提的比较少,通常作完架构设计直接作详细设计便可!
以用户登陆为例,从架构设计的角度可能就只是一个用户服务组件,而从概要设计的角度可能就是前端页面、用户接口、数据库等一系列功能的设计。
架构师
架构师是负责系统架构的人、团队或组织,架构师是团队技术领导,从技术角度,承担项目技术的成功或失败的责任。在其领域内可以全局把握的人,可以给出其负责范围内的整体设计,并能解决关键问题、指导其余人员落实设计。
每每后端开发出生的架构师对后台开发这一块有很丰富的相关经验,可是还须要对前端,APP端、测试、部署等领域也须要了解掌握,须要能作到掌控全局,这也是成为架构师须要去修炼的地方。
注解:架构师在一个团队中的权利很大,在技术上你们都要听你的,可是同时你也要承担相应的义务,一旦项目因为技术缘由失败,那你就是第一责任人
架构师的价值
李智慧老师在《大型网站技术架构 核心原理与案例分析》说过软件架构师的最大价值不在于掌握多少先进的技术,而在于具备将一个大系统切分红N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向的基础技术模块。这种能力一部分源自专业的技术和经验,还有一部分源自于架构师对业务场景的理解、对人性的把握、甚至对世界的认知。”

上面这张图表示未通过架构设计的系统,你们想怎么建就怎么建,用过几年后系统之间的关系没人能理清楚,天然天然程序员不敢随便改其中的代码。

而通过良好的架构设计后系统之间逻辑清晰,能够很容易进行扩展。
架构、架构师、架构设计之间的关系
下面一张图很容易看出架构、架构师以及架构设计之间的关系
架构师能力模型
做为架构师须要拥有如下12个能力模型:

-
沟通协做:
架构师须要常常跟产品经理、项目经理甚至客户打交道,因此沟通能力对架构师来讲很是重要,能力总结以下
① 具有优秀的口头、书面及表达技巧
② 优先的聆听者和观察者
③ 传达和激发团队,共享架构,确保达成一致
④ 我的品牌,值得信任
⑤ 推进良好的团队协做,合做双赢 -
自我驱动:
架构师为何可以成为架构师?由于他们都会有强大的自我驱动力,总结以下
① 积极主动,承担职责之外的事情
② 锲而不舍,长期保持
③ 严格要求本身,不知足现状 -
高效学习:
这个能力全部作开发的都须要具有
① 发现自身知识结构的优劣
② 造成本身的学习模式
③ 目标导向,学习目标要明确
④ 学习须要反复强化,不断实践运用 -
良好心态:
① 开放心态,可以取长补短,要多与分歧者沟通
② 责任心,勇于决策,为决策结果负责
③ 严于利己,宽以待人,积极向上 -
识别问题:
公司花钱聘请你来的目的是让你来解决问题,而解决问题的前提是先识别问题,而架构师须要快速准确的识别问题,主要分为如下几个方面
① 识别问题以及问题的主体,把问题自己先搞清楚
② 发现问题永远比解决问题更加剧要
③ 能够经过利益者全面沟通、竞争对手分析等手段来识别问题
④ 问题的优先级,能够用钱或者对业务的影响面来衡量 -
抽象思惟:
做为架构师这个能力尤为重要
① 可以分解出共性和个性,提炼出共性
② 需求概念化(由实到虚总结升华)并归类(核心/非核心等),而后分而治之
③ 抽象的前提是对个性的深刻理解 -
认识深度
① 深层次挖掘(由虚到实)问题的本质
② 技术的本质
③ 业务的本质
④ 利益相关者的本质 -
平衡取舍
这个能力也很是重要,毕竟公司给你资源是有限的。若是给你无限的资源,那就不须要作架构了,架构师就是须要在有限的资源中最大化经济效益。每每作架构设计就是一个取舍的过程。
① 利益者之间利益程度的的平衡取舍
② 确保架构在现有有限资源约束下最合理,最大化经济效益 -
业务能力
不了解业务确定作不出良好的架构设计的,须要了解业务的现状以及将来的发展趋势。
① 对于所在业务和领域要有较深的理解
② 可以对业务需求进行分解和将来判断
③ 好的架构师也是好的产品经理 -
技术能力
这是做为架构师最基本的能力
① 具有编码/设计/攻关等能力,丰富项目经验
② 技术深度,某一个领域的技术专家
③ 技术广度,技术知识面比较广
④ 技术高度,技术前瞻和判断力,技术支撑和引导业务 -
想象力
① 技术创新,以业务为中心的方式识别、评估和注入颠覆性新技术的能力
② 战略性规划,可以为实现潜在目标设计战略路线图并推进落地
③ 企业执行,企业精神、承担逾期风险、交付成果 -
架构方法论
① 多学习掌握业内/公司成熟的方法论,而且实践体会
② 本身结合项目循环总结,造成自身的架构方法论体系
架构师修炼方法
架构师能够从如下几个角度进行自我修炼
-
丰富实战
一、先在一个产品/项目作的比较深刻,而后考虑多产品/项目的实践;
二、积极主动进行可复用模块提炼以及思路和手段的改进,减小无效重复实践
三、在完成本职工做的前提下,增长影响力在更大范围实践 -
深度思考
一、六步思考:肯定与定义问题、分析问题、寻找解决问题的方法、作出决定、采起行动、评估结果与控制
二、总结思考,造成本身的知识经验财富 -
融入圈子
一、融入到部门/公司架构师的圈子,尤为是要找到本身心中的导师;
二、融入行业相同的技术圈子,互相学习交流
三、常常写博客、参与开源社区、演讲以及培训等手段 -
不断学习
一、系统化知识体系的学习,权威书籍/网站/微信公众号等
二、新技术的感知、运用、分析以及场景运用
三、参加各类培训、分享以及交流等,与专家讲师碰撞学习
架构师成长路径
架构师的前身是一名中高级开发人员,他们一般会具有如下几个特征:
-
工做三五年,精通一两种编程语言; -
精通几个框架,如SSH; -
可以搭建项目的代码框架,开发核心模块,组织共通类库,编写示例程序; -
可以解决一些开发过程当中的难题; -
可以对下级程序员进行指导; -
可以负责一些中小模块的设计; -
知识和能力体系与其承担什么项目有很大相关性;
在职业发展中他们有如下几条路径可走

走管理路线能够成长为项目经理、部门经理 走技术路线能够成为某方面的技术专家、架构师、CTO
成为架构师 意味着须要具有更高的能力,并承担更大的责任。
架构师工做指南
工做职责
在标准软件研发流程体系中,软件研发分为构思阶段、设计阶段、开发测试阶段,运维阶段。而架构师须要参与整个开发流程的生命周期。

咱们接下来看看架构师在每一个阶段须要干什么事。
-
立项阶段的职责(主要是向咨询或需求分析人员提供技术咨询)
-
进行整体架构设想 -
论证技术可行性 -
验证某些关键技术问题 -
业务分析和需求分析阶段的职责 协助业务分析人员产出业务分析成果,包括如下事项:
协助需求分析人员完成需求分析,包括如下事项:
-
对产品团队进行技术支撑,解答产品团队的技术疑问 -
把握产品团队的需求成果,确保形式和内容符合架构设计输入须要,确保功能可实现,非功能性需求指标合理,成本和工期可接受 -
完善需求分析 -
与产品团队协做完成业务分析文档 -
参与系统业务价值讨论 -
架构设计阶段的职责(独立完成架构设计)
-
逻辑架构设计,将系统分解为非技术性的逻辑组件,并定义其间的关系 -
物理架构设计,将逻辑架构中的组件和关系进行技术化、具体化 -
对于没有经验的技术点,验证其可行性 -
性能验证 -
技术选型时对多种方案对比验证 -
架构评审,设计完成时邀请其余成员、组外专家、领导、高阶架构师对本身的工做成果进行评审 -
软硬件采购申请,对设计、开发、测试、部署各环节须要的硬件及软件编写采购清单,提交申请 -
概要设计和详细设计阶段的职责(与开发组长一块儿完成概要设计)
与开发组长一同肯定详细设计的范围,指导中级开发人员完成必要的详细设计
-
初期指导,说明架构设计意图、详细设计注意事项 -
设计检查与评审,确保详细设计符合架构设计要求 -
参与数据库设计,确保数据库设计符合架构设计要求,主要考虑性能、数据量等问题 -
参加界面设计评审 -
功能清单整理,根据系统用例和架构设计中的组件定义推导出功能清单 -
接口定义,包括组件间的通讯机制定义和功能模块间的接口定义 -
开发阶段的职责 指导开发人员落实架构设计中要开发组件的实现,包括如下事项:初期指导:
代码检查与评审:
-
检查工程结构是否合理 -
检查组件的版本是否合适 -
检查接口是否与架构设计一致 -
检查主要处理流程的调用关系 -
检查关键功能的实现 -
检查通讯方式 -
检查并发处理方式 -
检查链接池、线程池等资源的利用 -
检查缓存的实现方式和策略 -
检查配置项实现方式 -
检查构建脚本 -
向开发团队说明开发相关的架构设计意图 -
配合开发组长搭建开发环境,创建各组件的代码工程 -
解答开发团队的疑问 -
测试阶段的职责 指导测试人员检验架构设计中非功能特性的实现,包括如下事项:
-
运维阶段的职责 指导运维人员部署系统以及在后续运维过程当中进行指导,包括如下事项:
-
架构师在组织中的职责 架构师是高级技术人员,在项目以外,还须要承担必定的组织建设职责,包括如下事项:
工做流程
架构师在项目中的活动须要有必定的流程,正常过程以下:
-
制定项目的架构工做计划 -
完善需求分析 -
进行架构设计 -
指导概要设计 -
指导详细设计 -
指导开发 -
指导测试 -
指导上线运维 -
管理架构变动
周边协做
架构师因为须要参与整个项目的生命周期,因此基本须要与全部相关人员进行协做,具体可参看下图:
资源保障
架构师在工做过程当中会有一些资源需求,可经过如下方式进行获取:
架构师的考核
能够经过如下维度对架构师进行综合考核:
-
考核架构工做计划执行的完整性 -
考核架构设计文档的质量 -
考核指导、检查和评审的效果 -
考核项目非功能性需求的知足状况 -
考核架构师知识经验的分享状况 -
考核架构师对公司产品的改进状况
若是以为这篇文章对你有所帮助的话请扫描下面二维码加个关注。" 转发 " 加 " 在看 ",养成好习惯!我们下期再见!

热文推荐
☞ 数据库优化之SQL优化
☞ 数据库优化之实例优化
☞ Docker基础与实战,看这一篇就够了!
☞ Docker-Compose基础与实战,看这一篇就够了!
☞ OAuth2.0最简向导(多图预警)
☞ 构建三维一体立体化监控体系

JAVA日知录
长按左边二维码关注咱们,精彩文章第一时间推送
朕已阅
本文分享自微信公众号 - JAVA日知录(javadaily)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。