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,一经查实,立即删除!

相关文章

php写带分页的留言板,php中分页程序之基于留言板详解_PHP教程

文章是重点是讲php中的分页原理,同时我们是利用一个实现来讲解如何在php中实现分页,这个就是基于自己写的留方板程序了,有需要的朋友可以参考一下,很适合于初学者哦。分页的关键问题其实在于Mysql的一个关键字limite这个关键字后边…

使用 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部电影后视觉疲…

Android中常用到的权限

android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问"properties"表在checkin数据库中&#xff0c;改值可以修改上传 android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置 android.permission.ACCESS_FINE_LOC…

英语中十二个月份的由来

最近在学习英文&#xff0c; 先从月份开始喽~~把整理来的12个月份分享一下(*^__^*) 一月January在罗马传说中&#xff0c;有一位名叫雅努斯的守护神&#xff0c;生有先后两副脸&#xff0c;一副回顾过去&#xff0c;一副眺望未来。人们认为选择他的名字作为除旧迎新的第一个月月…

java编写算术平均数,[求助]基础-怎样编一个计算算术平均数的程序(急啊)

[求助]基础-怎样编一个计算算术平均数的程序(急啊)刚刚开始学习JAVA,不好意思明天就要交作业了,还是编不出高手帮忙吧题目:编写一个计算随意多少个数的算术平均数的程序首先要有一个对话框,可以输入你要计算的数字如果输入的是0,则马上计算结果,0不算在内例如:输入的是1,-2,0.则…

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

一&#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;即跨站脚本。攻击…

如何用matlab消除谐波,如何在含有整次谐波和非整次谐波的信号中去除整次谐波?...

陷波器程序如下&#xff0c;麻烦帮忙看看clc;clear all;close all;x 0 : 0.05 : 10;s 210 * exp(-0.25 * x) .* cos(2 * pi * 1.5 * x pi) 110 * exp(0.25 * x) .* cos(2 * pi * 1.0 * x pi/2 );%load data;%scc;Nlength(s); % 信号长度fs1000;…

使用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;这到底是为…

Android之学习安卓每天成长笔记

8月7日 1 、安装了反编译工具 jad net.sf.jadclipse_3.3.0.jar 或者在help install software http://feeling.sourceforge.net/update/ 2 、生成excel 读取Excel里面的数据搞定 这里使用的是jxl.jar 3、 1、 1 2 、1 2 4 、 1 2 4 7 2 、2 4、 2 4 7 4 、4 7、 7 int sum=0,…

ubuntu 没有php.ini,linux – 在Ubuntu中我对php.ini进行了更改,但没有任何反应

嗨,Apache与PHP运行良好,但我在php.ini中所做的任何更改都没有效果,我甚至删除了该文件的所有内容,然后重启Apache,并运行phpinfo(),并且令人惊讶的是一切都继续运行良好.我正在编辑的文件是出现在phpinfo()中的文件,如“已加载的配置文件”. (/etc/php5/apache2/php.ini)附&am…

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;这些信息就会丢失…

双向链表的删除操作

双向链表的删除操作转载于:https://www.cnblogs.com/LoveFishC/archive/2012/12/20/3845821.html

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

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