聊聊演进式架构

## 序

本文主要聊聊演进式架构

## Evolutionary Architecture

它的定义原文如下:

>An evolutionary architecture supports incremental, guided change as a first principle across multiple dimensions.

翻译过来大致是演进式架构是一种支持将增量式、指导式的变更作为跨多个维度中的第一原则的架构。

这里涉及到几个要素:

- Incremental change

- Guided change with fitness functions

- Appropriate coupling

## Incremental change

增量式变更主要包含两大部分,一个是软件是如何增量构建,一个是它们是如何部署。

>Incremental change describes two aspects of software architecture: how teams build software incrementally and how they deploy it.

其中增量构建,比如向前兼容,多版本支持;部署的话,比如蓝绿部署、金丝雀部署、feature toggles等。

它要求这些变更是可逆的,即可以回滚。当然有些架构是用来抛弃/牺牲的。比如[可牺牲的架构](http://www.labazhou.net/2014/10/sacrificial-architecture/)中提到的:

```

支持1996年eBay的合适架构,对于2006年eBay来说,就不是合适的了。1996年的架构无法处理2006年的负载,但是2006年的版本太过复杂而难以建立、维护,它是根据1996年的需求演化而来的。的确,这个原则可以引出工作的一种组织方式。在Google,大家熟知的要求就是设计一个满足当前10倍需求的系统,这暗示着如果需求超过了一个数量级,那么扔掉并从头做起是更好的。每隔几年就被重新设计与抛弃的子系统而言,这是非常普遍的。

```

## Guided change with fitness functions

英文定义如下:

>\a particular type of objective function that is used to summarize…how close a given design solution is to achieving the set aims.

它是一个目标函数,用来指导我们如何进行tradeoff来满足选中的capability。

>定义fitness function的前提就是确定当前演进式架构中需要保持哪些capability,哪些capability可以被弱化或移除。

![](http://ww4.sinaimg.cn/large/7cc829d3gw1f4j0laf0zgj20rs0goq4c.jpg)

>如图,这里选中的的10个capability中High Thoughput和Data Security作为最高优先级的目标。

完整的capability(`system quality attributes`)如下:

```

accessibility

accountability

accuracy

adaptability

administrability

affordability

agility [Toll] (see Common Subsets below)

auditability

autonomy [Erl]

availability

compatibility

composability [Erl]

configurability

correctness

credibility

customizability

debugability

degradability

determinability

demonstrability

dependability

deployability

discoverability [Erl]

distributability

durability

effectiveness

efficiency

evolvability

extensibility

failure transparency

fault-tolerance

fidelity

flexibility

inspectability

installability

integrity

interchangeability

interoperability [Erl]

learnability

maintainability

manageability

mobility

modifiability

modularity

operability

orthogonality

portability

precision

predictability

process capabilities

producibility

provability

recoverability

relevance

reliability

repeatability

reproducibility

resilience

responsiveness

reusability [Erl]

robustness

safety

scalability

seamlessness

self-sustainability

serviceability (a.k.a. supportability)

securability

simplicity

stability

standards compliance

survivability

sustainability

tailorability

testability

timeliness

traceability

transparency

ubiquity

understandability

upgradability

vulnerability

usability

```

## Appropriate coupling

没有完美的能够应对所有变化的架构,技术架构很多时候是依据当时的技术条件来设计的,当制约因素改变的时候,技术架构也要相应变化。比如以前只有关系型数据库,很多设计都围绕范式来,现在有了nosql,就不需要都采用关系型数据库,可以引入polyglot架构,什么数据适合nosql,什么适合关系型数据库,可以自由选择。

因而Appropriate coupling就是演进式架构的核心,用来进行tradeoff,哪些可以以最小的代价提供最好的收益而允许适度耦合。比如微服务架构就非常反对service hub这种代码级别的复用依赖导致的耦合,而更倾向于使用rest及拷贝代码来解耦。当然如果说这些service hub已经很成熟了,基本不会快速变更/迭代或者有不兼容的事情,那么适度的采用service hub耦合也是可以的,但是如果依赖的service hub在高速迭代和变更中,那么这种耦合就相对严重些,具体需要根据不同的场景来进行取舍。

## 小结

evolutionary架构与predictable架构不同,predictable是类似静态式的架构,依赖于预测未来的变化,而没有一种架构是能够应付所有的未知变化的,evolutionary架构则是拥抱未知的变化,在不同的变化中不断取舍,进行演进。

## doc

- [微服务即演进式架构](http://blog.jobbole.com/101978/)

- [可牺牲的架构](http://www.labazhou.net/2014/10/sacrificial-architecture/)

- [List_of_system_quality_attributes](https://en.wikipedia.org/wiki/List_of_system_quality_attributes)

- [Move Fast and Fix Things](https://githubengineering.com/move-fast/)

- [Trash Your Servers and Burn Your Code: Immutable Infrastructure and Disposable Components](http://chadfowler.com/2013/06/23/immutable-deployments.html)

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2018-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

“史上最严”朋友圈外链管理规则更新:删除对转播内容证照要求

导读:朋友圈是用户分享和关注朋友们生活点滴的空间,为保障微信用户的隐私和合法权益,微信会一直对朋友圈外链进行严格管理。

13420
来自专栏大数据和云计算技术

大数据和云计算技术周报(第55期)

“大数据” 三个字其实是个marketing语言,从技术角度看,包含范围很广,计算、存储、网络都涉及,知识点广、学习难度高。

11730
来自专栏Albert陈凯

2018-08-16 不知道是不是最通俗易懂的《数据一致性》剖析了一、为什么需要分布式系统?二、分布式系统的副作用三、产生数据不一致的原因四、详解一致性五、结语

https://juejin.im/user/5978b281f265da3e292a3d1c/activities

8110
来自专栏FreeBuf

研究人员在大众和奥迪汽车中发现远程利用漏洞

近日,安全研究人员发现,大众和奥迪汽车中存在多处安全漏洞,这些漏洞可能允许攻击者发起远程攻击行为。其中,部署大众汽车集团部分车型的车载信息娱乐(IVI)系统中的...

12030
来自专栏TEG云端专业号的专栏

黄宇:腾讯计费——亿万级大促活动自动化保障体系

腾讯计费平台是产品端到端在线交易平台,其核心是帮助用户与产品安全、便捷的完成支付和收款,在交易过程中帮助产品盈收最大化。平台承载了公司每天数亿收入大盘,为180...

21030
来自专栏小文博客

腾讯云+校园全新推出不限量学生优惠套餐通知

https://cloud.tencent.com/redirect.php?redirect=1014&cps_key=c2ab27bee63e530286b...

9.3K90
来自专栏PaddlePaddle

解忧神助攻——PaddlePaddle中文社区试运营啦!

不要悲伤,不要心急,PaddlePaddle中文社区5月16日起试运营!神助攻帮你解决烦恼!

11640
来自专栏EAWorld

老司机谈DevOps 2.0:引子

译者的话: 你真的懂DevOps么?你知道怎么就持续集成持续部署又微服务了么,用时下流行的工具,实践DevOps怎么搞……跟着我,听老司机818 DevOps的...

29450
来自专栏BestSDK

Android频发SDK窃取数据事件,注意你手机里的金融类APP!

其行为也介于黑白之间,从影响用户数来说远超一般的漏洞利用类攻击。尤其对于接入SDK数量最多的金融类APP而言,潜伏着巨大隐患,亟需提高警惕。

18000
来自专栏工科狗和生物喵

我的工程师的能力评估和发展

Part 1 虽然是作业,但是我也准备好好地评估一下自己的能力,看看自己到底有多菜鸡,好给自己一个响亮的耳光来督促后面的自我学习!所以我就好好地给自己评估下(参...

31050

扫码关注云+社区

领取腾讯云代金券