應(yīng)用配置管理之組裝模型和模板模型
1. 關(guān)于配置管理
1.1 名稱解釋
- 配置項(xiàng)
一個(gè) key=value 組合
- 配置集
一組配置項(xiàng)的集合,key1=value, key2=value2
- 配置實(shí)例
一份完整的,可供應(yīng)用程序直接使用的配置項(xiàng)的集合。
1.2 配置管理的功能
- 版本控制
對(duì)所創(chuàng)建的配置項(xiàng)、配置集、配置實(shí)例進(jìn)行版本跟蹤,支持回滾等操作。
- 變更控制
對(duì)配置的變更進(jìn)行控制、操作、分類、記錄。
- 配置審計(jì)
審查配置的一致性、規(guī)范性、正確性。
1.3 配置管理的難點(diǎn)
在開發(fā)迭代的過程中,隨時(shí)隨地隨人都可以對(duì)配置進(jìn)行變更。在不同的時(shí)間、應(yīng)用的不同拓?fù)鋵蛹?jí)、不同的人,都有可能會(huì)對(duì)配置項(xiàng)、配置集、配置實(shí)例進(jìn)行修改。我們需要一種靈活的方式,以支持這些復(fù)雜的場(chǎng)景。
配置具有復(fù)雜、敏感、影響大的特點(diǎn)。一個(gè)配置實(shí)例可能有上百個(gè)配置項(xiàng),其中還會(huì)包含一些賬戶、密碼等敏感信息,而錯(cuò)誤的配置可能導(dǎo)致整個(gè)服務(wù)不可用。
配置管理的靈活與對(duì)配置實(shí)例的約束是配置管理產(chǎn)品需要平衡的地方。如何在滿足各種使用場(chǎng)景的情況下,通過一定的約束規(guī)避一些錯(cuò)誤發(fā)生,是配置管理的難點(diǎn)。
2. 常見的配置管理模型
2.1 CICO 模型
CICO 模型主要關(guān)注的是單個(gè)文件的版本控制,文件被版本化并存儲(chǔ)到庫中。
- 用戶必須 checkout 文件以存取
- 修改后的文件被 checkin 到庫中產(chǎn)生新版本
2.2 組織模型
組織模型下的配置由兩部分組成:
系統(tǒng)模型,列出了組成系統(tǒng)的所有構(gòu)件
版本選擇規(guī)則,指出了組成配置的每個(gè)構(gòu)件的版本
2.3 長事務(wù)模型
長事務(wù)模型將配置管理當(dāng)做是開發(fā)人員對(duì)配置的事務(wù)操作。一系列的變更結(jié)果生成一些列的配置版本,稱之為開發(fā)路徑。
2.4 變更集模型
變更集模型將配置描述為基線和一組變更集組成?;€可以理解為里程碑版本,也就是一個(gè)迭代的結(jié)束點(diǎn)、下一個(gè)迭代的起始點(diǎn)。
3. 新的配置管理模型
3.1 遇到的問題
CICO 等模型是一些比較老的論文、書籍中提到的,但是在開發(fā) PaaS 平臺(tái)管理配置時(shí),卻無法直接套用。
比如,CICO 模型,用 SVN、GIT 管理文件,并沒有強(qiáng)調(diào)配置存儲(chǔ)于文件,這個(gè)文件到底是指的什么。而組織模型,更像是對(duì)一個(gè)大型的 PaaS 平臺(tái)進(jìn)行配置管理,由若干個(gè)子模塊組成,每個(gè)模塊都有獨(dú)立的配置,適用于一組微服務(wù)的應(yīng)用配置管理形態(tài)。
3.2 組裝模型
古老的模型無法滿足 PaaS 平臺(tái)的場(chǎng)景。但是卻能給予一定的啟發(fā),將實(shí)物構(gòu)件泛化為要素,組織模型可以演化出組裝模型。如下圖:
配置實(shí)例 = 默認(rèn)配置集 + 環(huán)境配置集 + 集群配置集
利用應(yīng)用拓?fù)涞亩x,根據(jù)應(yīng)用所屬的層級(jí),通過定義一定的優(yōu)先級(jí)關(guān)系,將各個(gè)層級(jí)定義的配置集,合并在一起形成一份配置實(shí)例。
組裝模型通過組裝若干要素的方式得到配置實(shí)例,但是同一個(gè)應(yīng)用的不同配置實(shí)例包含的 Key 集合可能不一樣。這種差異會(huì)增加配置管理的成本,也會(huì)增加配置錯(cuò)誤導(dǎo)致的風(fēng)險(xiǎn),無法直接滿足對(duì)配置完整性的約束。
3.3 模板模型
基于對(duì)完整性的要求,在變更集模型的啟發(fā)下,可以得到模板模型。如下圖:
模板模型需要定義配置實(shí)例的模板,根據(jù)應(yīng)用拓?fù)涞慕Y(jié)構(gòu),形成若干個(gè)變更集,對(duì)配置實(shí)例模板進(jìn)行覆蓋,得到最終的配置實(shí)例。
模板模型增強(qiáng)了對(duì)配置實(shí)例 Key 的約束,保證了強(qiáng)的一致性,可以避免漏配 Key 導(dǎo)致的事故。
但是強(qiáng)一致性約束,也導(dǎo)致了靈活性受損,需要配合配置項(xiàng)、配置集的發(fā)布狀態(tài)進(jìn)行使用。