如何做好架构设计,架构设计有章可循吗?( 三 )


高层分割
切分复杂系统,为多个二级系统 。或者直接切分为具体子系统 。
高层分割的两种方式:
1、 系统切分
切分的考虑点,包括系统功能、部署环境、语言、系统规模等
例如一个大型系统,切分为订单,商品,供应链等系统 。
2、 系统内切分
根据系统的职责、调用关系、通用性等,进行系统内部切分 。
最常见的就是分层 , 例如一个系统 , 切分为网关层,服务层,搜索模块,man 端等 。
分层的角度
1、 逻辑分层
逻辑分层重视职责的划分,职责直接常常是上层使用下层的关系 , 上层和下层,可以是分布在不同的机器,也可以分布在同一台机器 。
2、 物理分层
分布在不同机器上的软件单元 。
3、 通用性分层
通用性不同的,划分为不同的层,一般通用性越大,所处的层次越靠下 。
考虑非功能需求
具体方法是:采用目标 - 场景 - 决策表,见下图:
架构设计是质疑驱动的,例如 , 质疑系统的可用性,考虑系统可能宕机,则引入集群部署设计 , 考虑下游接口可能超时或出现异常 , 则引入接口降级的设计等 。

如何做好架构设计,架构设计有章可循吗?

文章插图
??考虑场景的 5 个要素
1、 影响来源,来自系统内部还是系统外部
2、 如何影响的
3、 受影响的对象
4、 有什么问题或有什么价值
5、 所处的环境为何
对场景的权衡因素:
价值,代价,开发难度 , 出现几率 。对于某些场景,经过全面的权衡和思考 , 可以不支持,并不是所有的场景都要支持,否则可能存在过度设计 。
细化架构阶段分析逻辑视图
逻辑视图是对系统的不同部分职责的划分,根据职责不同,可以将系统进行细粒度的拆分 , 划分为多个子系统 。
分层的细化
根据系统设计的需要,可以将系统的分层进行细化,例如展示层 -> 业务层 -> 数据层 可以细化为:展示层 -> 控制层 -> 接口层 -> 接口实现层 -> 数据层 。
如何做好架构设计,架构设计有章可循吗?

文章插图
分区的引入
分区的概念是业务流程相关的,分区的依据是:职责,比如结算流程可以作为一个分区,下单流程可以作为一个分区 。将系统划分为多个分区,一方面可以支持并行开发,另一方面也将系统划分为多个子域,有利于业务概念和业务流程的收敛 。
如何做好架构设计,架构设计有章可循吗?

文章插图
??机制的提取
机制是指系统可以抽象的公共部分,例如公共工具,公共组件 , 公共流程等,提取这些公共部分,对于架构设计是至关重要的 。
划分子系统的原则:
1、 职责不同的单元,划分为不同的子系统
2、 通用性不同的单元,划分为不同的子系统
3、 需要不同开发技能的单元,划分为不同的子系统兼顾工作量 , 进一步切分太大的系统
开发视图
开发架构视图的任务,是将 “逻辑职责” 映射为 “程序单元”,例如:要自主编写的 “源程序”,可重用的库,框架等;同时进行开发技术选型,例如:开发语言,开发工具等,然后也需要确立程序单元间的关系,project 划分,目录结构,编译依赖关系等 。
如何做好架构设计,架构设计有章可循吗?

文章插图
运行视图
运行架构设计的工作内容,是确定引入哪些控制流:进程,线程等;确定每条控制流的任务,同时还要处理相关问题,例如控制流的创建 , 销毁,通信机制等 , 控制流之间的同步关系,是否有资源争用 , 是否需要加锁等也需要考虑 。
如何做好架构设计,架构设计有章可循吗?

文章插图
物理视图
物理架构设计的 3 项任务
1. 硬件的选择与物理拓扑
2. 软件到硬件的映射关系
3. 方案的优化
思维要点:“开销” 和 “争用” 是核心,应避免争用,降低开销 。
数据视图
数据视图是系统的数据存储设计,根据对系统的分析,确定一种或多种数据策略,常见的数据分布策略如下 6 种:
1、独立的 Schema
不同系统应用,使用不同的数据 schema,数据完全独立,一般界限清晰的不同系统可以采用这种方式 。


推荐阅读