容器的配置文件存放在配置中心(consul)時,會有幾種不同的存放方法。最典型的就是將文件直接存放在 配置中心,容器啟動時,到配置中心下載后,即可使用。 也可以將配置提取成 鍵值對,配合渲染程序將模板渲染成 目標配置文件。
文件模式 (FILE)
文件模式是將一整個文件,存放在consul的一個key中。
文件模式的優點
- 簡單:容易得到用戶的理解,方便推廣。
- 靈活:可以在consul頁面上,直接編輯配置文件本身,那么就可以為參數編寫注釋, 也可以禁用某個參數。
文件模式的缺點
- 對比 staging 和 生產環境配置文件的差異,難度很高,這增加了運維難度。
- 保持 staging 和 生產配置的一致性,完全依賴人工,這增加了生產環境由于配置不一致而出錯的風險。
- 運維人員需要知道所有配置文件的路徑,配置方法,對運維要求較高,并增加了運維出錯的風險。(通常一個git項目平均有2個配置文件, 一個產品有20個git項目,一個運維需要維護10個左右的項目,運維需要記得大概400個不同的配置文件, 經驗豐富的運維可能需要記住1000 個左右的配置文件)
鍵值對模式 (KV)
鍵值對模式是將配置文件中的參數提取成多個鍵值對,存在在consul中。 這就依賴于文件模板和渲染程序。
- 文件模板: 采用jinja2 格式,這是一種可編程模板引擎。
- 渲染程序: 根據規則渲染所有模板文件到目標路徑下。
鍵值對模式的優點:
- 非常容易對比 staging和生產環境的差異。
- 可以保證staging和生產環境配置文件的一致性。
- 配置文件格式與最終配置文件解耦。 運維無需關注配置文件格式和路徑。
- 可以在模板中編程,以便同一份模板適應多種不同的環境。
- 可以迅速將任意配置文件參數化。(系統默認配置文件,很可能我們只想該其中一個參數,那么我們可以將其參數化)
- 模板維護在源代碼中, 配置維護在consul中,實現了配置定義和配置工作的分離,同時分離,并明確了開發和運維的職責。
除了以上運維優點之外, 鍵值對模式,有如下幾個增強的優點
- 支持繼承。
- 支持注入默認的全局變量。
鍵值對模式的缺點:
- 編寫模板文件需要投入人力成本。配置文件越大,需要時間越多。
- 所有的配置文件的 鍵(key) 都平鋪在同一個空間下,因此
- 配置文件很多時,編輯不方便
- 多個不同的容器使用參數時, 不能使用同名參數
- 沒有命名空間的分隔,不清楚參數作用在哪個容器中。
- 沒有辦法編寫注釋
- 沒有辦法 禁用一個key,同時保留這個key (你可以刪除一個key來禁用)
平臺的傾向性
用戶在了解 多種模式之間的優缺點之后, 結合自己的業務形態和運維人員的現狀,會有自己合理的選擇。 作為技術方案提供方,我們為用戶提供更簡單和更規范的使用方法,但平臺本身不代替用戶做出決策,也不特定傾向于支持某一種特定方案。
我們需要的功能
- kv 的版本歷史功能
- 版本歷史中記錄了由哪個用戶做了此次修改,修改時間是多少
- 基于歷史的回滾功能
- key 的 disable/enable 功能
- key 的 注釋功能