.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实现限流相关推荐

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

    .NET网关与Gateway实战-Envoy与kong课程 Envoy实现.NET架构的网关(一)静态配置与文件动态配置 Envoy实现.NET架构的网关(二)基于控制平面的动态配置 什么是GRPC ...

  2. 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 ...

  3. c++突破网关屏蔽_通过API网关实现微服务管控-限流,熔断和降级

    今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容.在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断.包括也不断地在谈去中心化架构 ...

  4. .Netcore 2.0 Ocelot Api网关教程(7)- 限流

    本文介绍Ocelot中的限流,限流允许Api网关控制一段时间内特定api的总访问次数. 限流的使用非常简单,只需要添加配置即可. 1.添加限流 修改 configuration.json 配置文件,对 ...

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

    .NET网关与Gateway实战-Envoy与kong课程 什么是OAuth2认证 简单说,OAuth 就是一种授权机制.数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据.系统从而产生一 ...

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

    什么是Gateway 在微服务体系结构中,如果每个微服务通常都会公开一组精细终结点,这种情况可能会有以下问题 如果没有 API 网关模式,客户端应用将与内部微服务相耦合. 在客户端应用中,单个页面/屏 ...

  7. sentinel接入网关应用_微服务初体验(三):集成Gateway网关和Sentinel限流

    前言 最近笔者在对微服务架构进行学习,参考了各种项目的技术文章.框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手.其中Nacos作为服务的注 ...

  8. 限流与代理网关集成调研及应用

    目录 一.限流相关问题概述 为什么使用限流? 限流场景: 限流的处理方式: 限流架构 限流算法 固定窗口算法 滑动窗口算法 漏桶算法 令牌桶算法 限流开源项目 Guava 的 RateLimiter ...

  9. 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

    上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...

最新文章

  1. Python+selenium 自动化-mac下安装配置chrome驱动方法
  2. C语言面向对象编程(三):虚函数与多态
  3. Linux按照时间顺序列出文件
  4. 巨星陨落,一个月内已有6位
  5. linux网站渗透工具包,ubuntu下安装 kali linux 渗透工具包
  6. Scrapy框架学习(1)
  7. 6英寸全面屏·2000万四镜头 HUAWEI nova 2s正式发布
  8. 【kafka】Kafka 2.3 空消费组延时rebalance
  9. 【论文写作】毕业论文该如何选择自己的导师?
  10. 如何从小白进化成 Apache Flink 技术专家?9节基础课程免费公开!
  11. Android Key Hash的生成
  12. 初识Espresso
  13. 分享一个吐血三升的GNS3 ASAv9.X直连ping不通的原因
  14. Unexpected token o in JSON at position 1报错
  15. 【深度长文】老IT公司怎么做到像创业公司一样快
  16. 灾难恢复_有效的灾难恢复计划的10个技巧
  17. 【Axure交互教程】图表载入效果(柱状图/折线图/饼图)
  18. SpringBoot_Web开发基础内容
  19. 优达(Udacity)_outlier_mini_project
  20. ppt提示内存或系统资源不足_Mac 电脑提示内存不足,一键轻松搞定

热门文章

  1. jps、jinfo、jstat、jstack、jmap、jconsole等命令简介
  2. 关于最近打的几题斜率优化的总结。加几AC代码。
  3. 性能测试一些相关的概念
  4. 关于vue执行打包后,如何在本地浏览问题
  5. 正则表达式(括号)、[中括号]、{大括号}的区别
  6. 三:Java之Applet
  7. 火狐标签在中间_在Firefox中保留未使用的标签
  8. dvd刻录软件_如何在Windows 7中刻录照片和视频DVD(无需额外的软件)
  9. ad中电源插座怎么封装_您可以在房屋中安装的各种电源插座
  10. mysql两种引擎的适用场景_MySQL两种引擎的区别和应用场景