[case12]演进式架构

本文主要聊聊演进式架构html

Evolutionary Architecture

它的定义原文以下:git

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

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

这里涉及到几个要素:sql

  • 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等。架构

它要求这些变动是可逆的,便可以回滚。固然有些架构是用来抛弃/牺牲的。好比可牺牲的架构中提到的:less

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

Guided change with fitness functions

英文定义以下:nosql

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。ide

定义fitness function的前提就是肯定当前演进式架构中须要保持哪些capability,哪些capability能够被弱化或移除。

如图,这里选中的的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

相关文章
相关标签/搜索