這篇文章帶給大家的內容是關於分散式系統中處理參數配置的四種方法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
一個系統中包含有各種各樣的配置信息,如一個日誌文件需要配置以下幾個信息。
日誌檔案產生主目錄
日誌檔案名稱,不同的日誌等級對應不同的檔案
#目前日誌等級
還有其他各種業務參數、系統參數等,大多單一系統是直接把這些設定寫死在設定檔中,當部署到測試、生產環境就再修改下設定文件,這樣很容易出錯,也不能彈性修改。還有系統變成分散式系統後,子系統越來越多,你要維護這些配置就變得越來越困難。
我覺得至少要能解決以下幾個問題才能算優秀!
1)能在線靈活修改配置
2)能在線動態刷新配置
3)能根據不同環境配置
4)能統一管理維護配置
那麼如何靈活維護這些配置呢?我跟大家總結了一下幾類方法,根據不同的應用場大家參考一下。
把所有參數儲存到資料庫,系統啟動的時候載入到記憶體。
這種實作方式比較簡單,但需要佔用資料庫資源,系統簡單壓力較小時可以選用此種方式。
利用Maven 的maven-resources-plugin
插件,然後根據不同的環境(Profile)提供不同環境的配置文件,這樣,不同環境的配置資訊在打包階段就決定好了。
這樣只能解決了不同作業系統上面的配置,不能靈活動態修改,每次更新只能重新打包或在線修改配置文件,而且資訊也難於同步,如果項目少還好,項目多起來,配置還要常常變動,這樣變得異常煩瑣。
可以把屬性值設定到環境變數中,然後讀取後再設定到 Java 系統屬性中。這種可以實現區分不同環境的目的,但仍然不能動態更新配置,而且配置和維護環境變數相當麻煩,並且在分散式系統中更是個十分頭痛的問題。
// 读取环境变量 java.lang.System#getenv(java.lang.String) // 设置系统属性 java.lang.System#setProperty
這種方法,一些全域的系統配置,如日誌、快取、臨時目錄等可以參考,主流日誌系統都支援從 system properties 中讀取配置。其他一些配置,不建議儲存在環境變數中。
1)目前大多數分散式配置中心都是基於Zookeeper 來實現的,Spring Cloud 有自己的配置中心元件,它們都支援線上動態更新和刷新配置。
2)直接把配置存放在資料庫,如果系統並發小的或管理類別系統的話可以參考,對於高並發應用不建議用資料庫做配置中心,畢竟它會帶來存取壓力,而且實現動態更新配置也比較複雜。
這是我們目前應用的4 種配置方法,很顯然,配置中心是最佳的解決方案,也解決了以上的幾個問題,但需要依賴中間件及其高可用性。
#以上是分散式系統中處理參數配置的四種方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!