http 网关 熔断和限流

公司内部很多rpc调用都需要经过gateway 是为了保护后端 这里有两个常见的操作 一个是熔断一个是限流。gateway还能实现很多比如服务的黑名单白名单 防止攻击 灰度控制等等。这里主要就是介绍熔断和限流。

什么是熔断? 其实熔断这个词不仅仅是在计算机领域会出现,在很多地方都有熔断的概念,熔断是为了保护后端,比如说我们当前有两个服务一个是qq群音频通话服务 一个是qq群服务,这两个服务都是由qq本身这个大服务来调用的,当我们想要进行qq群聊天的时候 就会调用qq群相关服务,当我们先要在群里进行音频通话的时候就由qq群这个微服务来调用qq音频通话这个微服务,但是当我们的qq音频通话服务挂掉之后,qq群微服务就不能够调用他了,这样导致qq群这个服务也积攒了大量未处理的请求导致这个服务也挂掉了,甚至一连串影响下去整个服务都挂掉,这时候熔断机制就要上场了,熔断机制就和我们家里的保险丝一样,不过这里断掉的是某一个特定服务器的调用,一般来说网关里都有熔断器。当熔断器开启之后,网关就把某个调用命令给过滤掉了,调用指令走不到后端服务,熔断器会不断的进行计算操作,判断是否需要打开熔断器。熔断器一般来说有三种状态

http 网关 熔断和限流

打开/关闭/半开放

初始的时候熔断器是关闭的,一旦请求失败会触发熔断检测,熔断检测就是进行对应的计算来决定是否打开熔断器,当熔断器打开的时候会熔断所有和此熔断器相关联的请求,直到冷却时间结束 冷却时间是当你的熔断器被打开的时候,冷却时间就开始计时,当冷却时间到了之后会默认进入半开放状态,就是说我先试试看看能不能恢复正常工作。在半开放状态时每隔一段周期熔断器都会放请求出去,熔断器中有一个int类型的halfopensuccess当熔断器在半开放状态并且进行请求成功的时候这个数值会进行加1。默认当这个值变为2的时候也就是请求两次之后熔断器就会关闭。目前在做的是单个指令在10s内请求总量大于3000就会进行熔断检测。

 

第二个是限流 限流更加容易理解,通俗的来说一个后端server会对很多client提供服务,但是如果说某一个client突然流量飙升,就必须要对他进行限流,如果不限流还是可能将服务器打挂所以就要限制这个client的流量。目前做的事user+cmd维度来进行限流,redis里边存放的是每个cmd限流参数。默认情况下每个user+cmd被限流的粒度是10ms。

 

当一个请求来到网关之后请求会通过路由,然后获得对应的请求id,cmd等等信息,然后进行熔断检测,看当前对应的cmd是否开启了熔断器,然后进行登录检查,通过之后进入黑名单,限流检测等等  熔断统计的是一个cmd下的调用错误率,限流统计的是用户+cmd维度下的流量是否超过了阈值,之后请求才会进入到我们的后端调用接口。