什么是软件架构
软件架构的基本思路
单体向分布式演进、云原生、技术中台
1.1 什么是软件架构 1.1.1 什么是架构?Software architecture = {Elements, Forms, Rationale/Constraints}
元素、形式/模式、基本原理和限制
为什么需要软件架构?软件架构的终极目标是用最小的人力成本来满足构建和维护系统的需求
一个软件架构的优劣,可以用它满足用户需求的成本来衡量。如果该成本很低,并且在系统的整个生命周期内一直都维持这样的低成本,那么这个系统的设计就是优良的,如果该系统的每次发布都会提升下一次变更的成本,那么这个设计就是不好的,就这么简单。
--架构整洁之道
产品经理需求分析
需求设计
项目管理
产品运营
1.1.2 什么是架构师? 系统的维度负责整体系统的架构设计,主要是基础服务和各系统间的协调上,着眼全局不太注重某个应用本身架构,比如关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方法的基础架构设计
应用程序的维度负责某个应用的技术架构,主要偏业务系统,关注理解业务,梳理模型,设计模式,接口,数据交互等方面
业务流程的维度关注某一个行业、业务的领域分析,获取领域模型,最终获得系统的模型
也可以叫业务领域专家、行业专家、产品咨询师、资深顾问
降低成本通过设计和实现优良的软件架构来持续降低软件的构建和维护成本
软件架构这项工作的实质就是规划如何将系统拆分成组件,并安排好组件之间的排列关系以及组件之间互相通信的方式
如何降低成本?低成本维护(容易被改动和理解)
软件可复用
轻松部署
设计原则会给我们答案
软件架构师的目标是创建一种系统形态,该形态会以策略为最基本的元素,并让细节与策略脱离关系,一个优秀的软件架构师应该致力于最大化可选项数量
职能负责公司系统架构设计、研发工作
承担从业务向技术转换的桥梁作用
协作项目经理制定项目计划和控制项目进度
负责辅助并指导 SA 开展设计工作
负责组织技术研究和攻关工作
负责组织和管理公司内部的技术培训工作
负责组织及带领公司内部员工研究与项目相关的新技术
管理技术支撑团队并给项目、产品开发实施团队提供技术保障
理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架)
对系统框架相关技术和业务进行培训,指导开发人员开发
解决系统开发、运行中出现的各种问题
对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级的把握
软件周期内,标准组织架构下的各个职位的分工CEO
CTO/CIO
产品总监/技术总监/架构师 Architect Director
资深开发/Manager
高级开发/Leader
1.1.3 软件架构分类从架构师的工作内容上来划分可以分为三类:
系统架构师
应用架构师
业务架构师
系统架构师/基础架构师
从系统的维度,负责整体系统的架构设计,主要是基础服务和各系统间协调上,着眼全局不太注重某个应用本身架构,比如关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方面的基础架构设计。
应用架构师
从应用程序的维度,负责某个应用的技术架构,主要偏业务系统,关注理解业务,梳理模型,设计模式,接口,数据交互等方面。
业务架构师
从业务流程的维度,关注某一个行业、业务的领域分析,获取领域模型,最终获得系统的模型。也可以叫业务领域专家、行业专家、产品咨询师、资深顾问。
基础架构、前端架构、后端架构是从职责上的分类。
.NET云原生架构师训练营讲什么,怎么讲,讲多久https://mp.weixin.qq.com/s/JWOIScGrX0Hszz4uqdA6qw
1.1.4 架构风格分层架构
微核架构/六边形架构/简洁架构
事件驱动架构
微服务架构
云架构
软件架构入门 1.2 软件架构的基本思路 1.2.1 如何理解需求 软件需求(第3版)https://book.douban.com/subject/26307910/
需求分类 1.2.2 非功能性需求观感需求
易用性:性能/可用性
可扩展性
可维护性
1.2.3 4+1模型场景视图
逻辑视图
开发视图
处理视图
物理视图
1.2.4 场景视图用户可以开设一个训练营成为营长
营长可以制定训练营学生的任务和计划,可以快速利用到其他训练营
营长可以邀请其他用户加入训练营成为学员
营长可以对学员进行分组
营长可以添加指定学员成为助教并指定到分组
学员可以接受邀请加入训练营成为学员
学员加入训练营之后可以完成训练营内的任务
学员可以对训练营内的指定问题进行提问
学员可以查看自己的学员档案
营长/助教可以回答学员提出的问题
营长/助教可以对学员完成的任务进行考评打分