00:00
前面我们使用sel对我们每一个微服务的这些请求,以及我们自定义的这些资源,我们可以进行流控和降级等操作,但如果是这种操作模式下,其实我们请求呢,都已经进入了我们这个微服务,然后由sel进行控制的,如果我们在网关层我们也加入center的控制,请求呢,一进来以后,我们直接被网关层的这个center给它拦断,那么都不用转发给微服务,这样的效果会更明显。所以我们接下来就来整合我们这个网关层的sent,这一块整合呢,我们还是来参照文档,文档前面呢,专门有一个叫网关流控。们呢可以允许在网关层来进行一个流控,So呢支持我们使用spring cloud get外,它的这种网关,以及netflex的zoo它呢都可以来进行网关层的限流,它的这个限流方式也超级多,比如可以根据请求属性解析,比如你请求里边哪一个属性带了没带,我给你限流,包括根据网关的这些规则,网关规则管理,网关规则检查,它呢拥有非常多的功能,所以我们现在呢就可以来使用这个模块,而且来他说我们这个C的呢,160,它以后呢都引入了网关的适配模,我们现在呢是163,所以们现在也是可以来使用的,那如果我们想要限流的话呢,那下边他还说网关限流规则每一个字段呢非常多,那么一会来看网关的限流规则,那么想要整合网关,那这就有一个叫spring cloud get外,我想要跟他整合,导入一个网关的这个适配层就行了,然后再来添些配置,那这样呢,都太麻烦了,它其实都给我们给了一个专门跟。
01:40
网关整合的这个自动配置,我们可以来给大家看一下,想要跟网关整合,我们来到网关层,网关层呢,我们common里边首先引入了我们sentel,这个基本依赖,我们再在网关层呢,我们再来引一个sentel跟网关的整合,有一个叫cloud,我们来看一下cloud sentel,来找一个cloud sentel getway,大家可能没引过这块没有,但是来记录一下,这是sentel跟网关的整合,我们现在呢用210版本这一块版本呢跟着这个走,我们点进来,因为我们现在来看我们引的这个spring cloud阿里巴巴的这个版本,我们来往下翻,Spring cloud阿里巴巴的这个版本是210DEPENDENCY,所以我们现在呢,这一块也就是引入各网关的整合,210这个好,我们引入它以后呢,我们就可以使用了,我们只要默认一启动我们的这个网关,我们就可以在控制台对网关的整个进行一个操作,我先来启动网关,那整个操作效果呢,就像是下边。
02:40
比如下边呢,还专门给我们有一个可视化界面,有控的管理我们这个控制台,它可以对我们这个API来进行一些限制,这块图片没有那就没有,我们现在来直接启动网关,好,那么现在呢,网关启动成功,然后我们来刷新一下生的控制台,那来到我们网关的这一块。
03:00
我们这个网关的触点电路,由于没访问任何请求,我们随便来访问一个我们网关的这个触点电路呢,肯定就会有发相应的变化,它呢能感知到我们当前的这个请求匹配到是哪个路由配置,这有一个古力mail second kill root,这个root呢,我们能看到这个麦IL second kill root,它其实是我们配在这的这个网关的路由的这个ID,我们来往下翻,Second kill root,那就是它。但我们这个界面里边呢,它这个这一块的所有控制跟其他微服务都一样,那是这个界面问题,我们现在界面用的的控制台是163版本,我们把这个控制台来停一下。我们把这个森163的这个控制台我们来停掉,我们现在来引入我们新版本的控制台,我们给大家下载的时候呢,我也多下了一个,除了有163,我们现在还有新版的这个。幺七几好,我们点进来,我们就来启动171的控制台,好,那现在来启动这个新版的控制台,我们看如果是网关有什么不同,我就来叫cent,现在我们就叫171,而且大家注意我们所有的人呢,由于找我们这个地址,我们都是找8333,我们来启动我们的这个控制台,我们也是指定一下端口号serve,点一个port。
04:20
等于8333走来启动一个新版的控制台以后呢,就会出现这样的效果,来稍等一下,好,它这一块呢,启动成功,我们就在这儿来重新刷新一下我们这个控制台,我来刷新我们最好呢,再来启动一下这个网关,来重新启动一下,让网关把它新的信息呢汇报给我们这个四控制台,我们来重新进入的控制台,那在这个控制台里边,其他微服务的控制都是触点面论,流控规则等等,但如果来到我们网关,我们看到有一个API管理,所以呢现在就是这样,而且网关呢有流控规则,降级规则,其他的呢,他也没整这么多,但是网关里边这个流控规则呢,就跟别人不一样了,比如我们来新增流控规则,发现网关里边可以设置非常多的东西,包括可以针对请求属性来进行一个流量控制,那么现在呢,就来做一个这个测试,那么引入新版控制台以后,那先来随便刷一个请求,好,这个请求刷了以后呢,我们来网关的请。
05:20
链路请求,链路里边没看到,它能感知到我们这个路由的配置,我们如果在这来点击流控,就会对它来进行复杂的流控配置,所以们现在呢,如果在网关层我们想要添加一个流控规则,那资源的名我们写什么?所以呢,现在就有两种写法,第一个你默认你网关里边配的每一个路由的这个ID都是你资源名,你想控哪个配哪个,比如我想控second kill root,好,我们就在这来指定它的路由ID,叫它相当于我们来控它,同样的我们这个预值类型QPS,我们是控它的QPS我们控一个。
06:01
然后呢,这还有一个间隔,我们都可以来参照文档,它这个间隔呢,说的是什么意思?来往上翻这块呢,指的就是我们这个统计的时间窗口,我们这一块呢,如果我间隔写了一个二,那就是我们的时间窗口呢,是两秒一统计,两秒一统计这个信息,当然这也可以有秒分十天等等,我们都可以来指定,包括流控方式,你是直接失败了呢,还是在这匀速排队专门的这种来指定,而且快速失败,这有一个first size,这是什么意思?我们来到这儿看一下,这个first就是我们应对突发请求时,我们额外允许的请求数目,如我在这儿呢,快速失败了,但是呢,我额外可以允许你再来20个来进来都没问题,这是我们的这一块限制好,我现在呢,就来设置一个疫秒疫秒的QPS,只要是访问这一块的服务,那都是一个快速失败,好我们来点一个新增,说我们这个counter b应对突发请求呢,额外也允许你这一个进来,好我们现在来做一个测试F5。
07:02
诶,我们发现呢,我们只要一刷新每秒呢,一超过我们的这个限制,因为我们现在是一秒一个一超过以后呢,就会有一个默认的回调,叫block巴,就是这个我们是在网关层控制的,所以呢,这样的好处就是我们的这个请求发给这儿的,我们都不用来到我们的这个微服务,因为如果我们来微服务被控制住以后呢,我们返回的不是这个数据,我们返回的是我们说的这段JS,我们可以来看一下微服务里边自个呢,在这儿返回配置的呢,是这么一个接森点过来,那是这么一个接数据,咱们现在呢,相当于加入了网关的配置,而且呢,最厉害的就是我们在这儿网关来控制的时候,我们还可以。根据请求的非常多的属性来进行控制,比如我们在这来做一个测试,我来重新把这个规则删除掉,我在这来点一个流控管理,我们来新增流控,还是来管理我们这个秒杀服务的,我现在来针对请求属性,针对什么请求属性呢?我们现在呢,就来根据请求头,请求头呢,假设你有一个头叫hello,然后呢,属性值的匹配,你精确匹配你的hello的值叫word,我才给你放行,否则呢就不放行,所以我们来匹配的时候,还可以根据这个,包括呢,你这个匹配上了,我给你控制住这个QPS,我可以允许你走一个,然后呢,我们的统计窗口是两秒一个,额外呢放一个零个数据啊,我点一个新增,所以我们现在发现我们这一块呢,我们相当于加了一个请求头,那这样的话,那虽然每秒一个,我来F5 F5刷新,我们无论怎么发,因为我们没有带指定的请求头,Hello word,所以我们在这儿呢,没限制,那怎么就。
08:47
不能限制住呢,所以我们在这儿狂刷是没限制的,我们来使用postman,我们带一个自定义的请求头测试一下,所以也就是说如果我们有了指定的这个请求头,那就按照这个流控规则,我们来做一个测试,那来到波斯曼来看一下,如果带了这个指定请求头是不是会被限流。
09:07
好,那还是来发这个请求,CTRLC,我们来到这一块,我们自己来发一个请求,我把这个关掉,好我们来发一个请求,就是它,但是呢,我自定义一些请求头,我们现在呢,没带任何请求头的情况下,我直接的好,我们发现呢,返回的都是0SUCCESS 0success没问题,但是如果我带了自定义的头,我是hello,然后呢,值你说叫word,那巧了,我也带了一个叫word,那如果是hello word的情况下,那这个呢,会被限流,每秒一个来测试一下。好,这个是发过去了,我点快一点,诶我发现呢,有些东西就被429阻塞住了,所以这是我们写的这一段代码,我们来做的这个配置,我们可以在这一块呢,来对你来做一个精确的配置匹配请求头匹配你远程的主机地址,你是从哪来的银行,包括请求匹配你的这个client IP,你的这个客户端到底是什么,以及UR参数,我们都可以来进行匹配,包括你带来的这些cookie值也可以来匹配,所以这一块的规则呢就非常多,我就给大家来演示了一个。
10:10
而且如果我们现在要大量的控制说某一些请求,比如我们商品服务的这个请求,Item服务的1.html,我们商品服务的请求,我要控制秒杀服务的请求,我们同样规则都要控制,我们还可以对API来做一个分组,我在这点一个API管理,我点一个API分组,所以呢,比如我们就叫hello组,这是它的名称,然后呢,我们可以来给它做一个匹配。比如我们来使用精确匹配你给我发送的第一个这个请求,我会给你留空CTRLC,我们来到这儿,好,然后呢,我们再来匹配一个,比如我们来使用权置匹配你给我发送的任何其他的hello下的所有请求,那我呢给你分到一组,这样的话呢,我们相当于配置了一个组,我们新增了一个API分组,来刷新一下我们新增的这个分组呢,来重新新增一个hello,好,那现在呢,第一个精确匹配的hello,第二个我们前缀匹配的word下边的所有我们在这儿来点一个新增,那这块数据呢,没有新增上来,这是由于我们这个客户端,我们控制台呢是171,而我们这个S呢是163,所以它的这个数据发送呢,老还是有问题的,那我们最终切到171就行了,那我们在这儿也不演示了,就是在这儿呢,如果API分好组了,们在这儿流控规则的时候,门也可以来指定,诶我刚分的那个组,如果我们这分好了,那就可以选中我是。
11:40
对整个组呢,来做一个设置。这是我们在网关层的整个限流降级也一样,我们也可以来这么来指定这些降级规则,包括我们限流的这个默认返回数据,如果你觉得这个数据太丑了,不是我们想要的。叫什么message block的BY什么,那么现在呢,就可以在这来自己指定,那还可以来写成一个配置文件的方式,比如它呢有一个SCP,你主要来看这个S里边呢,有一个s cg for bank,比如说呢,我们在这可以来指定一个bank,就是回调这个forba呢,有一个content type。
12:21
叫内容类型,我给你返回的内容类型是什么?如果我们限流成功了,我给你返回application杰森,然后呢,包括内容长什么样子,真正的内容我们也可以来指定一个for back response body,真正的内容,以及response status,我们的错误状态码,这个状态码呢,我们来看它默认呢是一个429,请求太多,比如我们来返回一个400,这也行,所以我们所有的东西呢,也可以在这自己来定制,当然除了在这定制,参照文档去来写某些接口的实现,来做回调也是可以的,现在来重新测试,那将网关呢,重新来启动,如果一旦被限流以后,那现在返回的状态嘛,就不是我们以前的429,而是400了,先来做一个测试,好,我们网关呢启动成功,来,重新在这儿来刷新一下们来网关的这一块,我们来做一个流控规则。
13:17
那现在呢,来控制我们的这个路由分组,这个路由分组呢,我们先来把这个路由的ID拿过来,我就控制秒杀服务,然后呢,我来控制它,它的QPS是一个额外呢允许零个,我先来点一个新增这一块没增成功,那原因还是我们控制台的这块问题,包括我们来看这个控制台,它呢这都报错,数据传输错了,行了,大家在下边呢,切换成我们这个版本就行了,比如我们现在在整个common里边,我们来做一个切换,我们在这依赖的呢是210版本,我们可以给它升级,升级成我们的220版本的s cloud,阿里巴巴,这是我们说的网关的流量控制,主要呢,他在这控制的会非常精细,被他控制了的所有数据,我们就不用去转发到我们的微服务了。
我来说两句