Envoy实现.NET架构的网关(五)集成Redis实现限流

.NET网关与Gateway实战-Envoy与kong课程

9b361e88071fa241eede56e341f5f063.png

什么是限流

限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。而Envoy可以通过envoy.filters.http.ratelimit插件实现限流。

限流服务

Envoy实现限流需要依赖限速服务,Envoy官方为我们提供了基于Redis和Memcached的限速服务 https://github.com/envoyproxy/ratelimit

7a661e6b1e6f77d9b50f397f21b3aed5.png

 我们将其从github下载到本地,来看看其中的docker-compose.yaml的工作模式,我们注意到其中的example文件挂载目录

c85af60e5c0b1511c0da897ed450955a.png

 并且其中还制定了配置目录是example/ratelimit

d6ba122b586480ad73a952d56d0bf0d0.png

 我们来看看config.yaml和example.yaml的内容,发现其中定义了domain和描述符

765d7356b01f42ba05eb12ded9bb9131.png

 所以根据文档的提示,我们在envoy配置中应该命中这些描述符才有效,下面我们通过docker-compose up启动ratelimit服务,启动之前我们需要调整docker-compose.yaml,需要将go mod代理指向国内的代理

6bad4e60e82622f8a4b225b7af712de4.png

 启动ratelimit服务

0a0865dd52288441f7941986c1c57c07.png

配置Envoy

配置envoy之前我们需要注意一下几点

  • 需要用到envoy.filters.http.ratelimit过滤器

  • 指定其domain为example.yaml中对应的rl

  • 需要为其指定ratelimit服务的cluste

  • 需要为route配置限速规则

具体配置如下

admin:address:socket_address:protocol: TCPaddress: 0.0.0.0port_value: 9902
static_resources:listeners:- name: listener_0address:socket_address:protocol: TCPaddress: 0.0.0.0port_value: 10000filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagercodec_type: AUTOstat_prefix: ingresshttp_filters:- name: envoy.filters.http.ratelimittyped_config:"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimitdomain: rlrequest_type: bothstage: 0rate_limited_as_resource_exhausted: truefailure_mode_deny: falseenable_x_ratelimit_headers: DRAFT_VERSION_03rate_limit_service:grpc_service:envoy_grpc:cluster_name: ratelimittransport_api_version: V3- name: envoy.filters.http.routertyped_config: {}route_config:name: routevirtual_hosts:- name: local_servicedomains: ["*"]routes:- match:prefix: "/"route:cluster: service_envoyproxy_iorate_limits:- actions:- request_headers:header_name: "foo"descriptor_key: "foo"clusters:- name: ratelimittype: STRICT_DNSconnect_timeout: 1slb_policy: ROUND_ROBINprotocol_selection: USE_CONFIGURED_PROTOCOLhttp2_protocol_options: {}load_assignment:cluster_name: ratelimitendpoints:- lb_endpoints:- endpoint:address:socket_address:address: 192.168.43.94port_value: 8081- name: service_envoyproxy_ioconnect_timeout: 30stype: strict_dns# Comment out the following line to test on v6 networks# dns_lookup_family: V4_ONLYlb_policy: ROUND_ROBINload_assignment:cluster_name: service_envoyproxy_ioendpoints:- lb_endpoints:- endpoint:address:socket_address:address: 192.168.43.94port_value: 5000

启动Envoy

docker run --rm -it -p 9902:9902 -p 10000:10000 -v D:/gateway/envoy/config/static/:/etc/envoy/ -v D:/gateway/envoy/logs:/logs envoyproxy/envoy-dev  -c /etc/envoy/envoy-ratelimit.yaml

测试限速

调用接口http://192.168.43.94:10000/Name,第三次的时候就会触发429超限请求

dcf355660f6e78fa76358629fb210031.png

 我们看看example/ratelimit/config/example.yaml,可以看到每分钟只允许2次请求,至此限速验证完成!!

4f4a5c82bb3aa1a3db9715ce5b84e042.png

系列文章:

  • Envoy实现.NET架构的网关(一)静态配置与文件动态配置

  • Envoy实现.NET架构的网关(三)代理GRPC

  • Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Daynamic 动态添加属性

所谓的Dynamic 动态类型&#xff0c;页面也要是动态的&#xff08;强撸&#xff09; 很简单的 直接上代码&#xff1a; //案例一 DynamicpersonCollection new ObservableCollection(); for (var i 0; i < 10; i) { dynamic p new ExpandoObject(); ((IDictionary<str…

豆瓣9分+纪录片,每一部都美到窒息......

全世界只有3.14 % 的人关注了爆炸吧知识自然类的纪录片一直是BBC的金字招牌&#xff0c;制作精良的纪录片&#xff0c;不仅能让孩子享受视觉的艺术&#xff0c;还能通过独特的视角去解读大自然&#xff0c;真正激发出孩子探索世界的热情。也适合大人影迷们在看了N部电影后视觉疲…

程序怎么跑着 就卡死,句柄泄漏,内存泄漏了

一&#xff1a;背景 1. 讲故事上个月中旬&#xff0c;星球里的一位朋友在微信找我&#xff0c;说他的程序跑着跑着内存会不断的缓慢增长并无法释放&#xff0c;寻求如何解决 &#xff1f;得&#xff0c;看样子星球还得好好弄&#xff01;&#xff01;&#xff01;&#x1f602;…

活久见!一美国大爷发明了永不掉链子的自行车,垂直踩踏即可驱动

全世界只有3.14 % 的人关注了爆炸吧知识©文丨 直观学机械、自行车网最近&#xff0c;一款能永不掉链子的自行车特别火&#xff0c;咱们今天来看看它长什么样。这款自行车据说是由美国洛杉矶的一位老大爷 Rodger Parker 设计的&#xff0c;名叫&#xff1a;NuBike。设计自行…

学习xss的一些记录(一)

最近正在学习关于xss的一些知识&#xff0c;作为一个前端开发者&#xff0c;这个知识也是基础的&#xff0c;以前也没怎么好好学习与总结&#xff0c;深感惭愧&#xff0c;接下来的几天时间好好补习下。 xss是什么 xss的全称是Cross Site Scripting&#xff0c;即跨站脚本。攻击…

使用Hot Chocolate创建ASP.NET Core GraphQL服务

GraphQL介绍GraphQL是一个用于API的查询语言&#xff0c;是一个使用基于类型系统来执行查询的服务端运行时。GraphQL对你的API中的数据提供了一套易于理解的完整描述&#xff0c;使得客户端能够准确地获得它需要的数据&#xff0c;而且没有任何冗余。Hot Chocolate介绍Hot Choc…

MFC中的文件读写技术

计算机室如何管理自身所存放着的大量的信息的呢&#xff1f;windows的磁盘管理程序为我们提供了一套严密而又高效的信息组织形式--硬盘上的信息是以文件的形式被管理的。 面向存储的文件技术 什么是文件&#xff1f;计算机中&#xff0c;一篇文章、一幅图片、一个程序等都是以文…

[转]十五分钟介绍 Redis数据结构

下面是一个对Redis官方文档《A fifteen minute introduction to Redis data types》一文的翻译&#xff0c;如其题目所言&#xff0c;此文目的在于让一个初学者能通过15分钟的简单学习对Redis的数据结构有一个了解。 Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统…

为什么大部分男生比女生高?原因让你意想不到

全世界只有3.14 % 的人关注了爆炸吧知识古往今来&#xff0c;不论东西南北&#xff0c;男女之间的画风都是&#xff1a;这样的▼这样的▼大家可以看出一个早已成为常识的问题&#xff1a;男人普遍比女人要高、要强壮&#xff0c;说白了就是四肢发达。然而&#xff0c;这到底是为…

MyBatis --教程

2019独角兽企业重金招聘Python工程师标准>>> 本文参考如下这篇优秀文章 http://www.yihaomen.com/article/java/302.htm 一、什么是myBatis&#xff1f; myBatis是一个基于java的持久层框架&#xff0c;它支持普通SQL查询、支持存储过程和高级映射。它使用简单的XML…

System.Text.Json 中的 JsonExtensionData

System.Text.Json 中的 JsonExtensionDataIntro最近两天在排查我们 API 的一个问题&#xff0c;查看源码过程中发现 System.Text.Json 里有一个有意思的 JsonExtensionData在反序列化的时候&#xff0c;如果反序列化的 Model 中没有对应的属性信息&#xff0c;这些信息就会丢失…

“中科院博士后当辅警”,网友却吵翻了:家里有矿?

全世界只有3.14 % 的人关注了爆炸吧知识这两天的热搜上有一位小哥哥特别引人关注有人看到了发际线有人看到了书香门第的出身更多人留意到了他的学历和身份香港大学博士、中科院博士后四川公安一名辅警↓↓↓缪元颖&#xff0c;四川省成都市公安局高新区分局的一名辅警&#xff…

马的种类(七)

鄂伦春马<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />鄂伦春马产于大小兴安岭山区。繁殖性能好&#xff0c;在小群自由交配的情况下&#xff0c;有些母马一年产一驹。生长缓慢&#xff0c;6~7岁时才能结束生长发育期。一般在…

OAuth 2.0 的探险之旅

前言OAuth 2.0 全称是 Open Authorization 2.0, 是用于授权(authorization)的行业标准协议。OAuth 2.0 专注于客户端开发人员的简单性&#xff0c;同时为 Web 应用程序、桌面应用程序、移动设备应用等提供了特定的授权流程。它在2012年取代了 OAuth 1.0, 并且 OAuth 2.0 协议不…

SQL 分页查询语句大全即(查找第N到M条记录的方法)

SQL 分页查询语句大全即&#xff08;查找第N到M条记录的方法&#xff09; 第一种方法&#xff0c;我的原创方法 row2 表示分页行数 page1 表示页码 getnumrow*page select * from (select top row * from (select top getnum * from Newslist order by id desc) order by id …

揭开不一样的世界,这5部纪录片绝对不能错过!

纪录片一直都是增长见识又带给你力量的东西&#xff0c;你可能忙于学业、生活、工作而不能行万里路&#xff0c;但至少你还可以看纪录片&#xff0c;从一方屏幕看到整个世界。今天就为大家整理了5部高分纪录片&#xff0c;文末附领取方式&#xff0c;快收下吧~01与摩根弗里曼一…

算术几何平均matlab,算术-几何平均数——高斯的发现

“算术-几何平均数”既不是算术平均数&#xff0c;也不是几何平均数&#xff0c;由素有“数学王子”之称的德国数学家高斯首先发现和研究。算术-几何平均数&#xff0c;当然与“算术平均数”和“几何平均数”这两个概念有很深的关系。我们知道&#xff0c;但凡一个数学概念或定…

.NET Core TLS 协议指定被我钻了空子~~~

【导读】此前&#xff0c;测试小伙伴通过工具扫描&#xff0c;平台TLS SSL协议支持TLS v1.1&#xff0c;这不安全&#xff0c;TLS SSL协议至少是v1.2以上才行&#xff0c;想到我们早已将其协议仅支持v1.3&#xff0c;那应该非我们平台问题。近日&#xff0c;第三方合作伙伴再次…

Android之CheckBox复选框控件使用inelayout.xml Xml代码

linelayout.xml Xml代码<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:layout_width"match_parent" android:layout_height&quo…

frame buffer编程--画点功能和新增字符串代替RGBT

&#xff08;一&#xff09;&#xff1a;写在前面 这一次进行了一个比较大的迭代&#xff0c;在这里我先把相对于上一个版本的改进做一个解释&#xff1a; 1:进一步完善画点&#xff0c;增加了使用字符串代替RGBT值2:实现字符串解析出RGBT值3:增加了画圆的算法4:进一步增强了代…