架构师修炼之道(二)——架构?设计?架构师?

Part.1 什么是架构?

简单来讲,架构就是一个考察对象的内部结构。数据库

这个内部结构是【以组件为视角】来进行考虑的,架构的含义包括了【组件以及组件之间的关系】。安全

另外一方面,架构的含义还包括考察对象内部的【关键机制】。多线程

什么是组件?

组件一般是开发或部署的一个单元。架构

根据考察对象的大小,组件的粒度也有所区别。并发

如咱们如今常说的大数据平台,其系统内部由不少子系统组成,如权限系统、数据采集系统、数据处理系统、数据分析系统、数据存储系统、数据管理系统、数据展现系统,这一个个子系统即可称为大数据平台的组件。负载均衡

而将组件视角再下沉,如数据采集系统中又分为爬虫组件、数据清洗转换组件,其中又可能用到了横贯整个大数据平台的日志管理组件。数据库设计

这是开发系统内部的一个结构,而从部署上来讲,大数据平台通常是由3台及以上的多点系统部署而组成。性能

在对内或对外开放大数据计算资源时,又由权限系统进行资源分配。其中的单例大数据平台又能够做为一个单独的组件。学习

组件与组件间的关系

这是架构要考虑的重要因素。测试

来自系统外部的请求一般是由多个组件协做完成的。

系统内部的结构是否良好,很大程度上取决于组件之间的关系。

关键机制

所谓关键机制,是指影响到系统可用性、安全性、性能等重要非功能特性的一些技术方案,如技术选型、关键设计、处理流程等等。

Part.2 什么是架构设计?

那什么是架构设计?

咱们先看这样一段定义,是指【以需求分析为输入,经过架构师的分析,产出架构设计资料,用于指导后续概要设计、详细设计、开发、测试、部署、上线运行】。

架构设计是否是就是概要设计?

架构设计是以组件视角来思考系统如何分解,并定义分解出来的组件之间的关系。

而概要设计则是从功能模块视角对系统进行分解,并定义这些功能模块之间的关系。

全部的功能模块都要有归属的组件,所以应先作架构设计,再作概要设计。

它与代码设计又有什么区别?

代码设计有一张表的模型就能够开始作了,相似于在一面墙上定位一幅画,挂歪了再修正很容易。

架构设计则是造一个房子。移动一幅画很容易,移动一面墙则是一个彻底不一样性质的事了。

三个砖瓦匠的故事想必很多人都听过。

有一我的去采访三个砖瓦匠,他问:“大家是在作什么?”

第一我的答:“砌砖,混口饭吃”。

第二我的答:“砌墙啊,赚钱”。

第三我的答:“盖房子,建设漂亮的大楼”。

作架构设计即是盖楼。

开发一间房子,房子中有各类各样的组件,画好房间的图纸,将窗户、梁柱、墙、水电燃气通道等按照既定的位置组装起来。就如咱们的一个单例系统。这已经能够说是一次架构设计了。

而盖楼,则须要将组件的视角再上升一层。每一个房子都是一个组件,要考虑地基、水管链接、上下层承重。

甚至再上升到小区,咱们还要考虑绿化、容积、车位等等。

架构设计是不容易更改的,犹如地基,想盖更高的楼,就要打更深的地基,因此在设计时,必定要考虑可扩展、可兼容性。

可是,架构真的是设计出来的吗?咱们回头再说说,架构的设计与演进之旅。

而谁来作这些架构设计的事呢?接下来讲说什么是架构师吧。

Part3.谁能称为架构师?

架构师就是在其领域内可以全局把握的人,可以给出其负责范围内的整体设计,并能解决关键问题、指导其余人员落实设计。

架构师又分为:

系统架构师、数据架构师、基础设施架构师、应用架构师。

系统架构师是系统或产品线的负责人,是一个负责理解和管理并最终确认和评估非功能性系统需求(性能、安全、可用性、可扩展性、可移植性),给出开发规范,搭建系统实现的核心架构,对整个软件架构、关键构件、接口进行整体设计并澄清关键技术的高级技术人员。

【在没有架构师这个岗位的公司,通常会由项目经理或技术经理、研发负责人等人员负责其所有或部分职责。】

架构师也都不是凭空而来的,通常会由团队中的【技术高手】进化而来。

在《架构师修炼之道(一)技术高手的困惑与发展》中,咱们也说了技术人的几个发展方向。

那么架构师应该有些什么具体的能力呢?

架构师应该有什么能力呢?

  1. 认清本身,认识岗位,理解工做内容。

架构师应当对架构师岗位有着清晰的认识,对架构工做的内容有着深入的理解。

知道本身能作什么。

知道本身在作什么。

知道本身怎么作。

  1. 承上启下,掌控全局。

架构设计上接需求分析、下接概要设计,是整个软件工程中很是重要的一环,将决定整个系统实现的质量,架构设计对后续全部工程环节都有影响。

  1. 输入需求,输出设计。

运用规范的架构设计方法论,产出标准的架构设计资料。不要随意发挥,弄一些毫无章法的产物出来。

若是公司当前没有相关标准,能够自行设计一套,而后要求你们共同遵照。

  1. 知识普遍,兼具深度。

须要具有普遍的知识面,并在某些方面具备必定深度。例如数据库设计、多线程并发、负载均衡等。

对系统相关的技术栈有全面清晰的认识,并能够解决疑难杂症或给出药方(方向)。

  1. 架构复用。

掌握常见的架构模式,在遇到相似问题时,可直接复用。

  1. 软技能。

架构所涉及的方方面面较多,所以须要有良好的沟通能力。

  1. keep learning,保持学习,饱含热情。

技术不断发展,业务不断变化,须要保持学习热情,立于不败之地。

Part4.总结

咱们如今对以上的架构部分简单作一个总结:一个系统的架构就是指在系统运行期间的实际内部架构,它是各类组件的一个组成,架构设计就是对这种组件间关系的书面描述,而架构师就是负责描述这种关系的人。

怎样成为一个优秀的架构师?

我我的的定义是:格局要大,作事要沉。视野要远,脚下要实。

具体的作法即是在作决策的时候,不仅是作一个技术架构,须要关心业务实际要解决的问题,可是又不能头疼医头脚疼医脚,眼光要关注将来。

在成本、技术实现、将来演化之间,咱们须要不断作平衡。

最后,在我的而言,咱们应当对于新生的事务应当有所了解,对于须要用到的新技术能随时沉下心去钻研,对接触的业务应能抓住核心目标,强力推动系统的落地与演化。


本文内容参考《软件体系结构》、《领域设计模型》。


若是你对个人文章有什么想法,欢迎评论。

若是你想及时看到个人最新文章,请关注个人公众号。

若是你想跟我一块儿探讨,围观个人学习平常,欢迎加入个人星球。