tnblog
首页
视频
资源
登录

Dapr .NetCore 并发限流

7476人阅读 2021/12/26 17:12 总访问:3467204 评论:0 收藏:2 手机
分类: .net后台框架

Dapr .NetCore 并发限流

限流控制


使用限制dapr中间件来限制每秒请求数(当dapr请求dapr的时候我们进行限流),大致如下图所示:

创建限流组件


~/.dapr/components/下创建限流中间件,文件名为bf.yaml

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: ratelimit
  5. spec:
  6. type: middleware.http.ratelimit
  7. version: v1
  8. metadata:
  9. - name: maxRequestsPerSecond
  10. value: 1


maxRequestsPerSecond设置为1,表示同一时间内最多允许一个请求处理

添加相关dapr配置


~/.dapr/config.yaml进行添加中间件配置

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Configuration
  3. metadata:
  4. name: daprConfig
  5. spec:
  6. tracing:
  7. samplingRate: "1"
  8. zipkin:
  9. endpointAddress: http://localhost:9411/api/v2/spans
  10. httpPipeline:
  11. handlers:
  12. - name: ratelimit
  13. type: middleware.http.ratelimit

注意我这里修改在之后运行的项目将全部都受到影响,建议自行定义一个config yaml并在运行时单独运用。

客户端代码定义


对myserver appid进行请求/Request/v3方法。

  1. [HttpGet("sendv3")]
  2. public async Task<string> Sendv3()
  3. {
  4. _logger.LogInformation($"进来了");
  5. var idnumber = new Random().Next(0,99);
  6. var mydata = new MyClass(idnumber,$"MyClass{idnumber}");
  7. var client = DaprClient.CreateInvokeHttpClient(appId: "myserver");
  8. // http的方式
  9. var response = await client.PostAsJsonAsync("/Request/v3", mydata);
  10. if (response.IsSuccessStatusCode)
  11. {
  12. var newdata = await response.Content.ReadFromJsonAsync<MyClass>();
  13. _logger.LogInformation($"得到服务器端处理的新数据:{newdata.Id} {newdata.Name}");
  14. return JsonConvert.SerializeObject(newdata);
  15. }else{
  16. return "bad";
  17. }
  18. }
  19. public class MyClass
  20. {
  21. public MyClass(){}
  22. public MyClass(int id,string name)
  23. {
  24. Id = id;
  25. Name = name;
  26. }
  27. public int Id { get; set; }
  28. public string Name { get; set; }
  29. }

服务器端定义


我们让其等待三秒

  1. [HttpPost("v3")]
  2. public MyClass Getv3(MyClass myClass)
  3. {
  4. Thread.Sleep(3000);
  5. _logger.LogInformation($"{DateTime.Now} {myClass.Id} {myClass.Name} finish!");
  6. myClass.Name = myClass.Name + " ---- Finish";
  7. return myClass;
  8. }

运行测试

  1. dapr run --app-id myserver --app-port 5002 --dapr-http-port 3501 -- dotnet InvokeMethodServer.dll --urls="http://*:5002"
  2. dapr run --app-id dotnetapp --app-port 5001 --dapr-http-port 3500 -- dotnet InvokeMethod.dll --urls="http://*:5001"


我们通过Jmeter进行10个并发请求进行测试


我们并发请求了10个但是只处理了一个,其他的都失败了。并且吞吐量控制在了3.1/sec

可能会有一些同志感到又些疑惑,既然是全局限流,为啥子客户端不受影响。因为我们请求的客户端方法不是通过dapr的中间件去请求的,所以自然也不会受影响。
(接下来dapr还提供一种并发控制)

并发控制


dapr另一种控制是:dapr边车访问应用时进行限制。参考下图所示


我们先去掉中间件处理。然后运行服务器端时添加上app-max-concurrency参数,用于设置最大并发处理的数量。

  1. dapr run --app-max-concurrency 1 --app-id myserver --app-port 5002 --dapr-http-port 3501 -- dotnet InvokeMethodServer.dll --urls="http://*:5002"


在k8s中可以这样添加上这个字段

  1. dapr.io/app-max-concurrency: "1"

自行尝试吧


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

net core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core中使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术