Envoy实现.NET架构的网关(五)集成Redis实现限流
.NET网关与Gateway实战-Envoy与kong课程
什么是限流
限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮。而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: 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超限请求
我们看看example/ratelimit/config/example.yaml,可以看到每分钟只允许2次请求,至此限速验证完成!!
系列文章:
Envoy实现.NET架构的网关(一)静态配置与文件动态配置
Envoy实现.NET架构的网关(三)代理GRPC
Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证
Envoy实现.NET架构的网关(五)集成Redis实现限流相关推荐
- Envoy实现.NET架构的网关(三)代理GRPC
.NET网关与Gateway实战-Envoy与kong课程 Envoy实现.NET架构的网关(一)静态配置与文件动态配置 Envoy实现.NET架构的网关(二)基于控制平面的动态配置 什么是GRPC ...
- Spring boot(web 组件,ORM 操作 MySQL,接口架构风格—RESTful,集成 Redis,集成 Dubbo,打包)
文章目录 1.3 第三章 Spring Boot 和 web 组件 1.3.1 SpringBoot 中拦截器 1.3.2 Spring Boot 中使用 Servlet 1.3.3 Spring B ...
- c++突破网关屏蔽_通过API网关实现微服务管控-限流,熔断和降级
今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容.在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断.包括也不断地在谈去中心化架构 ...
- .Netcore 2.0 Ocelot Api网关教程(7)- 限流
本文介绍Ocelot中的限流,限流允许Api网关控制一段时间内特定api的总访问次数. 限流的使用非常简单,只需要添加配置即可. 1.添加限流 修改 configuration.json 配置文件,对 ...
- Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证
.NET网关与Gateway实战-Envoy与kong课程 什么是OAuth2认证 简单说,OAuth 就是一种授权机制.数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一 ...
- Envoy实现.NET架构的网关(一)静态配置与文件动态配置
什么是Gateway 在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题 如果没有 API 网关模式,客户端应用将与内部微服务相耦合. 在客户端应用中,单个页面/屏 ...
- sentinel接入网关应用_微服务初体验(三):集成Gateway网关和Sentinel限流
前言 最近笔者在对微服务架构进行学习,参考了各种项目的技术文章.框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手.其中Nacos作为服务的注 ...
- 限流与代理网关集成调研及应用
目录 一.限流相关问题概述 为什么使用限流? 限流场景: 限流的处理方式: 限流架构 限流算法 固定窗口算法 滑动窗口算法 漏桶算法 令牌桶算法 限流开源项目 Guava 的 RateLimiter ...
- 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流
上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...
最新文章
- Python+selenium 自动化-mac下安装配置chrome驱动方法
- C语言面向对象编程(三):虚函数与多态
- Linux按照时间顺序列出文件
- 巨星陨落,一个月内已有6位
- linux网站渗透工具包,ubuntu下安装 kali linux 渗透工具包
- Scrapy框架学习(1)
- 6英寸全面屏·2000万四镜头 HUAWEI nova 2s正式发布
- 【kafka】Kafka 2.3 空消费组延时rebalance
- 【论文写作】毕业论文该如何选择自己的导师?
- 如何从小白进化成 Apache Flink 技术专家?9节基础课程免费公开!
- Android Key Hash的生成
- 初识Espresso
- 分享一个吐血三升的GNS3 ASAv9.X直连ping不通的原因
- Unexpected token o in JSON at position 1报错
- 【深度长文】老IT公司怎么做到像创业公司一样快
- 灾难恢复_有效的灾难恢复计划的10个技巧
- 【Axure交互教程】图表载入效果(柱状图/折线图/饼图)
- SpringBoot_Web开发基础内容
- 优达(Udacity)_outlier_mini_project
- ppt提示内存或系统资源不足_Mac 电脑提示内存不足,一键轻松搞定
热门文章
- jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
- 关于最近打的几题斜率优化的总结。加几AC代码。
- 性能测试一些相关的概念
- 关于vue执行打包后,如何在本地浏览问题
- 正则表达式(括号)、[中括号]、{大括号}的区别
- 三:Java之Applet
- 火狐标签在中间_在Firefox中保留未使用的标签
- dvd刻录软件_如何在Windows 7中刻录照片和视频DVD(无需额外的软件)
- ad中电源插座怎么封装_您可以在房屋中安装的各种电源插座
- mysql两种引擎的适用场景_MySQL两种引擎的区别和应用场景