日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

分布式统一配置平台-Disconf.Net

發(fā)布時間:2023/12/4 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式统一配置平台-Disconf.Net 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為了更好的解決分布式環(huán)境下多臺服務(wù)實例的配置統(tǒng)一管理問題,本文提出了一套完整的分布式配置管理解決方案。結(jié)合.net項目具體情況,實現(xiàn)了配置發(fā)布的統(tǒng)一化,對配置進行持久化管理并對外提供restful接口,在此基礎(chǔ)上,基于ZooKeeper實現(xiàn)對配置更改的實時推送。系統(tǒng)參考了百度的Disconf,實現(xiàn)和改進了部分功能,是Disconf的.Net精簡版,功能有待進一步完善。

1.系統(tǒng)設(shè)計

1.1設(shè)計理念

????? l? 簡單易用,用戶體驗良好

????? l? 支持配置(KV配置項+配置文件)的分布式化管理

????? l? 配置發(fā)布、更新統(tǒng)一化:用戶統(tǒng)一在平臺上進行發(fā)布、更新配置。

????? l? 配置更新自動化:用戶在平臺更新配置,使用該配置的系統(tǒng)會自動發(fā)現(xiàn)該情況,并應(yīng)用新配置。

?

????? 系統(tǒng)結(jié)構(gòu)圖如下:?

?

?

????? 初始化時,業(yè)務(wù)流程圖如下:

?

????? 配置更新時,業(yè)務(wù)流程圖如下:

?

1.2.功能介紹

????? 系統(tǒng)模塊架構(gòu)圖如下:

?

1.2.1Client

  配置管理模塊:統(tǒng)一管理用戶實例中本地配置文件和配置項

  下載模塊:restful風(fēng)格的下載配置文件和配置項

  watch模塊:監(jiān)控遠程配置文件和配置項的變化

1.2.2Web

配置管理模塊:支持配置模板(配置項或配置文件)的上傳、下載、更新

配置存儲模塊:管理所有配置的存儲和讀取,根據(jù)appName、version、environment來區(qū)分項目配置

通知模塊:當配置更新后,實時通知使用這些配置的所有實例

權(quán)限控制:web用戶的權(quán)限控制

2.客戶端應(yīng)用

2.1添加clientConfig配置節(jié)點

在app.config或者web.config中的configSections節(jié)點下添加配置

<section name=”clientConfig” type=”Disconf.Net.Client.ClientConfigSection,Disconf.Net.Client”/>

然后在appSettings同級別的節(jié)點上添加clientConfig配置,示例如下

<configSections>


?<section name=”clientConfig” type=”Disconf.Net.Client.ClientConfigSection,Disconf.Net.Client”/>


</configSections>


<appSettings file=”appSettings.config”/>


<clientConfig configSource=”clientConfig.config”/>

2.2clientConfig配置說明

具體示例如下:

<clientConfig webApiHost=”http://192.168.1.100:8088/” enableRemote=”true”>


<clientInfo appName=”consoletest” environment=”Dev” version=”1.0.0.0” clientName=”Console_1”/>


<updateStrategy fileIgnores="notdown.txt" itemIgnores="aa,bb,cc " startedSync="true" retryTimes="3" retryIntervalSeconds="10" />


<preservation absolutePath="false" tmpRootDirectory="Tmp\Download\Configs" factRootDirectory="" tmpItemsLocalName="~items.xml" tmpFilesLocalName="~files.txt"/>


</clientConfig>

節(jié)點名稱

必配

默認值

節(jié)點描述

webApiHost


Y


Rest服務(wù)器域名地址

enableRemote


N

true

是否啟用遠程配置,默認true,設(shè)為false的話表示不從遠程服務(wù)器下載配置

clientInfo

appName

Y


客戶端程序名稱,注意大小寫要與服務(wù)端一致

environment

Y


當前客戶端程序所處環(huán)境,注意大小寫要與服務(wù)端一致

version

Y


當前客戶端程序版本,注意大小寫要與服務(wù)端一致

clientName

N


客戶端標識,用于服務(wù)端查看已更新客戶端,如果不設(shè)置則默認獲取客戶端電腦名稱

updateStrategy

fileIgnores

N


要忽略更新的文件配置,以,分割,注意大小寫要與服務(wù)端一致

itemIgnores

N


要忽略更新的鍵值對配置,以,分割,注意大小寫要與服務(wù)端一致

startedSync

N

true

啟動時是否同步加載,默認同步

retryTimes

N

3

當獲取失敗時的重試次數(shù)

retryIntervalSeconds

N

10

每次重試時間間隔,單位秒

preservation

absolutePath

N

false

是否絕對路徑,默認false。當false時,表示默認以

AppDomain.CurrentDomain.BaseDirectory為比較點,注意:該配置同時適用于TmpRootDirectory、

FactRootDirectory,即要么都只能絕對路徑,要么都只能相對路徑

tmpRootDirectory

N

Tmp/Download/Configs

下載下來的配置臨時保存文件夾根目錄

factRootDirectory

N

Configs

配置文件實際所在的根目錄

tmpItemsLocalName

N

~items.xml

在臨時目錄下用于保存所有鍵值對的文件名,設(shè)置為空表示不保存,文件保存在TmpRootDirectory目錄下,所以注意不要與

實際配置文件名字沖突


tmpFilesLocalName

N

~files.txt

在臨時目錄下用于保存所有文件配置名的文件名,設(shè)置為空表示不保存,文件保存在TmpRootDirectory目錄下,所以注意不要與實際配置文件名字沖突

?

2.3Rules

除了配置外,還需要設(shè)置更新策略,客戶端才能進行配置更新。目前,Rules設(shè)置僅支持編碼的方式進行,Rule分兩種:FileRule,ItemRule,下面分別進行描述:

FileRule:用于設(shè)置如何更新文件類型配置,其包含以下方法

方法名

描述

IFileRule MapTo(string refreshSectionName)

注冊Rule規(guī)則,設(shè)置默認的文件配置映射

參數(shù)refreshSectionName表示更新回調(diào)時,

ConfigurationManager.RefreshSection要刷新的節(jié)點名稱,默認采用遠程配置的configName

IFileRule RefreshIgnores()

不自動調(diào)用ConfigurationManager.RefreshSection方法更新配置

IFileRule CallBack(Action action)

當文件下載完成并且替換本地對應(yīng)文件后回調(diào),注意此處將采用委托鏈的方式,即多次調(diào)用均會被執(zhí)行

ItemRule:用于設(shè)置如何更新鍵值對類型配置,其包含以下方法

方法名

描述

IItemRule MapTo(string propName)

注冊Rule規(guī)則,設(shè)置默認的屬性映射參數(shù)

propName表示要賦值的屬性名,默認采用遠程的configName

IItemRule SetProperty<T>(T entity, string propName = null, Func<string, object> typeConvert = null)

更新指定實體的屬性值,按默認方式獲取實例屬性,注意此處多次調(diào)用均會被執(zhí)行

IItemRule SetProperty(object entity, PropertyInfo prop, Func<string, object> typeConvert = null)

更新指定實體的屬性值,注意此處多次調(diào)用均會被執(zhí)行

IItemRule SetStaticProperty<T>(string propName = null, Func<string, object> typeConvert = null)

更新靜態(tài)屬性的值,按默認方式獲取靜態(tài)屬性,注意此處多次調(diào)用均會被執(zhí)行

IItemRule SetStaticProperty(PropertyInfo prop, Func<string, object> typeConvert = null)

更新靜態(tài)屬性的值,注意此處多次調(diào)用均會被執(zhí)行

IItemRule CallBack(Action<string> action)

當值發(fā)生變更時如何進行回調(diào),注意此處將采用委托鏈的方式,即多次調(diào)用均會被執(zhí)行

2.4ConfigManager

該類為Client配置入口,通過Singleton提供唯一實例,除了提供Rules的配置入口外,還提供異常通知的事件

要使Disconf.Net.Client工作,必須顯示執(zhí)行指定方法manager.Init(),而在init之前,還需設(shè)置Rule和Fault,可以通過ConfigManager.Instance來獲取該類的實例對象,然后通過對應(yīng)的Rule進行相關(guān)Rule設(shè)定,示例如下:

//要更新的文件


ConfigManager.Instance.FileRules.For("appSettings.config").CallBack(() => {


? ? ? Console.WriteLine("File changed notice twice");


});



//要更新的鍵值對


ConfigManager.Instance.ItemRules.For("Dai").MapTo("Person").SetStaticProperty<Program>().CallBack(v =>{


Console.WriteLine("Now item value:{0}", v);


Console.WriteLine("Program.Person is {0} now", Program.Person);


? ? if (v.Length > 3)


? ? {


? ? ? ? throw new Exception("Too Long");


? ? }


});



//忽略更新到本地的鍵值對


ConfigManager.Instance.ItemRules.For("Peng").CallBack(v =>{


Console.WriteLine("Now item value:{0}", v);


});



//異常處理


ConfigManager.Instance.Faulted+=Manager_Faulted;


//Config初始化,包括ZooKeeper、scan等


ConfigManager.Instance.Init();

要特別說明的是:

1、File因為屬于下載后覆蓋指定位置文件的方式,所以對于Rule可以設(shè)置默認規(guī)則,如例子中的appSettings.config,其對應(yīng)的就是config文件中的appSettings部分,此時如果不需要進行CallBack調(diào)用,且文件名稱(去除后綴)部分與Section一致,那么這部分Rule設(shè)置可以忽略,程序會在初始化時自動進行默認設(shè)置,而對于Item,因為無法確認更新策略,所以如果不設(shè)置Rule,那么就算從服務(wù)端獲取到了值,該部分也只能被忽略。

2、對于異常部分,程序只是簡單的通過Faulted事件來傳遞異常信息,該事件只有一個Exception類型的參數(shù)。

3.web端應(yīng)用

配置步驟:

1、? 創(chuàng)建具體應(yīng)用(項目)

2、? 創(chuàng)建應(yīng)用的配置模板(1~n個配置,如appSetting.config、redisconfig.config、rabbitMQConfig.config等配置模板)

3、? 創(chuàng)建應(yīng)用的環(huán)境(如:開發(fā)環(huán)境、測試環(huán)境、仿真環(huán)境等),修改相關(guān)的配置

4、? 啟用對應(yīng)的配置

5、? 至此,client端就可以獲取應(yīng)用環(huán)境對應(yīng)的所有配置

3.1登錄

登陸進入配置管理界面

3.2應(yīng)用

?

?

【新建】:填寫應(yīng)用名稱,應(yīng)用描述保存完成新建,返回可返回應(yīng)用管理首頁。

【初始化ZooKeeper】:第一次啟動時Zookeeper初始化。

【編輯】:與新建界面一致,可修改應(yīng)用名稱,應(yīng)用描述,保存即返回應(yīng)用管理首頁。

【編輯環(huán)境】:進入環(huán)境環(huán)境配置管理首頁。

【刪除】:刪除對應(yīng)應(yīng)用記錄。

3.3模板

顯示所有模板,操作環(huán)境配置前,需要先配置模板,根據(jù)模板對相應(yīng)環(huán)境的配置進行操作。

?

【新建】:新增模板,填寫模板名稱、描述、類型、默認值版本號等,如選擇文件類型。可上傳文件讀取文件內(nèi)容,版本號可以選擇已經(jīng)有的版本號,或者新建版本號。

【編輯】:操作同新建模板,可對模板內(nèi)容進行修改。

【刪除】:點擊刪除可刪除對應(yīng)模板記錄,如該模板在環(huán)境中存在配置項,則該模板不允許刪除,需刪除對應(yīng)該模板的配置項,才可以刪除對應(yīng)模板。

3.4環(huán)境

【新增環(huán)境】點擊加號可以新增環(huán)境,填寫環(huán)境名稱,描述保存即可。

?

【編輯環(huán)境】在對應(yīng)環(huán)境上點擊鼠標右鍵即可彈出編輯菜單,點擊Edit即可編輯環(huán)境,可以修改名稱內(nèi)容等。

?

【配置首頁】:配置首頁根據(jù)版本進行分類,默認顯示頭部第一個版本,點擊其他版本可以進行切換,顯示的配置項是模板默認配置項,點擊啟用即可個性化賦值,針對不同環(huán)境進行不同的賦值。編輯可編輯相應(yīng)配置,禁用等同于刪除配置。

?

【啟用配置】:名稱默認值不能修改,可以點擊使用默認值,直接賦值,也可以上傳文件使用文件內(nèi)容,保存即可。

【編輯配置】:操作同啟用配置,保存即可修改值。

【禁用配置】:禁用等同于刪除配置,刪除對應(yīng)模板配置項,可刪除對應(yīng)模板。

3.5角色

【角色首頁】:

?? 角色首頁展示角色列表,角色分為超級管理員和非超級管理員;

?? 超級管理員角色不展示;

?? 超級管理員可以看到所有非超級管理員角色,非超級管理員只可以看到當前角色用戶創(chuàng)建的角色;

?? 可以新增角色,也可以對角色進行編輯,只有在創(chuàng)建用戶時勾選是否為系統(tǒng)管理員才可以進行角色管理。

【新建角色】:

?? 新建角色輸入角色名稱,可以勾選的權(quán)限為當前用戶所擁有的權(quán)限;

?? 新建的角色作為該用戶的下屬角色,可分配給當前用戶新建的用戶;

?? 父級權(quán)限為新建應(yīng)用所增加的權(quán)限,以后每增加一個環(huán)境,就相應(yīng)的增加該應(yīng)用下的該環(huán)境權(quán)限,除超級管理員外的角色需對應(yīng)勾選該權(quán)限才能看到該應(yīng)用或者該權(quán)限,保存角色即可。

【編輯角色】:操作同新建角色,可以對該角色進行名稱修改,權(quán)限修改。

3.6用戶

管理用戶首頁,顯示所有用戶,可進行新建,編輯用戶等操作。

?

【新建用戶】:填寫姓名,用戶名,密碼,選擇角色(擁有對應(yīng)角色權(quán)限、且可以選擇的角色為當前登陸用戶新建的角色),選擇是否為系統(tǒng)管理員(系統(tǒng)管理員擁有新建用戶、新建角色權(quán)限),保存即可。

【編輯用戶】:操作同新建用戶,保存即可修改。

原文地址:http://www.cnblogs.com/qkbao/p/6638721.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的分布式统一配置平台-Disconf.Net的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。