View on GitHub

软件系统分析与设计指南

The documents about Software Analysis & Design Team Work

架构建模 - 云时代的架构实践

1、软件架构的概念

1.1 软件架构定义

An architecture is the set of significant decisions about the organization of a software system, which describe the selection of the structural elements and their interfaces by which the system is composed,and their behavior as specified in the collaborations among those elements

软件架构就是把系统分解为一些部件,描述这些部件的职责及它们之间的协作行为。

1.2 软件架构风格

An architectural style guides the organization of these elements and their collaborations to solve common problems of the specific domain.

架构模式(style)是 特定领域 常见问题的解决方案,例如:

1.3 软件架构模式(pattern)

In software engineering, a design pattern is a general repeatable solution to a commonly occurring problem in software design. A design pattern isn’t a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.

架构模式与常见的问题场景(注意,风格是特定领域的指导方案,通常用结构化组件与约束描述)的决解方案。它通常可以用 UML 图描述,描述解决问题相关的一组特定功能的部件与它们之间交互。

例如:

1.4 了解一些常用架构模式优势

1.5 架构(architecture styles)与应用程序框架(application frameworks)

框架是特定语言和技术的架构应用解决方案。例如 Java Spring web framework,它包含了 Java 开发 web 应用的各种业务场景的具体解决方案。例如:

spring web 开发有几万页文档,但学习曲线悠长平稳,这是其他语言如 Python 等无法企及的。你可能已发现:

面对几万页文档,完全阅读是不可能的!唯一的方法就是在架构的指引下,集合一些案例代码,找你需要的内容。一些常见问题:

2、架构的设计

2.1 软件架构的业务背景

软件架构是由 IBM 推动的技术概念,对应的职业就是软件架构师。 在19世纪末,20世纪初,IBM 面临这样的业务背景,“麦当劳”大叔这类客户希望 IBM 帮助它建立全球零售系统的规划,以满足:

IBM 觉得有必要建立一套规范的软件工程方法描述用户的高层需求,让软件系统支持的业务系统可持续发展。这既是高端咨询的大生意,也可以乘机销售自己的产品,完善产品生态,抑制竞争对手。 这符合 IBM 一贯的定位 – 基础设施供应商(为淘金人提供镐与牛仔裤)。

IBM 专家面对复杂业务系统的复杂性而客户关注结果的矛盾,提出了多视角分析问题场景分析法,常见的场景如:

2.2 架构设计方法论

针对信息系统,Rational Software 的专家在前人的基础上提出 Rational 4+1 架构建模方法论。科普入门文章 运用RUP 4+1视图方法进行软件架构设计

Philippe Kruchten提出的4+1视图方法:

该方法用不同架构视图承载不同的架构设计决策,支持不同的目标和用途:

本课程仅讲述利用业务场景视图获取架构需求编写需求文档;利用包图描述类与包的组织;利用部署图表示产品的实施与部署。

2.2 架构需求的获取

1、利益相关人及其关注点分析

从架构设计的角度,利益相关人分为三类:

2、如何编写架构需求

架构需求依然按 FURPS+ 模型组织,重点是 URPS+。所以软件架构又称为非功能驱动的设计,又称 FDD (Feature-driven development)

详细格式参见教材第七章 Supplementary Sepcification

2.3 逻辑架构设计

见课件。三层模型(表示层、业务层、持久化层)

1、层与分区准则

2、逻辑设计的好处

3、包的命名规则

4、实际应用包的组织

参考不同语言和技术的框架目录结构

2.5 物理视图设计

显然,架构逻辑设计仅对程序员是友好的,但运维和产品经理并不太感兴趣。 出于对性能、伸缩性、可靠性、可维护(监控)的需要,团队需要知道系统的物理部署,并了解这些需求的实现,以及对编程的影响。

1、部署图的元素

2、案例研究

一个简单的多层(multi-ties)web 应用部署

如何解释部署与应用场景的关系才是最重要的,例如:

以上,解决了性能、伸缩性等问题

2.6 架构文档编写

3、云时代对软件架构的思考

本部分收集了软件架构对程序设计的影响。

1、云应用程序体系架构的作用

Azure 应用程序体系结构指南

通过该文档,你应该了解:

2、云服务的两种典型架构风格

微服务体系结构样式

CQRS 体系结构样式

通过上述文档,你应该了解:

3、CQRS 与 事件溯源

命令和查询责任分离 (CQRS) 模式

事件溯源模式

什么是 Flux 架构?

通过上述文档,你应该了解:

参考阅读:Martin Fowler CQRS

4、团队作业

https://sysu-sasd-project.github.io/dashboard/

5、个人思考(不需要提交)