《演進(jìn)式架構(gòu)》 —— 適應(yīng)度函數(shù)

CFR軟件不同的維度

除了業(yè)務(wù)需求的變化,還有這些非功能性需求的變化
https://en.wikipedia.org/wiki/List_of_system_quality_attributes

image.png

軟件生態(tài)系統(tǒng)的變化

增量的(incremental change)、引導(dǎo)式的(guided change)往軟件中引入變化。

適應(yīng)度函數(shù)(fitness function)

評(píng)估一個(gè)算法是否更加接近目標(biāo)的函數(shù),契合了引導(dǎo)性的概念。
架構(gòu)的適應(yīng)度函數(shù)指的是為某些架構(gòu)特征提供了客觀的完整性評(píng)估。


image.png

需求是可以通過一些測(cè)試來保證的,但是其他的維度就不能了。

fitness function:針對(duì)架構(gòu)特征進(jìn)行的測(cè)試就是fitness function

分類

  • 原子適應(yīng)度函數(shù):?jiǎn)蝹€(gè)維度的校驗(yàn)

  • 整體適應(yīng)度函數(shù):例如包含了安全性和性能之間的衡量的一個(gè)適應(yīng)度函數(shù)。

  • 觸發(fā)式適應(yīng)度函數(shù):例如流水線上觸發(fā)的校驗(yàn)

  • 持續(xù)性適應(yīng)度函數(shù):頻繁的運(yùn)行的,例如日志警告(普羅米修斯這樣的工具)、線上的monitor等。

  • 靜態(tài)適應(yīng)度函數(shù):非0或1,及通過或不通過

  • 動(dòng)態(tài)適應(yīng)度函數(shù):例如訪問量到了某一定規(guī)模時(shí),性能有新的指標(biāo)

  • 自動(dòng)式適應(yīng)度函數(shù):自動(dòng)化到pipeline上的。

  • 手動(dòng)適應(yīng)度函數(shù):例如手動(dòng)的安全審查手段。

  • 臨時(shí)適應(yīng)度函數(shù):在某種情況下發(fā)生時(shí)要做的適應(yīng)度函數(shù)。例如當(dāng)發(fā)現(xiàn)dependencies有更新的時(shí)候,采取的一些措施。

盡早評(píng)估和確定適應(yīng)度函數(shù)并持續(xù)審查適應(yīng)度函數(shù)

確定維度:很重要但是不是關(guān)鍵的維度、不相關(guān)的維度等等,都是需要去確定的。
不斷的審查適應(yīng)度函數(shù)是否能校驗(yàn)?zāi)愕木S度,適應(yīng)度函數(shù)規(guī)模是否會(huì)變大或變小,有沒有更好的方法去校驗(yàn)這些維度。

開展增量變更

例:當(dāng)有一個(gè)老的系統(tǒng)需要更新時(shí),新建了一個(gè)新的系統(tǒng),把用戶流量導(dǎo)入新的系統(tǒng),建立monitor,監(jiān)測(cè)沒有問題后才把老系統(tǒng)關(guān)掉。【舊的不變,新的創(chuàng)建,一步切換,舊的再見】

image.png

把架構(gòu)守護(hù)加入到流水線中去,會(huì)加入原子的適應(yīng)度函數(shù),保證單個(gè)服務(wù)的架構(gòu)守護(hù)。例如ArchUnit 完成分層架構(gòu)不越界的檢查;多線程環(huán)境下login的完整性。

適應(yīng)度函數(shù)組合

原子+觸發(fā):流水線上針對(duì)安全的一系列校驗(yàn)。
整體+觸發(fā):流水線上performance的校驗(yàn)。
原子+持續(xù):日志收集,告警反饋。
整體+持續(xù):Netflix 的 Chaos Monkey

總結(jié)

這些維度在記錄架構(gòu)決策的變更時(shí)更具有說服力。

涉及網(wǎng)站:
Building Evolutionary Architectures

參考書籍:
《演進(jìn)式架構(gòu)》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容