00:00
前面我们将所有的微服务都引入了生来进行保护,那么现在呢,就可以在控制台很方便的来调整每一个微服务,每一个请求的流量控制,那我们现在来详细来说一下这一块的流量控制,来参照我们这个文档流量控制这一块的文档来看这一块的设置都是来做什么的,首先我们这个资源名,我们说默认呢是请求名,当然我们也可以通过注解来定义一些资源,那现在先不说注解的事情,然后接下来我们这定义阈值类型,我们是来限制它每秒的请求数,还是限制我们整个总线程并发数,那我们这一块呢,有一个单机阈值,阈值我写一个一,那就是每秒请求放过一个来看高级选项,高级选项里边呢,还有一个是否集群,那个这个集群的话,如果我们写了一个E,如果我们使用集群模式,因为我们这个秒杀服务可能给ABC3台机器呢,我们都部署了这个。
01:00
图,那我们这三台机器呢,现在就可以这么来控制,如果我写了一个100 100我写了一个单机均摊,单机均摊的意思就是我们这个每一个机器它的这个阈值都不超过100,另外一个呢,我们叫总体阈值,总体阈值如果我写一个100,那就是三个服务ABC,那这三个服务呢,总体能放100的流量进来,但是给哪一个人放多少,那就是由负载均衡来决定,这么说的第一个集群模式,这个我们就不测试了,包括我们这个流控模式,这个流控模式呢,我们现在如果是直接关联和链路,这三个是什么关系,我们来参照流量控制,流量控制呢,下边有一个我们的流控模式,这是流量控制,流量控制里边呢有我们流控模式应该在下边,我们来看一下基于调用关系的,我们这个流量控制,那么现在呢,有一个根据调用方限流。我们现在有一个选项叫链路和我们的关联,那这个链路和关联是什么意思?直接呢,我们都已经操作过了,直接呢就是我们只直接限制这个请求,这个服务,然后呢关联我们先来看链路,这个呢最好理解,我们这儿还有一个入口资源,他呢是这样说的,我们正常呢调用服务可能是这样的,我们现在呢有一个C服务,C服务,C服务呢,现在可能调用链是这样,服务呢,接下来调了bad呢,会调CA呢,有可能掉FF呢也有可能调CA,那如果我们线对C来做了限流,如果是直接限流,那就只线CA下来,如果是链路限流,我们可以在链路上指定入口资源,比如我指定了一个杠A,那就是只有从杠A请求一连串调到C的,我这个流控才生效,对CC的流控才生效,如果是从中途F这平白无故调过来的,或者从别的链路调过来的,那对C的流控就无效。
02:58
所以我们说的这个链路限流,那就是我们可以来指定这个入口,诶你是这个入口调到我这儿的,那我的这个流控单击阈值,我说每秒一个,这就生效,否则呢那就无效,所以这是我们说的这三个,还有一个说的关联,这个关联呢,它是的意思是这个我们呢有些资源是有关联关系的,比如我们这个有一个A服务的方法哈,还有B服务的这个方法,A呢是他说的这个假设我们是读数据库经常读,B呢也是经常写,现呢读写并发都很大,假设呢,我给A做了一个限流,我说限100个,但是呢,它关联的资源是B,那就意思当我们这个B流量一大的时候,那就对A进行限,B流量不大,对A就不限了,所以呢,我们说的这个叫关联流量控制。
03:48
比如它支持这种各种方式的限流,包括流量限制了以后,还支持各种方式的限制效果,那限制的效果呢,在上边它也都有解释,比如这个效果的第一个直接拒绝,那就是流量限制了以后,它呢直接拒绝抛出异常,就像我们最终在这测试返回,直接给我们返回一个block by sentel,或者我们自定义返回的异常也行,这叫快速失败。还有一个流控效果叫排队等待和warm up,我们up呢在这儿也有解释,我们up就是他说的预热启动,也就是冷启动方式,这个预热方式呢,就是说当我们这个请求流量呢一上来以后,我们呢,这现在呢,它是显示服务刚启动,然后呢,我们这个服务的峰值假设呢,它能到480,我们给他限制了,我们的阈值是480,那请求仪上来以后,假设现在。
04:44
有500个全景来,我们不能一下把四百八全放过去,所以呢,他就通过在一段时间,你指定的这一段时间里边一点一点慢慢放,放到最终你的这个峰值480,所以我们在这儿可以来指定时间预热时间,比如我十秒,我这个单击预值呢,我测出了它的这个性能,最多呢500,那这样这样的话,我们服务哪怕刚启动大量请求权益进来,我在十秒内才能给你达到峰值500,可能呢,前几秒是给你放十个试一试,20个,50个慢慢的去刺激去预热,所以这是我们说的预热,还有我们的排队等待,所以呢,我们这个大并发请求一进来,我们还是来限制500,现在来了700个请求,那有200个呢,我们如果选择快速失败,那就直接丢了,那如果我们选的是热启动,那现在700过来可能还500都进不去,从十二十可能才往上试,那如果我们选的是排队等待,那700呢,500。
05:44
先直接进来被处理,剩下200呢,我们可以指定排队,排队我们也可以指定超时时间,这是以毫秒为单位,假如我指定一个3000毫秒,那就是三秒,然我们的这200请求三秒之内得不到处理,那也是失败,所以呢,这是我们这一个流空效果这一块呢,我们都可以不用测试了,当是在下边呢,我们这那么多的调用量,随便呢可以来测试一个,当然我们现在整个整合还没完,因为我们发现整个调用链呢,它只发现了我们这个请求,并没有我们发现通过份来进行远程调用的这些链路,所以我们整个后来的控制,如果我们是A远程调用B,那我们更要做的就是对B的熔断保护和降级,就是我们接下来要说的降级,如果我们这个B有失败了,那我们A怎么办?那这个流量控制我们就给大家在参照文档简单的说一下,下一节课我们来看降级。
我来说两句