微服务网关中的限流的功能(微服务怎么实现限流)

网友投稿 384 2023-01-06


本篇文章给大家谈谈微服务网关中的限流的功能,以及微服务怎么实现限流对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享微服务网关中的限流的功能的知识,其中也会对微服务怎么实现限流进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Spring Cloud Zuul微服务网关的API限流

微服务开发中有时需要对API做限流保护微服务网关中的限流的功能,防止网络攻击,比如做一个短信验证码API,限制客户端微服务网关中的限流的功能的请求速率能在一定程度上抵御短信轰炸攻击,降低损失。

微服务网关是每个请求微服务网关中的限流的功能的必经入口,非常适合做一些API限流、认证之类的操作,这里有一个基于zuul微服务网关的API限流库:

https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit

比如微服务网关中的限流的功能我们要对 user-service 这个服务进行限流,限制每个请求源每分钟最多只能请求10次。

首先在项目中添加 spring-cloud-zuul-ratelimit 依赖:

然后再添加如下配置即可:

对API限流是基于Zuul过滤器完成的,默认情况下限流数据是记录在内存中的,实际上是用ConcurrentHashMap保存,当然也提供了多种存储方式,包括Redis、Consul、Spring Data JPA,使用这三种存储方式要添加相关依赖。

然后再添加存储配置,比如使用Redis的配置:

限流过滤器是在请求被转发之前调用的

限流类型主要包括url、origin、user三种

在过滤器的run方法中判断请求剩余次数,小于0就拦截请求:

可以看到,单位时间内剩余请求次数小于0时抛出ZuulRuntimeException,直接返回客户端TOO_MANY_REQUESTS异常消息,达到拦截请求的效果。

https://github.com/yunTerry/spring-cloud-netflix

Spring Cloud Gateway -- 熔断限流

微服务系统中熔断限流环节微服务网关中的限流的功能,对保护系统的稳定性起到了很大的作用微服务网关中的限流的功能,作为网关微服务网关中的限流的功能,Spring Cloud Gateway也提供了很好的支持。先来理解下熔断限流概念:

下文就网关如何进行超时熔断、异常熔断和访问限流进行示例说明。示例包含两个模块项目,一个为网关项目 gateway ,一个为下游业务项目 downstream 。
pom.xml

application.yml

以上配置的意思是:

先不构建下游服务,直接运行网关,访问地址 gateway/test ,出现如下情况:
构建下游服务项目,该项目为简单的spring boot web项目,具体配置不详述,添加服务类:

可以发现,网关熔断策略是超时3秒就熔断,而下游服务需要用时5秒+。运行下游服务,继续在浏览器内访问地址 gateway/timeout ,如果正确配置,3秒后,仍将显示以上结果:
--------------------------------------小总结------------------------------------------------
可见,通过简单配置,在服务不可达和下游服务超时的情况下,Spring Cloud Gateway成功进行了熔断。

pom.xml

当然网关还需要配置redis地址,以本地redis为例:

通过该键来判断服务用户身份,比如一个客户端IP为一个用户,一个usrid为一个用户,添加配置类:

主要是两个参数 redis-rate-limiter.replenishRate: 10 、 redis-rate-limiter.burstCapacity: 10 ,前者控制往令牌桶丢令牌的速率,后者标识令牌桶的最大容量。
具体令牌桶算法可以参考下图:
当然这个只是概念,具体可以参考 令牌桶算法

修改限流参数:

200次请求,成功返回的大概有14次,异常请求的返回值为:

查看汇总结果,发现正常返回结果的数量明显变多( 100%-26.5%=84% )
限流功能正常微服务网关中的限流的功能

-------------------------------------------惯例给源码---------------------------------------------
https://gitee.com/BeautifulHao/Spring-Cloud-Gateway-Demo.git

微服务 六:服务网关

服务除了内部相互之间调用和通信之外,最终要以某种方式暴露出去,才能让外界系统(例如客户的浏览器、移动设备等等)访问到,这就涉及服务的前端路由,对应的组件是服务网关(Service Gateway),见图(15),网关是连接企业内部和外部系统的一道门,有如下关键作用:

服务反向路由,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。安全认证和防爬虫,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门。

限流和容错,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验。

监控,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持。

日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。

图(15)gateway服务图

除以上基本能力外,网关还可以实现线上引流,线上压测,线上调试(Surgical debugging),金丝雀测试(Canary Testing),数据中心双活(Active-Active HA)等高级功能。

网关通常工作在7层,有一定的计算逻辑,一般以集群方式部署,前置LB进行负载均衡。

开源的网关组件有Netflix的Zuul,其工作原理如下图。

图(16)zuul工作原理图

在介绍过服务注册表和网关等组件之后,我们可以通过一个简化的微服务架构图(17)来更加直观地展示整个微服务体系内的服务注册发现和路由机制,该图假定采用进程内LB服务发现和负载均衡机制。在图(17)的微服务架构中,服务简化为两层,后端通用服务(也称中间层服务Middle Tier Service)和前端服务(也称边缘服务Edge Service,前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备,如PC,Pad或者Phone)。后端服务启动时会将地址信息注册到服务注册表,前端服务通过查询服务注册表就可以发现然后调用后端服务;前端服务启动时也会将地址信息注册到服务注册表,这样网关通过查询服务注册表就可以将请求路由到目标前端服务,这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起来了。如果以面向对象设计模式的视角来看,网关类似Proxy代理或者Façade门面模式,而服务注册表和服务自注册自发现类似IoC依赖注入模式,微服务可以理解为基于网关代理和注册表IoC构建的分布式系统。

图(17)简化的微服务架构图

关于微服务网关中的限流的功能和微服务怎么实现限流的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关中的限流的功能的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务怎么实现限流、微服务网关中的限流的功能的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring+SpringMVC+JDBC实现登录的示例(附源码)
下一篇:Spring Boot Security配置教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~