写点什么

架构师知识笔记 3

用户头像
felix徐
关注
发布于: 5 小时前

什么是面向复杂度架构设计?


架构设计方法论

面向风险

两本书



简要介绍

1.George Fairbanks:卡内基·梅隆大学获得软件工程专业博士学位,RhinoResearch 公司董事长。

2.包含两部分:风险驱动的的架构设计方法论,业务架构建模的技巧

优缺点

1.核心思想:根据系统风险大小来设计软件架构

2.核心问题:风险是一种概率预判,“一切皆有可能”

3.建模部分的内容本质是面向对象设计的建模过程

面向模式

五本书

简要介绍

1.POSA 系列,共有 5 卷本

2.第一本 5 位作者有 4 位作者来自西门子

3.架构领域的“设计模式”

优缺点

1.核心思想:应用经过验证的成熟架构模式,例如 MVC、Reactor 等

2.核心问题:知道模式,但是不知道什么时候用哪个模式

3.太庞大,且比较理论化,看起来比较累

4.5 卷本由不同的作者完成,前后风格不完全一致

面向复杂度*

为什么是面向复杂度而不是其他的才是架构设计?

追本溯源–软件技术发展史


软件技术发展史的典型趋势和特征是什么?

越来越复杂

核心原因:软件系统规模增长

核心特点:数据结构和算法不再是主要问题,整个系统的结构成为首要问题。

方法论

架构设计环

不断根据需求(业务,技术)不断澄清不确定性(问性能有多高,可扩展高可用是什么意思),提问理解需求,分析判断出复杂度,拆解成一个个 role,形成很多备选架构,根据具体情况取舍其中一个来做,形成 4R 架构方案,最后开发团队开实现。


4R:

Rank + Role + Relation + Rule

软件架构指软件系统的顶层结构,它定义了系统由哪些角色(Role)组成,角色之间的关系

(Relation)和运作规则(Rule)。

架构一词来源于建筑,那么软件架构的定义适用于建筑架构么?

不适用,建筑没有协作规则

关系就是看有没有连线,有没有输入输出

有了方法论,这些问题你有答案么?

这么多需求,从哪里开始下手进行架构设计呢?

从核心场景,复杂场景开始

我们的系统一定要做到每秒 TPS 10 万

性能无要求,复杂度是搞可用,那性能就是浪费

淘宝的架构是这么做的,我们也要这么做

不同公司业务复杂度不同

架构设计一定要做到高性能、高可用、高扩展

看复杂度在哪里?是高性能、高可用、高扩展三者都需要,还是只要一种

中台现在很流行,我们的架构应该中台化

也是根据实际复杂度来做

DDD 和整洁架构


理念:解决什么问题?

不是用来解决高可用高性能,不关心安全成本,只关注软件领域复杂度和业务复杂度

通过 DDD 实现领域可理解可扩展 可扩展架构的设计技巧,不是方法论

两本书


简要介绍

1.Eric Evans “领域驱动设计之父”,世界杰出软件建模专家。他创建了 Domain Language 公司,致力于帮助公司机构创建与业务紧密相关的软件。

2.2004 年提出,在全世界广为流传,但是在中国的应用并不是很火。

优缺点

1.DDD 是可扩展架构的设计技巧,不是架构方法论

2.DDD 兼顾架构设计和方案设计,大部分人会搞混战略设计和战术设计

3.DDD、敏捷架构不关注存储和计算,只关注业务


问题:太抽象,兼顾架构设计和方案设计,不讲人话

1、战术设计中的 entity,service,valueobject 其实就是面向对象的设计,只是在面向对象的基础上又包裹了一层规范。

2、战略设计的话,大部分人用 DDD 是用来划分微服务的,其实限界上下文就是一个微服务。

3、绝大部分 DDD 在设计的时候需要领域专家(产品,运营)专业经验来帮助开发设计人员来划分业务领域,需要他们的专业输入,什么时候限界上下文,什么时候边界在哪里。

4、所以,领域专家一般都是熟悉业务的产品,运营或者解决方案架构大师,业务逻辑,业务玩法很熟悉。

5、国内 DDD 主要作为微服务划分的指导理论和指导思想。


整洁架构,敏捷架构其实就是 DDD 的具体应用。鲍勃大叔

领域模型

互联网基本都是并行的,不会像这样,先模型在用例再外围

方法论的意义

没有方法论就是碰运气 就不能有效指导实践


为什么做架构设计?

1.因为架构很重要,所以要做架构设计

废话,为什么架构很重要?

2.为了提升开发效率,为了促进业务发展

多人团队,协作方便?

3.公司流程要求系统开发过程中必须有架构设计

为什么需要流程?,创业公司几个人不需要就开始做

4.为了高性能、高可用、可扩展,所以要做架构设计

容易带来破坏性,出现过度设计

实现需求,解决问题(不做架构设计也可以,举例 sqllite),降低风险(面向风险),快速发展迭代(政府系统不会),分而治之,抽象高内聚(提升开发效率,片面,有些不需要)

思维导图

随堂测验

【判断题】

1.架构设计是为了满足高性能、高可用、可扩展的三高要求

错,复杂度不定,根据实际

2.领域驱动设计是系统的架构方法论

错,不是完整的架构设计方法论,解决不了复杂度

3.DDD 只适合可扩展的业务架构设计

对,只关注软件领域固有复杂度和业务复杂度

通过 DDD 实现领域可理解可扩展 可扩展架构的设计技巧,不是方法论

4.软件架构也要解决数据结构和算法带来的复杂度

错,只解决系统结构复杂度,单个设计子系统中实现数据结构和算法复杂度

【思考题】

为什么软件架构最先是在 Rational 和 Microsoft 这类大公司兴起的?

只有大公司才会出现系统复杂度

用户头像

felix徐

关注

还未添加个人签名 2020.04.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师知识笔记3