写点什么

架构师训练营第 0 期第 1 周学习总结

用户头像
Arthur
关注
发布于: 2020 年 07 月 09 日

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的分类



核心组件/服务设计?

核心服务于其他服务之间的关系?

核心组件如何设计?



什么是性能不好?如何定位性能问题?如何证明问题解决?如何量化性能指标?

跨部门协作最重要的是什么?目标,诉求;利益相关方的诉求,利益能否达成一致;职责边界,分工;

满足更多的利益诉求;解决问题的收获;能否统一;



面对的问题是什么?

如何解决这些问题?

解决问题有哪些困难?



软件架构:软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。





元素间的动态关系和静态关系

类和类之间的交互

模块和模块间的交互

系统和系统间的交互



重点:相关方 + 关注点 <— 架构文档



架构文档是给谁看的?!

架构师是做架构设计,对系统架构负责的人!



优秀的架构师必须是软件开发的全才:

  • 卓越的编程能力;

  • 解决棘手问题的能力;

  • 广阔的知识面;

  • 洞悉技术背后的本质和规律;

  • 沟通和打动人心的能力;



发布于: 2020 年 07 月 09 日阅读数: 88
用户头像

Arthur

关注

还未添加个人签名 2018.08.31 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 0 期第 1 周学习总结