ERP的配置管理实践
源寶導讀:隨著ERP系統的日益復雜,應用部署的方式越來越復雜,應用的配置也變得越來越龐雜,難以維護和管理。本文將介紹配置中心服務通過集中化、可離線的架構設計,解決ERP配置問題的實踐經驗。
一、背景
? ? 隨著ERP業務的日益復雜,程序配置越來越多,應用部署的方式越來越復雜,對程序配置管理的要求越來越高:
配置集中管理,一處修改全局生效,避免應用集群中配置不一致的問題。
不同的應用環境(生產、測試)需要不同的配置。
部分配置修改后需要立即生效。
復雜的配置難以理解,容易出錯,需要有友好的交互界面來提供輔助。
? ? 在這樣的復雜環境下,傳統的通過配置文件的方式已無法滿足要求,我們開始設計配置管理中心,統一接管ERP的應用配置。
二、基礎模型
配置中心被設計為一個獨立的Windows服務,以HTTP方式對外提供服務。
如上圖所示:
在ERP安裝部署時,向配置中心寫入安裝過程產生的初始配置。
安裝部署完成之后,如果環境還有調整,就需要進入配置管理界面,修訂配置。
配置修訂完成后,會產生配置變更通知。訂閱了配置變更事件的客戶端就會收到配置變更通知,重新讀取就能獲取到最新配置。
三、配置項的設計
? ? 不同ERP版本的配置項存在差異,而配置中心不僅需要適配最新版本的ERP,還需要兼容歷史版本。為了解決這個問題,配置中心為每個大版本ERP提供獨立的配置定義文件,文件采用XML格式。
示例:(系統設置-多時區的配置)
<options><group title="系統設置"><option title="啟用多時區" name="Timezone-enable" type="string" ui="radio" description="啟用多時區后數據中日期字段將會以“標準時區”存儲" defaultvalue="0"><item text="啟用" value="1" /><item text="禁用" value="0" /></option><option title="存儲時區" name="Timezone-store" type="string" ui="radio" description="系統標準時區,默認為當前站點服務器對應時區,如選擇此配置需要保證海外、國內服務器時區設置一致。" defaultvalue="0"><item text="服務器時區" value="0" /><item text="協調世界時(UTC)" value="1" /></option></group> </options>group:配置分組,便于從邏輯視角對配置項進行分組管理;
option:代表一個具體的配置定義,根據其中的ui字段,產生相應的UI。
四、配置客戶端設計
上圖簡要描述了配置中心客戶端的實現原理:
客戶端和服務端保持了一個輪詢(15s一次),從而能較快的獲得配置更新的推送;
客戶端從配置中心服務端獲取到應用的最新配置后,會保存在內存中;
客戶端會把從服務端獲取到的配置在本地文件系統緩存一份。在遇到服務不可用,或網絡不通的時候,依然能從本地恢復配置;
應用程序可以從客戶端獲取最新的配置、訂閱配置更新通知。
可用性考慮
? ? 配置中心作為基礎服務,可用性要求非常高,下面的表格描述了不同場景下配置中心的可用性:
五、兼容性設計
? ? 兼容性設計的目標:
任意配置中心服務端兼容所有版本的配置中心客戶端。
任意配置中心客戶端兼容所有版本的配置中心服務端。
? ? 服務端兼容主要是服務API的兼容,只要API接口不發生變化,舊版本的客戶端就能正常調用。
? ? 我們制定了相關的規范:
接口一旦確定,就不能調整接口簽名。唯一例外情況是增加參數,由于WebApi的性質,不存在的參數會以默認值填充。
在增加新特性時,不能修改原有接口的行為,如果原有接口無法滿足,就增加新的接口;如果數據結構發生變化,原有接口無法完全支持時,需要在原接口的實現中做兼容處理(犧牲掉一部分新特性)。
例如:
在2.0版本支持應用分庫特性后,允許為不同的應用配置不同的數據庫,于是數據庫的配置變成了多值。
原有的接口需要調整為:如果數據庫配置是多值,就返回第一個值。
這樣處理后,歷史版本的應用也可以使用到最新版本的配置中心,但是不能用到新特性。
? ? 為了保證新版本的客戶端可以正常使用舊版本的服務端,還需要做客戶端的兼容處理。
? ? 這里定義一個配置讀取接口IConfigReader:
internal interface IConfigReader { // 接口方法略 }? ? 特性上有較大變化時,就重新寫一個接口實現版本。到目前為止,一共有3個版本的接口實現。
? ? 當應用需要讀取配置時,首先確認服務端的版本,然后創建一個相應接口的實現版本。
public static IConfigReader Get(string serviceUri, string env, string siteGroupKey, string appId, Version serviceVersion) {if (serviceVersion >= new Version(2, 1, 0, 17)){// 支持合并接口讀取和變更時間戳return new ConfigClientV3(serviceUri, env, siteGroupKey, appId);}else if (serviceVersion >= new Version(2, 1)){// 支持分離部署return new ConfigClientV2(serviceUri, env, siteGroupKey, appId);}else{// 兼容版本:1.xreturn new ConfigClientV1(serviceUri, env, siteGroupKey, appId);} }我們來看看不同場景下的兼容性是如何保證的:
5、總結
? ? 目前的配置中心服務架構有兩個特點:
靈活可擴展的配置項設計:很好的滿足了多環境多版本系統不同的配置要求;
可離線的配置同步架構:既滿足了配置集中統一管理的需求,又保證不會因為配置中心單點故障導致ERP整體宕機。
? ? 隨著ERP的應用越來越多,應用間的關系越來越復雜,ERP部署的模式越來越豐富,配置中心的功能也演變的更加復雜,只有通過架構的不斷優化演進,配置中心才能更穩定高效的支撐ERP系統的運行。
------ END ------
作者簡介
王同學:?研發工程師,目前負責ERP運行平臺的設計與開發工作。
也許您還想看
鏈路追蹤在ERP系統中的應用實踐
從案例角度解析建模平臺動態規則引擎
如何解決大批量數據保存的性能問題
研發協同平臺持續交付2.0架構演進
總結
以上是生活随笔為你收集整理的ERP的配置管理实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用十行代码快速创建权限管理系统
- 下一篇: EntityFramework Core