写点什么

演化架构的特点

2016 年 4 月 11 日

来自 Thoughtworks 的 Rebecca Parsons Neal Ford 在描述演化架构特点和原则时声称:演化架构的首要原则是支持增量的、非破坏性的变更。微服务架构就是这种架构的一个很好的例子。由于使用了来自领域驱动设计(Domain-Driven Design,DDD)的强有界的上下文,他们相信微服务架构符合演化架构的原则。

Ford 和 Parson 一样来自 Thoughtworks,他指出,他们定义“演化架构”的工作还在进行中,但是“演化架构”目前被如下定义。

演化架构,以多维度支持连续、增量的变更作为首要原则。

演化构架有许多特点,Ford 和 Parsons 只介绍了其中一部分:

  • 模块化与耦合:支持模块化,在技术架构层面,意味着划分边界明确的组件。反过来,这也简化了非破坏性变更,给需要做这些改变的开发者带来了很大的便利。相比之下,他们发现大泥球架构就缺少模块化,因此不支持演化。
  • 以业务能力来组织:在领域层面,模块化越来越多地通过 Domain-Driven Design (DDD) 来实现。微服务中以业务领域划分模块,这与 SOA 中严格以技术层次划分模块大相径庭。
  • 实验:Ford 和 Parsons 指出这是给商业带来的非常有效的手段。允许以 A/B 测试金丝雀发布(Canary releases)方式对应用进行的变更,相对于其他事情相比,微不足道。另外,微服务架构可以被设计成允许相同服务的多个版本同时运行。这使得做实验是允许的,并会最终导致假设驱动开发(Hypothesis-Driven Development)的使用。

另外一种观察演化架构的方法是通过原则。这些原则描述了架构或设计架构的方法的特点。专注于架构决策的原则包括:

  • 适应度函数:一个架构级别的适应度函数指明系统的许多重要特点。例如,正常运行时间的等级、吞吐量、可用性以及安全需要。其中一种可视化方式是通过雷达图展示不同函数的使用。
  • 提前做让你感到痛苦的事:在做某个项目的时候,越早、越多地出现“痛苦”就能越快地识别出导致这些“痛苦”的问题并鼓励自动地消除这些“痛苦”。持续交付,比如说部署流水线、数据库迁移可以让演化架构变得更简单。
  • 最后责任时刻:传统架构和演化架构的最大不同是何时做出决策。在传统架构中,例如说有关结构、技术堆栈和通信模式方面的决策做得很早,要先于写代码。而在演化架构中,我们要等到最后责任时刻才能做决策。此时做决策是非常困难的,这时适应函数就可以给我们提供指导建议。对架构或者项目的关键成功因素有重大影响的决策必须提前做出。

Ford 和 Parsons 最后指出架构不是一个等式,而是持续过程的快照,参照持续交付 DevOps 运动,他们强调了运营意识对演化架构非常重要。

Ford 最近在一个网络研讨会上谈到了有关演化架构的内容。

QCon London 2015 会议上 Parsons关于这个主题做了演讲

Jimmy Bogard 曾在 2010 年发表有关演化架构的博文。

查看英文原文 Characteristics of Evolutionary Architectures


感谢丁涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 4 月 11 日 19:001545
用户头像

发布了 217 篇内容, 共 51.4 次阅读, 收获喜欢 69 次。

关注

评论

发布
暂无评论
发现更多内容

draw.io-取代visio的流程图绘制工具

Rice嵌入式开发技术分享

chrome vscode 写文章神器 draw.io

B端产品经理养成记(1):业务场景

涛哥

产品经理 需求 产品开发

ARTS打卡Week 02

teoking

objective-c LeetCode WebRTC

直面一个复杂世界

史方远

读书笔记 个人成长 随笔杂谈

RocketMQ - 如何实现事务消息

Java收录阁

RocketMQ

Go: 使用GODEBUG改善Goroutine的使用

陈思敏捷

go golang debug 协程

写博客的那些事

shengjk1

如何用CSS选择符(数字开头) 杀死队友

学习委员

Java html css3 前端 Web

你想活出怎样的人生

Janenesome

读书笔记 思考

N皇后问题

孙苏勇

算法 DFS 深度优先搜索

使用Kotlin语言初始化数组

mengxn

数组 kotlin 初始化

Kafka系列9:面试题是否有必要深入了解其背后的原理?我觉得应该刨根究底(上)

z小赵

大数据 kafka 实时计算

游戏夜读 | 关于构图的困难

game1night

YARN的架构设计和工作原理(通俗易懂)

Shockang

hadoop YARN

ARTS Week2

丽子

转行程序员浅谈进程间的socket通信

WB

Linux socket 转行程序员

ARTS打卡第一周5.25-5.31

我笔盒呢

1 ARTS 2020-05-31

3.141516

LeetCode

架构之路

强哥

极客大学架构师训练营

B端产品经理养成记(2):用户故事

涛哥

产品经理 需求 产品开发

工厂模式(四)泛型工厂之MyBatis Mapper代理

LSJ

Java 设计模式 泛型 工厂注册中心

ARTS(2020-05-25/2020-05-31)

天行者

正确阅读

工作 vs 生活

shengjk1

John 易筋 ARTS打卡Week 02

John(易筋)

ARTS 打卡计划 ARTS活动 arts

戒掉手机吧

鼎玉谷

人生 手机 时间 浪费 控制

做PO难,难于上青天

刘华Kenneth

敏捷 产品经理 决策 PO

钢铁侠马斯克之仰望星空

池建强

创业 马斯克 Space X

RocketMQ - 高可用设计

Java收录阁

RocketMQ

程序猿邂逅相亲妹,默默无语两行泪

码农神说

程序员 相亲

【5月】本月读书学到了什么

Neco.W

创业 读书感悟 阅读量

不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...

JackTian

GitHub 学习 程序员 编码 开源项目

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

演化架构的特点-InfoQ