CFR軟件不同的維度
除了業(yè)務(wù)需求的變化,還有這些非功能性需求的變化
https://en.wikipedia.org/wiki/List_of_system_quality_attributes
軟件生態(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)估。
需求是可以通過一些測(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)建,一步切換,舊的再見】
把架構(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)》