SpringCloud微服务网关限流方式
1.限流的两种实现方式
nginx限流
在nginx中,通过限流可以规定一个一个地址映射每一秒可以被访问多少次,甚至是限制每一个用户(这里的用户指的是访问改地址映射的用户的IP)在规定的时间内可以访问的次数,防止用户多次操作或者是恶意请求攻击服务。
网关限流
网关可以提供用户统一的访问入口,在Nginx限流过后,依然会有很大一波流量会承载的网关上,那这个时候的限流是针对于网关甚至是针对于网关所挂在的微服务,我们需要限定用户在只能针对某个微服务在特定的时间段内只能访问多少次,如果不加限制的会,可能会因为并发量的过大导致服务宕机,甚至引起雪崩效应。
2.架构图
3.为什么需要两个限流
原因有以下几点:
- 1.Nginx限流过后流量仍然很大:为nginx限流只是针对于用户访问的一个入口,这个入口直接开放给网关,这个时候你不清楚用户真正的访问意图,如果在这里的限制力度过大,导致用户能请求的次数过少,就会导致页面加载缓慢的问题,毕竟有时候一个页面的请求甚至会超过100个(例如淘宝网等)
- 2.无法做到针对单个服务的限流:如果你Nginx开放了一秒一个用户200r/s的请求,如果有人恶意的将所有的请求对准你的一个服务的一个借口,很可能导致服务宕机,所以需要网关这层针对每个服务进行限流。
- 3.无法实现一些自定义的限流模型:单独的Nginx限流过于单一,无法满足特定的业务需求。
4.如何实现限流
具体的实现方式是令牌桶算法,就是某一时刻一个IP最多只能访问有效的次数。
创建令牌桶的实现
这里需要将其配置为bean,而且需要传入一个唯一标识作为令牌,这里的令牌最好是访问你的服务的IP,这样就可以做到限制。
@Bean(name = "ipKeyResolver") public KeyResolver userKeyResolver(){ return new KeyResolver() { @Override public Mono<String> resolve(ServerWebExchange exchange) { String ip = exchange.getRequest().getRemoteAddress().getHostString(); System.out.println("你的IP地址是"+ip); return Mono.just(ip); } }; }
配置
这里是需要配置redis的,因为这个令牌桶是基于redis实现的。
spring: application: name: gateway-admin cloud: gateway: globalcors: cors-configurations: '[/**]': allowedOrigins: "*" allowedMethods: - GET - POST - PUT - DELETE routes: - id: file #uri: http://localhost:8001 uri: lb://file filters: - StripPrefix=1 #固定配置 - name: RequestRateLimiter args: #上面配置的令牌桶的实现的bean的名称 key-resolver: "#{@ipKeyResolver}" #可以允许的一秒中的访问次数 redis-rate-limiter.replenishRate: 1 redis-rate-limiter.burstcapacity: 1 predicates: - Path=/brand/** redis: host: redis的ip地址 port: 6379
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
@Scheduled定时器原理及@RefreshScope相互影响
这篇文章主要为大家介绍了@Scheduled定时器原理及@RefreshScope相互影响详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07SpringCloudAlibaba极简入门整合Grpc代替OpenFeign的详细过程
本文介绍了如何将OpenFeign替换为Grpc进行服务通信,并通过实际案例展示了如何在Spring Boot项目中整合Grpc,Grpc提供了高性能、低延迟的服务间通信,而OpenFeign则注重简化开发流程,感兴趣的朋友跟随小编一起看看吧2024-11-11SpringBoot 项目使用hutool 工具进行 http 接口调用的处理方
在实际的开发过程中一个互联网的项目来说 ,有可能会涉及到调用外部接口的实际业务场景,下面通过本文给大家介绍SpringBoot 项目 使用hutool 工具进行 http 接口调用的处理方法,需要的朋友可以参考下2022-06-06
最新评论