为什么80%的码农都做不了架构师?>>>
序
本文主要聊聊演进式架构
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等。
它要求这些变更是可逆的,即可以回滚。当然有些架构是用来抛弃/牺牲的。比如可牺牲的架构中提到的:
支持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可以被弱化或移除。
如图,这里选中的的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
- 微服务即演进式架构
- 可牺牲的架构
- List_of_system_quality_attributes
- Move Fast and Fix Things
- Trash Your Servers and Burn Your Code: Immutable Infrastructure and Disposable Components