Part.1 什么是架构?
简单来讲,架构就是一个考察对象的内部结构。数据库
这个内部结构是【以组件为视角】来进行考虑的,架构的含义包括了【组件以及组件之间的关系】。安全
另外一方面,架构的含义还包括考察对象内部的【关键机制】。微信
什么是组件?
组件一般是开发或部署的一个单元。多线程
根据考察对象的大小,组件的粒度也有所区别。架构
如咱们如今常说的大数据平台,其系统内部由不少子系统组成,如权限系统、数据采集系统、数据处理系统、数据分析系统、数据存储系统、数据管理系统、数据展现系统,这一个个子系统即可称为大数据平台的组件。并发
而将组件视角再下沉,如数据采集系统中又分为爬虫组件、数据清洗转换组件,其中又可能用到了横贯整个大数据平台的日志管理组件。app
这是开发系统内部的一个结构,而从部署上来讲,大数据平台通常是由3台及以上的多点系统部署而组成。负载均衡
在对内或对外开放大数据计算资源时,又由权限系统进行资源分配。其中的单例大数据平台又能够做为一个单独的组件。数据库设计
组件与组件间的关系
这是架构要考虑的重要因素。性能
来自系统外部的请求一般是由多个组件协做完成的。
系统内部的结构是否良好,很大程度上取决于组件之间的关系。
关键机制
所谓关键机制,是指影响到系统可用性、安全性、性能等重要非功能特性的一些技术方案,如技术选型、关键设计、处理流程等等。
Part.2 什么是架构设计?
那什么是架构设计?
咱们先看这样一段定义,是指【以需求分析为输入,经过架构师的分析,产出架构设计资料,用于指导后续概要设计、详细设计、开发、测试、部署、上线运行】。
架构设计是否是就是概要设计?
架构设计是以组件视角来思考系统如何分解,并定义分解出来的组件之间的关系。
而概要设计则是从功能模块视角对系统进行分解,并定义这些功能模块之间的关系。
全部的功能模块都要有归属的组件,所以应先作架构设计,再作概要设计。
它与代码设计又有什么区别?
代码设计有一张表的模型就能够开始作了,相似于在一面墙上定位一幅画,挂歪了再修正很容易。
架构设计则是造一个房子。移动一幅画很容易,移动一面墙则是一个彻底不一样性质的事了。
三个砖瓦匠的故事想必很多人都听过。
有一我的去采访三个砖瓦匠,他问:“大家是在作什么?”
第一我的答:“砌砖,混口饭吃”。
第二我的答:“砌墙啊,赚钱”。
第三我的答:“盖房子,建设漂亮的大楼”。
作架构设计即是盖楼。
开发一间房子,房子中有各类各样的组件,画好房间的图纸,将窗户、梁柱、墙、水电燃气通道等按照既定的位置组装起来。就如咱们的一个单例系统。这已经能够说是一次架构设计了。
而盖楼,则须要将组件的视角再上升一层。每一个房子都是一个组件,要考虑地基、水管链接、上下层承重。
甚至再上升到小区,咱们还要考虑绿化、容积、车位等等。
架构设计是不容易更改的,犹如地基,想盖更高的楼,就要打更深的地基,因此在设计时,必定要考虑可扩展、可兼容性。
可是,架构真的是设计出来的吗?咱们回头再说说,架构的设计与演进之旅。
而谁来作这些架构设计的事呢?接下来讲说什么是架构师吧。
Part3.谁能称为架构师?
架构师就是在其领域内可以全局把握的人,可以给出其负责范围内的整体设计,并能解决关键问题、指导其余人员落实设计。
架构师又分为:
系统架构师、数据架构师、基础设施架构师、应用架构师。
系统架构师是系统或产品线的负责人,是一个负责理解和管理并最终确认和评估非功能性系统需求(性能、安全、可用性、可扩展性、可移植性),给出开发规范,搭建系统实现的核心架构,对整个软件架构、关键构件、接口进行整体设计并澄清关键技术的高级技术人员。
【在没有架构师这个岗位的公司,通常会由项目经理或技术经理、研发负责人等人员负责其所有或部分职责。】
架构师也都不是凭空而来的,通常会由团队中的【技术高手】进化而来。
在《架构师修炼之道(一)技术高手的困惑与发展》中,咱们也说了技术人的几个发展方向。
那么架构师应该有些什么具体的能力呢?
架构师应该有什么能力呢?
一、 认清本身,认识岗位,理解工做内容。
架构师应当对架构师岗位有着清晰的认识,对架构工做的内容有着深入的理解。
知道本身能作什么。
知道本身在作什么。
知道本身怎么作。
二、 承上启下,掌控全局。
架构设计上接需求分析、下接概要设计,是整个软件工程中很是重要的一环,将决定整个系统实现的质量,架构设计对后续全部工程环节都有影响。
三、 输入需求,输出设计。
运用规范的架构设计方法论,产出标准的架构设计资料。不要随意发挥,弄一些毫无章法的产物出来。
若是公司当前没有相关标准,能够自行设计一套,而后要求你们共同遵照。
四、 知识普遍,兼具深度。
须要具有普遍的知识面,并在某些方面具备必定深度。例如数据库设计、多线程并发、负载均衡等。
对系统相关的技术栈有全面清晰的认识,并能够解决疑难杂症或给出药方(方向)。
五、 架构复用。
掌握常见的架构模式,在遇到相似问题时,可直接复用。
六、 软技能。
架构所涉及的方方面面较多,所以须要有良好的沟通能力。
七、 keep learning,保持学习,饱含热情。
技术不断发展,业务不断变化,须要保持学习热情,立于不败之地。
Part4.总结
咱们如今对以上的架构部分简单作一个总结:一个系统的架构就是指在系统运行期间的实际内部架构,它是各类组件的一个组成,架构设计就是对这种组件间关系的书面描述,而架构师就是负责描述这种关系的人。
怎样成为一个优秀的架构师?
我我的的定义是:格局要大,作事要沉。视野要远,脚下要实。
具体的作法即是在作决策的时候,不仅是作一个技术架构,须要关心业务实际要解决的问题,可是又不能头疼医头脚疼医脚,眼光要关注将来。
在成本、技术实现、将来演化之间,咱们须要不断作平衡。
最后,在我的而言,咱们应当对于新生的事务应当有所了解,对于须要用到的新技术能随时沉下心去钻研,对接触的业务应能抓住核心目标,强力推动系统的落地与演化。
本文部份内容参考《软件体系结构》、《领域设计模型》。
本文分享自微信公众号 - 架构师之殇(ysistrue)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。