Envoy实现.NET架构的网关(五)集成Redis实现限流
什么是限流
限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。而Envoy可以通过envoy.filters.http.ratelimit插件实现限流。
限流服务
Envoy实现限流需要依赖限速服务,Envoy官方为我们提供了基于Redis和Memcached的限速服务
https://github.com/envoyproxy/ratelimit
我们将其从github下载到本地,来看看其中的docker-compose.yaml的工作模式,我们注意到其中的example文件挂载目录
并且其中还制定了配置目录是example/ratelimit
我们来看看config.yaml和example.yaml的内容,发现其中定义了domain和描述符
所以根据文档的提示,我们在envoy配置中应该命中这些描述符才有效,下面我们通过docker-compose up启动ratelimit服务,启动之前我们需要调整docker-compose.yaml,需要将go mod代理指向国内的代理
启动ratelimit服务
配置Envoy
配置envoy之前我们需要注意一下几点
- 需要用到envoy.filters.http.ratelimit过滤器
- 指定其domain为example.yaml中对应的rl
- 需要为其指定ratelimit服务的cluste
- 需要为route配置限速规则
具体配置如下
- admin:
- address:
- socket_address:
- protocol: TCP
- address: 0.0.0.0
- port_value: 9902
- static_resources:
- listeners:
- - name: listener_0
- address:
- socket_address:
- protocol: TCP
- address: 0.0.0.0
- port_value: 10000
- filter_chains:
- - filters:
- - name: envoy.filters.network.http_connection_manager
- typed_config:
- "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
- codec_type: AUTO
- stat_prefix: ingress
- http_filters:
- - name: envoy.filters.http.ratelimit
- typed_config:
- "@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
- domain: rl
- request_type: both
- stage: 0
- rate_limited_as_resource_exhausted: true
- failure_mode_deny: false
- enable_x_ratelimit_headers: DRAFT_VERSION_03
- rate_limit_service:
- grpc_service:
- envoy_grpc:
- cluster_name: ratelimit
- transport_api_version: V3
- - name: envoy.filters.http.router
- typed_config: {}
- route_config:
- name: route
- virtual_hosts:
- - name: local_service
- domains: ["*"]
- routes:
- - match:
- prefix: "/"
- route:
- cluster: service_envoyproxy_io
- rate_limits:
- - actions:
- - request_headers:
- header_name: "foo"
- descriptor_key: "foo"
- clusters:
- - name: ratelimit
- type: STRICT_DNS
- connect_timeout: 1s
- lb_policy: ROUND_ROBIN
- protocol_selection: USE_CONFIGURED_PROTOCOL
- http2_protocol_options: {}
- load_assignment:
- cluster_name: ratelimit
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: 192.168.43.94
- port_value: 8081
- - name: service_envoyproxy_io
- connect_timeout: 30s
- type: strict_dns
- # Comment out the following line to test on v6 networks
- # dns_lookup_family: V4_ONLY
- lb_policy: ROUND_ROBIN
- load_assignment:
- cluster_name: service_envoyproxy_io
- endpoints:
- - lb_endpoints:
- - endpoint:
- address:
- socket_address:
- address: 192.168.43.94
- port_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超限请求
我们看看example/ratelimit/config/example.yaml,可以看到每分钟只允许2次请求,至此限速验证完成!!
Envoy实现.NET架构的网关(五)集成Redis实现限流的更多相关文章
- 微服务架构 | 5.2 基于 Sentinel 的服务限流及熔断
目录 前言 1. Sentinel 基础知识 1.1 Sentinel 的特性 1.2 Sentinel 的组成 1.3 Sentinel 控制台上的 9 个功能 1.4 Sentinel 工作原理 ...
- .Netcore 2.0 Ocelot Api网关教程(7)- 限流
本文介绍Ocelot中的限流,限流允许Api网关控制一段时间内特定api的总访问次数.限流的使用非常简单,只需要添加配置即可. 1.添加限流 修改 configuration.json 配置文件,对 ...
- Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证
什么是OAuth2认证 简单说,OAuth 就是一种授权机制.数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使 ...
- 通过Envoy实现.NET架构的网关
什么是Gateway 在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题 如果没有 API 网关模式,客户端应用将与内部微服务相耦合. 在客户端应用中,单个页面/屏 ...
- Envoy实现.NET架构的网关(二)基于控制平面的动态配置
什么是控制平面 上一篇我们讲了文件系统的动态配置,这次我们来看看通过Control Panel来配置Envoy.控制平面就是一个提供Envoy配置信息的单独服务,我们可以通过这个服务来修改Envoy的 ...
- Envoy实现.NET架构的网关(三)代理GRPC
什么是GRPC gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架.gRPC 的主要好处是: 现代.高性能.轻量级的 RPC 框架. 契约优先的 API 开发,默认使用协议缓冲区,与语言无 ...
- 使用springcloud gateway搭建网关(分流,限流,熔断)
Spring Cloud Gateway Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 ...
- 限流10万QPS、跨域、过滤器、令牌桶算法-网关Gateway内容都在这儿
一.微服务网关Spring Cloud Gateway 1.1 导引 文中内容包含:微服务网关限流10万QPS.跨域.过滤器.令牌桶算法. 在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuu ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们 ...
随机推荐
- 自己实现Controller——标准型
标准Controller 上一篇通过一个简单的例子,编写了一个controller-manager,以及一个极简单的controller.从而对controller的开发有个最基本的认识,但是细心观察 ...
- js设计模式之发布订阅模式
1. 定义 发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知. 订阅者(Subscriber)把自己想订阅的事件注册(Subscri ...
- requests接口测试-requests的安装
requests接口测试-requests的安装 安装常见问题 提示连接不上,443问题 一般是因为浏览器设置了代理,关闭代理. 网络加载慢,设置国内镜像地址 1.pip安装 2.pycharm安装 ...
- 【转载】在Windows终端中显示UTF-8字符
一直苦恼于如何在Windows终端中显示UTF-8字符的问题.比如,在MySQL命令行下,如果数据库的编码是UTF-8,那么,在查询数据库的时候,里面的中文都会变成乱码.今天半无意的搜索了一下,结果发 ...
- 在自己的项目中使用PCL
在自己的项目中使用PCL项目设置:1.创建cpp文件,如pcd_write.cpp,文件内容如下例: #include <iostream>#include <pcl/io/pcd_ ...
- Abp vNext 番外篇-疑难杂症丨浅谈扩展属性与多用户设计
说明 Abp vNext基础篇的文章还差一个单元测试模块就基本上完成了我争取10.1放假之前给大家赶稿出来,后面我们会开始进阶篇,开始拆一些东西,具体要做的事我会单独开一个文章来讲 缘起 本篇文章缘起 ...
- FastAPI(39)- 使用 CORS 解决跨域问题
同源策略 https://www.cnblogs.com/poloyy/p/15345184.html CORS https://www.cnblogs.com/poloyy/p/15345871.h ...
- ServerManager.exe 0xc0000135 应用程序错误(Windows Server 2016、2019)
前言 将 Windows Server 2019或2016 .NET Framework移除. IIS卸载后,服务器管理器.控制面板部分功能.事件查看器等都无法正常开启. 解决办法 打开CMD,输入D ...
- 10.3 Nginx
Nginx介绍 engine X,2002年开发,分为社区版和商业版(nginx plus) 2019年 f5 Networks 6.7亿美元收购nginx Nginx 免费 开源 高性能 http ...
- 如何基于Jupyter notebook搭建Spark集群开发环境
摘要:本文介绍如何基于Jupyter notebook搭建Spark集群开发环境. 本文分享自华为云社区<基于Jupyter Notebook 搭建Spark集群开发环境>,作者:apr鹏 ...