架构师训练营第 0 期第 1 周学习总结
1、如何成为一名架构师
面对知识和工作,要明确:
首先,到底面对是什么样的问题?
其次,如何解决这些问题?
解决这些问题中会遇到哪些困难和挑战?是如何解决的?
架构师的思维方式:
问题是什么?问题背后的本质是什么?
为什么要这么做?解决问题的思路是什么?
作为架构师,除了要有深厚的技术功底,也要有正确的思维方式,两者相辅相成,缺一不可。
深厚的技术功底,包括知识的深度和知识的广度;
【技术深度】有助于深层次理解技术实现原理,通过原理才能掌握技术实现的方法和设计思路,比如阅读Java、Spring源码,了解实现过程,但不能盲目死抠每行代码,要从实现过程中明白实现原理,为什么这样设计,要解决什么问题;在遇到特定问题时,也能迅速定位问题,快速给出解决方案;
【技术广度】,是在解决工程问题(比如高并发问题)和技术选型的关键,找出一个系统面临问题的最优解;
如果说技术和设计功底是【术】,那思维方式则是【道】。
架构师必须有解决设计问题的正确思维方式,即使掌握各种技术,不能解决问题还是无用。
2、什么是软件架构?
软件架构,有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
2-1、什么是架构元素?
系统的组成部分,比如 服务器、系统间的关系、系统中的模块
整个系统的组成部分
比如 服务器,模块/组件,类,这些就是元素;
2-2、元素间的关系
1、静态关系
组合、继承、泛化、聚合;
2、动态关系
类和类间交互;
模块间交互;
服务器之间的交互;
1-3、图中最重要的是什么?
相关方的关注点;利益相关方的诉求是什么;
弄清楚架构是给谁给的?
给不同人(老板,需求方,工程师)看的【架构视图】是不一样的;
架构文档是给【相关方】看的;
3、4+1视图模型
软件架构 = {元素、形式、关系/约束}
单一的视图无法完整的表达架构,因此需要具备完整的视图集;
逻辑视图(Logical View),设计的对象模型;
过程视图(Process View),捕捉设计的并发和同步特征;
物理视图(Physical View),描述软件到硬件的映射,反映部署特性;
开发视图(Development View),描述在开发环境中软件的静态组织结构;
场景视图(Scenarios), 描述用例场景;
另外,作图不是目的是手段,作图的关键是要给什么人(相关方)去看;
3-1、逻辑视图
相关方:客户、用户、开发组织管理者;
视角:系统的功能元素,亿级它们接口、职责、交互;
主要元素:系统、子系统、功能模块、子功能模块、接口;
用途:开发组织划分,成本/进度的评估;
3-2、开发视图
相关方:开发相关人员、测试人员;
视角:系统如何开发实现;
主要元素:描述系统的层、分区、包、框架、系统通用服务、业务通用服务、类和接口、系统平台和相关基础框架;
用途:知道开发组织设计和开发实现;
3-3、物理视图
相关者:系统集成商、系统运维人员;
视角:系统逻辑组件到物理节点的物理部署和节点间的物理网络配置;
主要元素:物理节点以及节点的通信;
3-4、过程视图
相关者:性能优化,开发相关人员;
视角:系统运行时线程,进程的情况;
主要元素:系统进程,线程以及处理队列等;
3-5、场景视图
相关者:用户、设计和开发人员;
视角:概括架构上最重要的场景(最典型或者最有风险)及其非功能性需求,通过这些场景的实现,阐明架构的广度或众多架构元素运行的方式;
一个系统是由不同维度和视角组织起来,给不同人看的;根据不同场景,选择对应视图,表达自己的设计;
4、使用UML建模
4-1、什么是模型?
模型是一个系统完整的【抽象】;
人们对某个领域特定问题的求解及解决方案,对它们的理解和认识都蕴涵在模型中;
通常,开发一个计算机系统是为了解决某个领域特定问题,问题的求解过程,就是从领域问题到计算机系统的映射;
开发前需要了解业务,是关于业务的抽象;
为什么要这么做?需要解决什么问题?
4-2、为什么要建造模型?
1、建造传统模型的目的
为了证明某件事物能否工作
前提:建造模型的成本远远低于建造实物的成本;如 造飞机,造高楼;
2、建造软件模型目的
为了与他人【沟通】;
为了保存软件设计的最终成果;
前提:除非模型比代码更说明问题;
4-3、UML的分类
核心组件/服务设计?
核心服务于其他服务之间的关系?
核心组件如何设计?
什么是性能不好?如何定位性能问题?如何证明问题解决?如何量化性能指标?
跨部门协作最重要的是什么?目标,诉求;利益相关方的诉求,利益能否达成一致;职责边界,分工;
满足更多的利益诉求;解决问题的收获;能否统一;
面对的问题是什么?
如何解决这些问题?
解决问题有哪些困难?
软件架构:软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
元素间的动态关系和静态关系
类和类之间的交互
模块和模块间的交互
系统和系统间的交互
重点:相关方 + 关注点 <— 架构文档
架构文档是给谁看的?!
架构师是做架构设计,对系统架构负责的人!
优秀的架构师必须是软件开发的全才:
卓越的编程能力;
解决棘手问题的能力;
广阔的知识面;
洞悉技术背后的本质和规律;
沟通和打动人心的能力;
版权声明: 本文为 InfoQ 作者【Arthur】的原创文章。
原文链接:【http://xie.infoq.cn/article/0be1ff34fc7d15fe375eca572】。未经作者许可,禁止转载。
评论