细化架构与概念架构之间的典型差异:
-
接口。在细化架构中,接口占据非常核心的地位,而概念架构并不关心明确的接口定义(只有抽象的组件和抽象的交互机制)。
- 子系统。细化架构重视通过子系统和模块来分割整个系统,并且子系统往往有明确的接口;而概念架构中只有抽象的组件,这些组件没有接口,只有职责,一般是处理组件、数据组件或连接组件中的一种。当然,概念架构中也有“大组件分解成小组件”的设计决策,但并非子系统的含义。
-
交互机制。细化架构中的交互机制应是“实在”的,如基于接口编程、消息机制或远程方法调用等;而概念架构中的交互机制是“概念化”的,例如“A层使用B层的服务”就是典型的例子,这里的“使用”到了细化架构中可能基于接口编程、消息机制或远程方法调用等其中的一种。
多视图方法:
不同涉众看待软件架构的视角是不同的,贴近实践的多视图方法,应将一线架构师的各项具体工作涵盖其中。
架构设计是一门解决复杂问题的实践艺术,多视图方法的思想核心是分而治之。
多视图方法有两个方面的实际意义:
-
-
利于思考(因为分而治之的思维方式)
- 便于交流(因为在一定程度上分离了涉众关注点)
-
逻辑架构:
划分子系统、定义接口等,这些典型工作都属于逻辑架构设计的范畴。
划分子系统的3种必用策略:
-
- 分层的细化
- 分区的引入
- 机制的提取
划分子系统的4个重要原则:
-
职责不同的单元划归不同子系统
-
通用性不同的单元划归不同子系统
- 需要不同开发技能额单元划归不同子系统
-
兼顾工作量的相对均衡,进一步划分太大的子系统
接口设计:
“分”是手段,“合”是目的,不能“合”在一起支持更高层次功能的模块,又有何用?
协作决定接口。
逻辑架构设计的10条经验要点:
逻辑架构设计中设计模式应用:
-
- 明确子系统内的结构
- 明确包间的协作关系
物理架构、运行架构、开发架构:
增加硬件=增加计算能力≠软件的实际服务能力增强
物理架构设计的3项任务:
-
- 硬件选择与物理拓扑;
- 软件到硬件的映射关系;
- 方案的优化;
运行架构设计的工作内容:
-
- 确定引入哪些控制流。
- 确定每条控制流的任务。
- 处理相关问题:控制流的创建、销毁、通信机制等
- 进一步考虑:控制流之间的同步关系,若有资源征用还要引入加锁机制。
开发架构设计的工作内容:
-
- 将逻辑职责映射为“程序单元”
- 开发技术选型
- “程序单元”间关系
架构设计应进行到的程度:
-
- 应为开发人员提供足够的指导和限制
- 因项目、开发团队情况 的不同而变化
- 业务层、通用机制应更深入地设计
数据分布:
数据分布的6种策略:
独立:当一个大系统由相关的多个小系统组成,且不同小系统具有互不相同的数据库Schema定义
集中:指一个大系统必须支持来自不同地点的访问,或者该系统由相关的多个小系统组成,而持久集中化数据进行集中化的、统一格式的存储
分区:包含水品分区和垂直分区
复制在整个分布式系统中,数据保存多个副本,并且以某种机制保持多个数据副本之间的数据一致性。:
子集:“复制”的特殊方式,就是某节点因功能或肺功能考虑而保存全体数据的一个相对固定的子集
重组:不同数据节点因要支持的功能不同,而以不同的Schema保存数据。
数据分布策略的3条应用原则:
把握系统特点,确定分布策略(合适原则)。
不同分布策略,可以综合运用(综合原则)
从“对吗”、“好吗”两方面进行评估优化(优化原则)
参考文献:
《一线架构师实践指南》 温昱