容器的配置文件存放在配置中心(consul)時,會有幾種不同的存放方法六荒。最典型的就是將文件直接存放在 配置中心护姆,容器啟動時,到配置中心下載后掏击,即可使用卵皂。 也可以將配置提取成 鍵值對,配合渲染程序將模板渲染成 目標配置文件砚亭。
文件模式 (FILE)
文件模式是將一整個文件灯变,存放在consul的一個key中殴玛。
文件模式的優(yōu)點
- 簡單:容易得到用戶的理解,方便推廣添祸。
- 靈活:可以在consul頁面上滚粟,直接編輯配置文件本身,那么就可以為參數(shù)編寫注釋刃泌, 也可以禁用某個參數(shù)坦刀。
文件模式的缺點
- 對比 staging 和 生產環(huán)境配置文件的差異,難度很高蔬咬,這增加了運維難度鲤遥。
- 保持 staging 和 生產配置的一致性,完全依賴人工林艘,這增加了生產環(huán)境由于配置不一致而出錯的風險盖奈。
- 運維人員需要知道所有配置文件的路徑,配置方法狐援,對運維要求較高钢坦,并增加了運維出錯的風險。(通常一個git項目平均有2個配置文件啥酱, 一個產品有20個git項目爹凹,一個運維需要維護10個左右的項目,運維需要記得大概400個不同的配置文件, 經驗豐富的運維可能需要記住1000 個左右的配置文件)
鍵值對模式 (KV)
鍵值對模式是將配置文件中的參數(shù)提取成多個鍵值對镶殷,存在在consul中禾酱。 這就依賴于文件模板和渲染程序。
- 文件模板: 采用jinja2 格式绘趋,這是一種可編程模板引擎颤陶。
- 渲染程序: 根據(jù)規(guī)則渲染所有模板文件到目標路徑下。
鍵值對模式的優(yōu)點:
- 非常容易對比 staging和生產環(huán)境的差異陷遮。
- 可以保證staging和生產環(huán)境配置文件的一致性滓走。
- 配置文件格式與最終配置文件解耦。 運維無需關注配置文件格式和路徑帽馋。
- 可以在模板中編程搅方,以便同一份模板適應多種不同的環(huán)境。
- 可以迅速將任意配置文件參數(shù)化绽族。(系統(tǒng)默認配置文件姨涡,很可能我們只想該其中一個參數(shù),那么我們可以將其參數(shù)化)
- 模板維護在源代碼中项秉, 配置維護在consul中绣溜,實現(xiàn)了配置定義和配置工作的分離慷彤,同時分離娄蔼,并明確了開發(fā)和運維的職責怖喻。
除了以上運維優(yōu)點之外, 鍵值對模式岁诉,有如下幾個增強的優(yōu)點
- 支持繼承锚沸。
- 支持注入默認的全局變量。
鍵值對模式的缺點:
- 編寫模板文件需要投入人力成本涕癣。配置文件越大哗蜈,需要時間越多。
- 所有的配置文件的 鍵(key) 都平鋪在同一個空間下坠韩,因此
- 配置文件很多時距潘,編輯不方便
- 多個不同的容器使用參數(shù)時, 不能使用同名參數(shù)
- 沒有命名空間的分隔只搁,不清楚參數(shù)作用在哪個容器中音比。
- 沒有辦法編寫注釋
- 沒有辦法 禁用一個key,同時保留這個key (你可以刪除一個key來禁用)
平臺的傾向性
用戶在了解 多種模式之間的優(yōu)缺點之后氢惋, 結合自己的業(yè)務形態(tài)和運維人員的現(xiàn)狀雀哨,會有自己合理的選擇叨襟。 作為技術方案提供方,我們?yōu)橛脩籼峁└唵魏透?guī)范的使用方法,但平臺本身不代替用戶做出決策进统,也不特定傾向于支持某一種特定方案。
我們需要的功能
- kv 的版本歷史功能
- 版本歷史中記錄了由哪個用戶做了此次修改澎嚣,修改時間是多少
- 基于歷史的回滾功能
- key 的 disable/enable 功能
- key 的 注釋功能