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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Stardust]星尘配置中心

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Stardust]星尘配置中心 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在分布式系統開發中,配置中心必不可少。在中通幾年時間里,為了配合大數據計算平臺,統一管理數百個微小應用,設計了一套輕量級配置中心。星塵配置中心在其理念基礎上改進,針對中小團隊而全新設計!

源碼:https://github.com/NewLifeX/Stardust

試用:http://star.newlifex.com

Nuget包:NewLife.Stardust、NewLife.Stardust.Extensions

快速預覽

三個應用,配置數據如下:

基于標簽的變量引用,是星塵配置中心的亮點,請求接口返回數據如下:

配置請求時加上作用域 scope=prod

不同作用域,返回了不同的配置值。prod域不存在,使用了_master的默認空域配置10.0.0.1。

功能特點

配置中心本質上就是一個名值字典,在開發實踐中需要解決多環境、多團隊協同等問題。

星塵配置中心主要功能特點如下:

  • 使用簡單,設置名值配置后,應用可通過接口獲取配置,NewLife組件配置系統集成;

  • 支持嵌套,${_teamName}即可從本應用或共享應用中獲取_teamName進行替換,可以靈活構建各種配置項;

  • 支持共享,Common應用共享給StarWeb,StarWeb可以直接返回Common的配置,或者作為替換變量,Common就是各團隊統一使用的配置值,一次修改多個應用生效;

  • 支持忽略,下劃線開頭的配置項僅作為變量,不會返回給客戶端;

  • 支持跨應用引用,StarWeb的conn_shop設置${_master@Db},指定引用Db應用的_master變量,而無需Db共享給StarWeb,只有DBA維護Db和Redis,而幾乎所有應用都需要用到;

  • 支持多作用域,Db有默認空域以及dev作用域的_master,以區分生產環境和開發環境的數據庫配置,StarWeb應用使用時只管引用_master,dev作用域將穿透到所有被引用變量;

  • 基本用法

    使用 HttpConfigProvider 可以直接訪問星塵配置中心,也可以訪問阿波羅配置中心,具體參考

    此處為語雀文檔,點擊鏈接查看:https://www.yuque.com/go/doc/31612474

    示例代碼:

    var provider = new HttpConfigProvider {Server = "http://star.newlifex.com:6600",//Server = "http://localhost:6600",AppId = "StarWeb" };var str = provider["test1"]; Assert.NotEmpty(str);var keys = provider.Keys.ToArray(); Assert.NotNull(keys);var model = provider.Load<Model2>(); Assert.NotNull(model); Assert.NotEmpty(model.Test); Assert.Equal(str, model.Test); Assert.NotEmpty(model.Shop); Assert.NotEmpty(model.Title); Assert.Equal("NewLife開發團隊", model.Title);var model2 = new Model2(); provider.Bind(model2); Assert.Equal(str, model2.Test); Assert.NotEmpty(model.Shop); Assert.Equal("NewLife開發團隊", model.Title);provider.LoadAll();

    實例化HttpConfigProvider時,需要指定星塵服務端地址和應用AppId,還需要密鑰Secret(如果服務端設置了應用密鑰)。

    得到provider以后,就可以直接訪問配置數據了,例如 provider["test1"]。

    也可以通過Load方法,把配置數據設置到一個對象的屬性上去。

    還可以通過Bind方法,把配置數據綁定到一個對象的屬性上,這個辦法還具備自動刷新功能,也就是說,服務器配置數據變化以后,HttpConfigProvider內部將會更新該對象的屬性。這里的更新可能因為網絡原因最多有一分鐘的延遲。Bind的用法非常適用于配置對象。

    集成用法

    星塵配置中心的客戶端集成在星塵組件包 NewLife.Stardust 中,直接從nuget引用。

    實例化星塵工廠后,即可得到配置提供者對象:

    var star = new StarFactory(null, "StarWeb", null);services.AddSingleton(star); services.AddSingleton(star.Tracer); services.AddSingleton(star.Config);// 數據庫連接配置 DAL.GetConfig = star.Config.GetConfig;

    這的star.Config,就是上面“基本用法”中的IConfigProvider,實際類型HttpConfigProvider。借助星塵工廠,統一了應用的身份驗證。同時,這里不需要自己配置星塵服務端地址,它將會自動讀取配置文件appsettings.json的StarServer配置項,或者跟服務器節點本機的StarAgent溝通得到。

    DAL是數據中間件的數據層,GetConfig直接建立跟星塵配置中心的綁定關系,此舉讓XCode能夠跟星塵緊密結合在一起。

    這里把star.Config注入到ioc中,業務代碼使用的時候,就可以通過IConfigProvider得到實際配置對象。

    消費使用例子如下,JobHost解析使用了IConfigProvider,SyncOrder等作業類內部也可以解析使用。

    using System; using System.Threading; using System.Threading.Tasks; using AntJob; using AntJob.Providers; using NewLife; using NewLife.Configuration; using NewLife.Log; using NewLife.Model; using OrderCenter.Api.JobServices;namespace OrderCenter.Tasks.JobServices {public class JobHost : BackgroundService{private readonly IServiceProvider _provider;private readonly IConfigProvider _config;private readonly OrderStatService _stat;private Scheduler _scheduler;public JobHost(IServiceProvider provider, IConfigProvider config, OrderStatService service){_provider = provider;_config = config;_stat = service;}protected override Task ExecuteAsync(CancellationToken stoppingToken){var set = AntSetting.Current;var services = ObjectContainer.Current;var server = _config["antServer"];if (!server.IsNullOrEmpty()){set.Server = server;set.Save();}// 實例化調度器var sc = new Scheduler{Tracer = DefaultTracer.Instance,// 使用分布式調度引擎替換默認的本地文件調度Provider = new NetworkJobProvider{Server = set.Server,AppID = set.AppID,Secret = set.Secret,Debug = false}};// 訂單冷熱同步。熱表訂單同步到冷表sc.AddHandler<SyncOrder>();sc.AddHandler<SyncOrder2>();// 啟動調度引擎,調度器內部多線程處理sc.Start();_scheduler = sc;return Task.CompletedTask;}public override Task StopAsync(CancellationToken cancellationToken){_scheduler.TryDispose();_scheduler = null;return Task.CompletedTask;}} }

    .NET Core 高度集成用法

    在Asp.NET Core應用中,可以整體引入星塵全家桶,除了配置中心,還有監控中心、注冊中心(服務注冊與發現)、日志中心等。

    只需要在Startup的ConfigureServices中使用一句:services.AddStardust("StarWeb")

    這里不需要自己配置星塵服務端地址和密鑰,它將會自動讀取配置文件appsettings.json的StarServer配置項,或者跟服務器節點本機的StarAgent溝通得到。

    using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using NewLife.Cube; using Stardust.Data; using Stardust.Server.Services; using XCode.DataAccessLayer;namespace Stardust.Web {public class Startup{public Startup(IConfiguration configuration) => Configuration = configuration;public IConfiguration Configuration { get; }public void ConfigureServices(IServiceCollection services){var star = services.AddStardust("StarWeb");services.AddControllersWithViews();services.AddCube();}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){// 使用Cube前添加自己的管道if (env.IsDevelopment())app.UseDeveloperExceptionPage();elseapp.UseExceptionHandler("/CubeHome/Error");app.UseCube(env);app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=CubeHome}/{action=Index}/{id?}");});// 發布服務到星塵注冊中心,需要指定服務名app.RegisterService("StarWeb");}} }

    配置管理

    應用引入NewLife.Stardust包接入星塵配置中心以后,配置中心將會自動創建應用(要求StarServer下的config/starserver.config的AutoRegister設置為true)。

    應用配置

    進入星塵StarWeb管理平臺(例如http://star.newlifex.com/),配置中心子系統,應用配置頁面,即可管理各個應用的配置數據。

    每個應用的基本信息,包括:

      • 啟用。是否禁止該應用使用配置中心;

      • 版本。該應用正在使用的配置版本號,客戶端請求配置數據時,如果傳入相同版本號,則認為配置沒有改變,不返回任何配置數據,意為讓客戶端繼續使用上一次的配置數據;

      • 下一版本。下一個未發布版本,該應用的配置數據有改變,但是還沒有發布,此時下一版本號會比當前版本號要大,同時“發布”按鈕顯示出來;

      • 定時發布。設置定時發布下一個版本的時間,到期后自動發布下一版本;

      • 可被依賴。指定應用是否可以被其它應用依賴,例如項目組內部的工控配置,可以寫到一起,設置為可被依賴,然后其它項目即可直接依賴該應用,從而得到該應用的全部配置數據,融入自有配置數據;

      • 依賴應用。當前應用依賴其它的應用;

      • 全局。全局應用意為該應用的配置數據融入所有其它應用的配置數據中,在其它應用拉取時一起返回;

    管理配置

    從應用配置找到應用,點擊“配置”進入管理頁面。

    在這里可以添加配置數據,也可以修改維護配置。不用擔心對線上系統造成影響,因為在發布修改之前,所做修改并不會被各個應用客戶端拉取。

    配置名稱以下劃線開頭時,僅用于內嵌的變量引用,并不會返回給客戶端。這是星塵配置中心的一個特色。

    在星塵配置中心,某個應用之下,配置名稱并不是唯一的,配置名稱加上作用域Scope才是唯一。也就是說,同樣一個配置中,不同的作用域可以有不同的值。作用域Scope常用于dev/test/prod/uat等環境區分。

    如果某個配置數據作用域為空,表示該配置的默認值,當該配置名稱沒有任何作用域配置客戶端請求時,使用空域配置數據。如果沒有空域配置,客戶端指定的配置域又找不到時,配置中心將會給客戶端返回錯誤信息。

    作用域不僅僅適用于某個應用,而是能夠穿透到內嵌應用。因此,conn_shop配置值是${_master@Db};database=shop,引用了Db應用的_master,而Db里面配置了多個_master,分別對應不同的配置值。conn_shop得以在不同環境下使用不同的數據庫連接字符串。

    全局應用

    每個公司可以指定一個應用作為全局應用,存放所有應用都需要使用的配置數據,例如CompanyName=新生命。各個應用就不再需要配置CompanyName,而應用端可以直接使用。

    當然,系統并沒有限制只能使用一個全局應用,設置多個全局應用也是可以的,只是可能帶來管理上的麻煩。

    演示系統中的Common就是全局應用,它內部的_teamName可被所有應用直接使用,而無需建立依賴關系。

    需要注意的是,_teamName以下劃線開頭,表示內部配置,僅用于變量引用,不會作為配置數據返回給應用客戶端。

    同名配置優先級:應用內該Scope配置>應用內空域配置>依賴應用>全局應用

    依賴應用

    考慮到團隊內部的公共應用需要,可以設置某個應用為團隊內部的公共應用。團隊內部各個應用可以直接引用該依賴引用。一個公司可能有多個開發團隊,不同的團隊有自己的公共應用。

    演示系統中的Db就是可被依賴的應用,然后StarWeb應用依賴了該Db應用,多選。

    因此StarWeb自動“獲得”了Db的所有配置項,這里只有_master。

    需要注意的是,_master以下劃線開頭,表示內部配置,僅用于變量引用,不會作為配置數據返回給應用客戶端。

    同名配置優先級:應用內該Scope配置>應用內空域配置>依賴應用>全局應用

    變量引用

    基于公共配置抽象的需要,星塵配置中心支持變量引用。允許一個配置數據引用其它配置內容。配置標簽以美元符號和大括號組成,例如conn_shop的配置值${_master@Db};database=shop,表示引用Db應用的_master配置值,然后在后面加上一些自己的內容。

    這里的例子跟依賴應用有點關系,如果建立了依賴引用,那么這里可以直接寫${_master};database=shop。因此,依賴引用不是必須的,可以通過@Db的形式,強行引用任意其它應用的配置數據。但是強烈不建議這么做,因為這樣子會讓被引用者根本分不清楚自己被誰引用了,從而帶來管理風險。

    同名配置優先級:應用內該Scope配置>應用內空域配置>依賴應用>全局應用

    版本發布

    新增或者修改配置數據以后,配置數據版本號將會變成當前應用版本號加一,表示這是未發布新版本。

    此時,在應用內部,或者外面列表頁,點擊“發布”,都將會把當前版本號改為下一版本號,通知客戶端該應用的配置數據有改變。

    作用域規則

    配置客戶端默認并不會向配置中心提交scope,而是由配置中心根據來源IP地址計算得到scope。

    當IP滿足某個匹配條件時,產生某個結果,scope等于指定值。

    同步阿波羅配置

    星塵配置中心支持從阿波羅同步指定應用同步配置數據。

    阿波羅接入,并不需要密鑰驗證,所以……

    總結

    星塵配置中心客戶端可以緊密結合星塵,通知緊密結合XCode數據中間件、魔方快速開發平臺、螞蟻調度系統、Redis消息隊列等等NewLife系列產品組件。

    同時,該客戶端還可以對接阿波羅配置中心,使用方法不變。

    星塵配置中心為了簡化使用,提升用戶體驗,不再設置命名空間等概念。建議普通用戶直接給各個應用設置配置數據即可,少數高級用戶可以使用全局、依賴、引用等高級特性。

    總結

    以上是生活随笔為你收集整理的[Stardust]星尘配置中心的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。