《系统架构》阅读笔记05
接着上一次的《系统架构》阅读笔记04继续写:
3、创建系统架构:
1.架构师
架构师的职责主要是以下三个方面:减少歧义,确定系统的边界、目标和功能;发挥创造力,创建概念;管理复杂度,为系统选定一种分解方案
架构师的交付成果,应该包括:一套清晰、完整、连贯的目标,并且是可行的(80% 以上概率);系统所在的大环境(法律法规、行业规范等等)以及整个产品环境的描述;系统的概念以及操作方式;系统的功能描述(至少两层分解),除了系统对外界展现的功能,也包括系统的内部功能;系统的形式(至少两层分解)和形式结构,以及功能和形式之间的映射;所有的外部接口以及接口控制过程的详细描述;开发成本、工期、风险、实现计划等。
2.消除歧义,确定目标
为了消除歧义,架构师必须首先理解上游和下游的相关因素对系统架构的影响。上有因素包括:公司策略、营销、法律法规、行业标准、技术成熟度等,下游因素包括实现(编码、制造、供应链管理)、操作、产品与系统的演化。
复杂的系统一般会涉及多个的利益相关者,他们会有不同的诉求和目标,架构师需排定各项目标之间的优先次序。首先,可以把价值视为一种交换,在交换过程中,我方的成果用来满足对方的需求,而对方的成果也同样用来满足我方的需求。其次,可以根据利益相关者对本产品的重要程度,来排列其优先次序。最后,则可以把系统的目标,展示在系统问题描述中
3.发挥创造力,创建概念
接下来,架构师就需要发挥创造性、创建概念了。创造概念,主要有两种方式,一种是无结构的方式,一种是结构化的方式;无结构的创新包括头脑风暴法、自由联想法等方法。对于一些包含多个功能的丰富概念,我们可以对其进行扩展和分解,提出对应的概念片段,而这些概念片段组合后,又会形成新的整体概念。最后通过定量和定性分析,筛选出 2~3 个作为候选概念。
4.管理复杂度,为系统选定一种分解方案
架构师另外一项工作,就是分解系统,管理复杂度。系统的表面复杂度就是系统的难懂程度,表面复杂度高的系统理解起来会比较困难。架构师可以通过抽象、层级化、分解及递归等手段来减少表面复杂度,但这样做可能会提升实际复杂度。其中架构师最重要的一项决策,就是对系统进行的分解。要判断一种分解方式好不好,必须先向下分解两层,并根据第二层的分解情况,来检查第一层的分解方式是否合适。另外,架构师也要选择合适的分解平面,例如可以按功能分解、按形式分解、按模块变化程度分解、按供应商分解等等。
4、架构决策
架构决策的模式一共有六个模式:
Decision-Option(决策-选项):一组决策,每个决策都有一套离散选项。例如,开始一个系统需要做一下两个决策,决定数据库和 API 接口的使用何种技术:数据库是用 MySQL、MongoDB 还是 Cassandra,API 接口是用 HTTP 还是 Protobuf。这就是一个 Decision-Option 决策。
Down-Selecting(筛选):一组二选一的决策,代表选择实体中的某个子集。例如,我要从全国各地的 候选 IDC 机房中,选择合适的机房来部署 CDN,就是一个 Down-Selecting 决策。
Assiging(指派):把一个实体集中的元素,指派给另一个实体集中的某个或某些元素。
Partitioning(分区):把一个实体集的元素划分为多个互斥的子集,并且覆盖所有元素。这是模块分解的典型决策模式。
Permuting(排列):在一个实体集和一个位置集之间建立一一对应关系。
Connecting(连接):给定一个用图中节点表示的实体集,用一组连线展示这些节点之间的关系。网络拓扑结构的决策就是一个 Connecting 问题,即选择星形拓扑、环形拓扑或者总线拓扑等等。