[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

相關文章
相關標籤/搜索