在單體應用中,配置管理可能不是什麼大的事情,通常會以配置檔案的方式。常見的方法比如將配置放在ci伺服器上通過打包指令碼打入應用包中,或者直接放到執行應用的伺服器的特定目錄下,或者儲存到資料庫中。這種方式在傳統的單體應用中簡單有效,但是也會有些比較棘手的問題:
配置變化頻繁時,需要頻繁的打包部署應用
不同環境的配置需要分開管理(比如測試環境與生產環境)
而在分布式微服務架構中,服務數量劇增,如果還是手動去實現配置資訊的修改或資料的遷移等,效率是很低的,而且手動操作配置也極有可能出現錯誤的情況:
複雜的業務對應大量的配置項
對集群部署的應用配置進行修改時需要一次修改每個節點上的應用配置
這種背景下,中心化的配置服務即配置中心應運而生。配置中心就是一種統一管理各種應用配置的基礎服務元件,一般來說,配置中心會有下面的特性(不僅限如此):
我們的需求
能夠按需動態載入配置
可以從多個源載入配置:記憶體,檔案,環境變數,分布式配置中心等
多個配置源可以合併並覆蓋
可以監聽配置變更
配置可以版本化管理,並可以使用指定版本
可以以金絲雀的方式發布配置
我們的配置中心
基於以上需求,我們使用乙個比較簡單的架構實現了第乙個版本的配置中心。
我們提供乙個比較簡單(jianlou)的介面來操作服務的配置,並使用etcd來儲存並下發的配置資料。在服務框架中,我們使用乙個配置中心的庫來獲取和監聽配置。該庫支援從記憶體,本地檔案以及etcd等多個源載入配置資料,也就是說我們的庫支援傳統的靜態配置,也支援動態配置。
使用配置中心
假設我們有乙個示例配置:
,"cache":}
}
我們使用以下方式(配置源為本地檔案以及etcd)來載入配置:
,)讀取配置:
type host struct
var hostdatabase host
config.
get(`hosts`, `database`)
.scan
(&hostdatabase)
;// hostdatabase:
監聽配置項變更:
w, err :
= cm.conf.
watch
(`hosts`, `database`)
if err != nil
for}
若管理員在管理介面變更database的address為127.0.0.3,則將觸發上面的**,獲得更新之後的address。
總結我們現在使用的配置中心,基本上能滿足像我們這樣的小型創業公司配置變更發布的運維需求,但是還有很多可以改進的地方,比如上面提到的版本化管理配置,灰度發布配置等,使用配置中心的可用性更好,當然管理介面上也需要優化為更加友好的展現形式。
微服務架構 2 服務配置管理
目錄2.spring cloud config 3.alibaba nacos 最後參考資料 spring microservices in action spring cloud alibaba 微服務原理與實戰 b站 尚矽谷 springcloud 框架開發教程 周陽 將配置寫入乙個 confi...
統一配置管理(redis ehcache)
1 讀取本地快取流程 2 刷資料流程 3 本地快取定時獲取更新資料 系統中存在各種開關配置 如是否寫大資料日誌,是否校驗 和各種業務配置,配置資訊比較多。在大流量的情況下直接訪問redis快取會壓垮redis。故選擇redis 本地快取的方式。1 刷redis策略 通過定時任務 全量刷 通過增加一條...
統一配置中心
1.搭建統一配置專案 建立git倉庫配置檔案 檔案訪問路徑說明 2.spring cloud bus 配置檔案修改後自動重新整理 org.springframework.boot spring boot starter amqp 暴露全路徑介面 management endpoints web ex...