前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊演进式架构

聊聊演进式架构

作者头像
code4it
发布2018-09-17 16:04:03
6770
发布2018-09-17 16:04:03
举报
文章被收录于专栏:码匠的流水账码匠的流水账

## 序

本文主要聊聊演进式架构

## 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)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档