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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载...

發(fā)布時(shí)間:2023/12/4 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在上一篇文章里,我們通過注入sentinel component到apigateway實(shí)現(xiàn)了對(duì)下游服務(wù)的保護(hù),不過受限于目前變更c(diǎn)omponent需要人工的重新注入配置以及重啟應(yīng)用更新component等等原因,對(duì)于真實(shí)的環(huán)境運(yùn)維稍有難度,最近我根據(jù)sentinel-golang相關(guān)文檔重新編寫了一個(gè)動(dòng)態(tài)配置的功能并集成到了我們的電商demo管理端,今天就講解并演示一下它是如何工作的。

目錄:

一、通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)

二、通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(二)——通訊框架講解

三、通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(三)——一步一步教你如何擼Dapr

四、通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(四)——一步一步教你如何擼Dapr之訂閱發(fā)布

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(五)——一步一步教你如何擼Dapr之狀態(tài)管理

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(六)——一步一步教你如何擼Dapr之Actor服務(wù)

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(七)——一步一步教你如何擼Dapr之服務(wù)限流

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(八)——一步一步教你如何擼Dapr之鏈路追蹤

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(九)——一步一步教你如何擼Dapr之OAuth2授權(quán)

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(九)——一步一步教你如何擼Dapr之OAuth2授權(quán)-百度版

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十)——一步一步教你如何擼Dapr之綁定

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十一)——一步一步教你如何擼Dapr之自動(dòng)擴(kuò)/縮容

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十二)——istio+dapr構(gòu)建多運(yùn)行時(shí)服務(wù)網(wǎng)格

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十三)——istio+dapr構(gòu)建多運(yùn)行時(shí)服務(wù)網(wǎng)格之生產(chǎn)環(huán)境部署

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十四)——開發(fā)環(huán)境容器調(diào)試小技巧

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十五)——集中式接口文檔實(shí)現(xiàn)

通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十六)——dapr+sentinel中間件實(shí)現(xiàn)服務(wù)保護(hù)

附錄:(如果你覺得對(duì)你有用,請(qǐng)給個(gè)star)
一、電商Demo地址:https://github.com/sd797994/Oxygen-Dapr.EshopSample

二、通訊框架地址:https://github.com/sd797994/Oxygen-Dapr

首先我們看看最終效果如何,重新拉取代碼并rebuild之后,登錄admin.dapreshop.com:30882在基礎(chǔ)配置新增了兩個(gè)模塊,其中swagger文檔只是簡(jiǎn)單的對(duì)系列15文章中創(chuàng)建的集中式文檔的簡(jiǎn)易集成。服務(wù)保護(hù)配置就是本次新增的部分了,其界面如下:

?

?  當(dāng)我們需要保護(hù)某個(gè)接口時(shí),點(diǎn)擊新增限流規(guī)則,并通過下拉選擇我們的服務(wù)+路徑即可配置一個(gè)規(guī)則,點(diǎn)擊保存并重啟網(wǎng)關(guān)會(huì)自動(dòng)調(diào)用k8s進(jìn)行component的重載并重啟apigateway。

?

?  在稍微等待20秒左右網(wǎng)關(guān)重啟后(亦可通過使用kubectl get po -n dapreshop | findstr apigateway觀察網(wǎng)關(guān)重啟)即可通過并發(fā)測(cè)試來看看其效果??梢钥吹秸_的對(duì)我們的接口產(chǎn)生了保護(hù),也就是10秒內(nèi)產(chǎn)生了100次左右的有效訪問,剩余的訪問被攔截并返回了429請(qǐng)求過多。

?

?  在dapr的middleware-sentinel文檔中可以看到還支持熔斷降級(jí)、并發(fā)隔離、熱點(diǎn)參數(shù)等等規(guī)則,不過目前測(cè)試過發(fā)現(xiàn)僅有服務(wù)限流規(guī)則拒絕類型的限流對(duì)dapr有效,其他規(guī)則暫時(shí)沒有效果,不知道是不是dapr1.2的bug還是什么情況,已經(jīng)github提了issuesl...

  下面簡(jiǎn)單講講如何實(shí)現(xiàn)熱更新的。首先我們需要在apigateway注入一個(gè)空的sentinel config component:

apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: sentinelnamespace: dapreshop spec:type: middleware.http.sentinelversion: v1metadata:- name: appNamevalue: "rules"- name: logDirvalue: "/tmp"- name: flowRulesvalue: >-[]- name: circuitbreakerRulesvalue: >-[]

  接著我在publicservice實(shí)現(xiàn)了熱更新相關(guān)代碼,具體代碼在PublicService\Infrastructure\Common\AliSentinel中。通過引入了KubernetesClient的方式通過sdk操作component的讀寫以及deployment的更新。核心代碼如下:

static Kubernetes kubernetes = new Kubernetes(KubernetesClientConfiguration.BuildConfigFromConfigFile(SentinelComponentBaseConfig.kubeconfig));/// <summary>/// 注冊(cè)規(guī)則/// </summary>/// <param name="aliSentinelConfig"></param>public static async Task RegisterSentinelConfig(SentinelConfigList aliSentinelConfigList){await GetAndSaveSentinelComponent(component =>{component.FlowRules = aliSentinelConfigList.FlowRules.GetDistinct();component.BreakingRules = aliSentinelConfigList.BreakingRules.GetDistinct();});}/// <summary>/// 獲取所有注冊(cè)規(guī)則/// </summary>/// <returns></returns>public static async Task<SentinelConfigList> GetAll(){var component = await GetDefaultSentinelComponent();return new SentinelConfigList(){FlowRules = component.FlowRules,BreakingRules = component.BreakingRules};}#region 本地方法/// <summary>/// 獲取默認(rèn)的SentinelComponent/// </summary>/// <returns></returns>static async Task<SentinelComponent> GetDefaultSentinelComponent(){var component = new SentinelComponent();await component.Create(kubernetes);return component;}/// <summary>/// 傳遞委托變更默認(rèn)SentinelComponent/// </summary>/// <param name="operatorComponent"></param>static async Task GetAndSaveSentinelComponent(Action<SentinelComponent> operatorComponent){var component = await GetDefaultSentinelComponent();operatorComponent(component);component.SetMetaData();Patch(component);ReloadDeploy();}/// <summary>/// Patch SentinelComponent到k8s環(huán)境/// </summary>/// <param name="component"></param>static void Patch(SentinelComponent component){var patch = new JsonPatchDocument<SentinelComponent>();patch.Replace(x => x.spec.metadata, component.spec.metadata);kubernetes.PatchNamespacedCustomObject(new V1Patch(patch, V1Patch.PatchType.JsonPatch), SentinelComponentBaseConfig.Group, SentinelComponentBaseConfig.Version, SentinelComponentBaseConfig.NamespaceParameter, SentinelComponentBaseConfig.Plural, SentinelComponentBaseConfig.ComponentName);}/// <summary>/// 重啟相關(guān)deploy更新SentinelComponent/// </summary>static void ReloadDeploy(){var deploy = kubernetes.ReadNamespacedDeployment(SentinelComponentBaseConfig.DeploymentName, SentinelComponentBaseConfig.NamespaceParameter);deploy.Spec.Template.Metadata.Annotations[SentinelComponentBaseConfig.restart] = DateTime.UtcNow.ToString("s");var patch = new JsonPatchDocument<V1Deployment>();patch.Replace(e => e.Spec.Template.Metadata.Annotations, deploy.Spec.Template.Metadata.Annotations);kubernetes.PatchNamespacedDeployment(new V1Patch(patch, V1Patch.PatchType.JsonPatch), SentinelComponentBaseConfig.DeploymentName, SentinelComponentBaseConfig.NamespaceParameter);}

  接著我們?cè)赼pplication暴露兩個(gè)接口用于get component和save component。在頁(yè)面上接入相關(guān)接口后即可正確的讀取和寫入component并滾動(dòng)更新相關(guān)k8s資源從而實(shí)現(xiàn)熱更新。整個(gè)限流流程大致如下:

?

?  好了,今天的分享就到這里,照例歡迎fork+star~

相關(guān)文章:

  • Dapr能否引領(lǐng)云原生中間件的未來?

  • 云原生 | 阿里巴巴的Dapr實(shí)踐與探索

  • Dapr | 云原生的抽象與實(shí)現(xiàn)

  • Dapr 可視化指南

  • Dapr 知多少 | 分布式應(yīng)用運(yùn)行時(shí)

  • Dapr 正式發(fā)布 1.0

  • Dapr 交通流量控制示例

  • Dapr是如何簡(jiǎn)化微服務(wù)的開發(fā)和部署

  • 微軟開源微服務(wù)運(yùn)行時(shí)Dapr,賦能云原生應(yīng)用開發(fā)

  • YARP實(shí)現(xiàn)Dapr服務(wù)調(diào)用的反向代理

  • Dapr微服務(wù)應(yīng)用開發(fā)系列0:概述

  • Dapr微服務(wù)應(yīng)用開發(fā)系列1:環(huán)境配置

  • Dapr微服務(wù)應(yīng)用開發(fā)系列2:Hello World與SDK初接觸

  • Dapr微服務(wù)應(yīng)用開發(fā)系列3:服務(wù)調(diào)用構(gòu)件塊

  • Dapr微服務(wù)應(yīng)用開發(fā)系列4:狀態(tài)管理構(gòu)件塊

  • Dapr微服務(wù)應(yīng)用開發(fā)系列5:發(fā)布訂閱構(gòu)建塊

  • Windows環(huán)境下Dapr入門

  • 云原生 | .NET 5 with Dapr 初體驗(yàn)

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(二)——通訊框架講解

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(三)——一步一步教你如何擼Dapr

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(四)——一步一步教你如何擼Dapr之訂閱發(fā)布

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(五)——一步一步教你如何擼Dapr之狀態(tài)管理

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(六)——一步一步教你如何擼Dapr之Actor服務(wù)

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(七)——一步一步教你如何擼Dapr之服務(wù)限流

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(八)——一步一步教你如何擼Dapr之鏈路追蹤

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(九)——一步一步教你如何擼Dapr之OAuth2授權(quán)

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(九)——一步一步教你如何擼Dapr之OAuth2授權(quán)-百度版

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十)——一步一步教你如何擼Dapr之綁定

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十一)——一步一步教你如何擼Dapr之自動(dòng)擴(kuò)/縮容

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十二)——istio+dapr構(gòu)建多運(yùn)行時(shí)服務(wù)網(wǎng)格

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十三)——istio+dapr構(gòu)建多運(yùn)行時(shí)服務(wù)網(wǎng)格之生產(chǎn)環(huán)境部署

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十四)——開發(fā)環(huán)境容器調(diào)試小技巧

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十五)——集中式接口文檔實(shí)現(xiàn)

  • 通過Dapr實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于.net的微服務(wù)電商系統(tǒng)(十六)——dapr+sentinel中間件實(shí)現(xiàn)服務(wù)保護(hù)

  • WebAssembly + Dapr = 下一代云原生運(yùn)行時(shí)?

  • dapr 應(yīng)用開發(fā) | 環(huán)境配置

  • 乘風(fēng)破浪,.Net Core遇見Dapr,為云原生而生的分布式應(yīng)用運(yùn)行時(shí)

  • Dapr案例之高德 Serverless 平臺(tái)建設(shè)及實(shí)踐

  • 在非容器(集群)環(huán)境下運(yùn)行dapr

  • 構(gòu)建屬于你自己的dapr服務(wù)發(fā)現(xiàn)

  • 構(gòu)建屬于你自己的dapr綁定組件

總結(jié)

以上是生活随笔為你收集整理的通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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