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

歡迎訪問 生活随笔!

生活随笔

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

windows

通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流...

發(fā)布時間:2023/12/4 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  在一般的互聯(lián)網(wǎng)應(yīng)用中限流是一個比較常見的場景,也有很多常見的方式可以實現(xiàn)對應(yīng)用的限流比如通過令牌桶通過滑動窗口等等方式都可以實現(xiàn),也可以在整個請求流程中進(jìn)行限流比如客戶端限流就是在客戶端通過隨機數(shù)直接返回成功失敗來決定是否發(fā)起請求。也可以在網(wǎng)關(guān)層直接根據(jù)一定策略丟棄一部分流量達(dá)到限流的目的,亦可請求到業(yè)務(wù)端后由業(yè)務(wù)端判斷是否進(jìn)行限流。而一般的service mesh框架會在代理的sidecar部分完成限流的工作。今天就講講dapr是如何通過簡易的配置來實現(xiàn)一個限流的。

目錄:

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

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

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

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

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

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

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

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

  Dapr限流包含兩種模式,一種是客戶端限流,一種是服務(wù)端限流。

  客戶端限流簡單來講就是對下游服務(wù)的一種限流保護(hù),舉個例子比如我的網(wǎng)關(guān)要保護(hù)后面的所有服務(wù),我可以配置一個ratelimit的component下游限流注入到網(wǎng)關(guān)的sidecar中,Dapr會為流經(jīng)該網(wǎng)關(guān)實例的流量的下游服務(wù)根據(jù)遠(yuǎn)程IP和路徑進(jìn)行限流,確保單位時間內(nèi)最大請求數(shù)被限制在規(guī)定范圍之內(nèi)。

?  下面我們就來模擬這種限流模式,首先我們創(chuàng)建一個類型為middleware.http.ratelimit的Component,其metadata可以設(shè)置一個maxRequestsPerSecond參數(shù),代表每秒流經(jīng)該sidecar的請求最大能通過多少前往下游服務(wù)。如果超出這個請求,則sidecar會直接返回一個429響應(yīng)碼提示客戶端請求過多

apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: ratelimit spec:type: middleware.http.ratelimitversion: v1metadata:- name: maxRequestsPerSecondvalue: 1

  接著我們配置一個Configuration并注入到clientsample的deployment中(注意紅字部分)

apiVersion: dapr.io/v1alpha1 kind: Configuration metadata:name: appconfig spec:httpPipeline:handlers:- name: ratelimittype: middleware.http.ratelimitapiVersion: apps/v1 kind: Deployment metadata:name: clientsamplelabels:app: clientsample spec: replicas: 1selector:matchLabels:app: clientsampletemplate: metadata:labels: app: clientsampleannotations:dapr.io/enabled: "true"dapr.io/app-id: "clientsample"dapr.io/app-port: "80"dapr.io/config: "appconfig"spec:containers:- name: webimage: clientsample:releaseimagePullPolicy: Neverports:- containerPort: 80

  現(xiàn)在我們在代碼中,讓clientsample通過多現(xiàn)成同時發(fā)起10個下游請求

public async Task<dynamic> Call(){var result1 = new OutDto();var remoteService = serviceProxyFactory.CreateProxy<IHelloService>();var tasks = new Task<OutDto>[10];for (int i = 0; i < 10; i++){tasks[i] = remoteService.HelloWorldByName(new InputDto() { Name = "xiaoming" });}await Task.WhenAll(tasks);foreach (var item in tasks){Console.WriteLine($"result is :{(item.GetAwaiter().GetResult().Word ?? "noresult")}");}return "操作完成";}

  可以看到并發(fā)訪問10條task,只有1條返回了result,其余的請求發(fā)送到自己的sidecar后就直接返回429然后被通訊框架捕獲429后拋到日志中。

  接下來我們看看服務(wù)端模式,服務(wù)端模式顧名思義就是保護(hù)自己,確保所有流向自己的請求會以一個限定頻率被處理,有點類似于C#的semaphore,通過信號量來阻塞線程并發(fā)訪問數(shù)。注意該模式并不是通過限制每秒流量來實現(xiàn)的,而是指同時只能有多個請求被處理。

  接著我們看看yaml需要調(diào)整的部分,通過dapr.io/app-max-concurrency參數(shù)即可實現(xiàn)并發(fā)數(shù)控制

apiVersion: apps/v1 kind: Deployment metadata:name: servicesamplelabels:app: servicesample spec: replicas: 1selector:matchLabels:app: servicesampletemplate: metadata:labels: app: servicesampleannotations:dapr.io/enabled: "true"dapr.io/app-id: "servicesample"dapr.io/app-port: "80"dapr.io/app-max-concurrency: "1"spec:containers:- name: webimage: servicesample:releaseimagePullPolicy: Neverports:- containerPort: 80

  clientsample不用修改,我們在servicesample的方法中增加以下模擬耗時操作

  重新生成后(注意需要刪除之前配置在clientsample上的dapr.io/config),我們通過postman模擬發(fā)起請求:

  可以看到請求全部都執(zhí)行成功并獲取回調(diào)了,但是整個請求耗時是10秒,恰好就是一次處理1個請求,單個請求耗時1秒得到的結(jié)果,我們可以再次驗證一下將app-max-concurrency設(shè)置為2,應(yīng)該會5秒請求完畢:

  可以看到信號量每次放入了兩個線程同步處理,我們的請求確實被壓縮到了5秒處理完畢。

  整個限流其實分為下游限流+并發(fā)控制兩種方式,其實都是為了保護(hù)自己/下游服務(wù)。另外大家注意一下如果你的請求并不是通過sidecar進(jìn)入到服務(wù)的比如直接暴露服務(wù)端口到network或通過ingress+service的方式訪問應(yīng)用也就是說流量不走sidecar,則無法通過dapr進(jìn)行限流!關(guān)于限流今天就到這,下次分享一下如何做鏈路監(jiān)控~

相關(guān)文章:

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

  • 云原生 | 阿里巴巴的Dapr實踐與探索

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

  • Dapr 可視化指南

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

  • Dapr 正式發(fā)布 1.0

  • Dapr 交通流量控制示例

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

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

  • YARP實現(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 初體驗

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

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

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

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

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

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

總結(jié)

以上是生活随笔為你收集整理的通过Dapr实现一个简单的基于.net的微服务电商系统(七)——一步一步教你如何撸Dapr之服务限流...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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