架构师知识笔记 3
什么是面向复杂度架构设计?
架构设计方法论
面向风险
两本书
简要介绍
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 这类大公司兴起的?
只有大公司才会出现系统复杂度
评论