00:00
好,那么呢?接下来呢,我们呢,已经完成了我们的服务熔断,还有务降级,因为这两个概念呢,特别容易呢,让人产生这个一点点模糊,那么这呢,我们呢,再给大家进行一下简单的总结。来,大家请看哈。回到我们刚刚开始讲的。我们说过了,在复杂的分布式系统当中,一定会有各个微服务之间的调用,它们就是一串线上的蚂蚱,A调BB调CC调D,低调。XYZ等等,那么呢?我们说过了,在调用的过程当中,由于微服务之间,我们之间呢倒是解耦了,但是服务之间的通信是不是避免不了有异常超时。那么这个时候如果说正如同图图中所说,我们这个A在I这假设现在呢,这是一个用户请求,那如果是10万个用户请求呢。
01:07
都会到挨这儿不用多说,就是每个用户等三秒钟,一个等三秒钟你感觉可以,那10万个呢。那么这个时候为了避免在超时出故障的时候引起大面积的服务调用扯皮和系统资源瞬间被挂起耗死的情况,那么这个时候的话呢,我们是不是只能完成相应的切割和熔断了?那么这个时候再带着大家来看一下。扇出刚才说过了,就是我们所说的,比方说这是一把折扇,扇子你要打开的话,它折叠的时候是竖起来的,张开了以后慢慢的张开。那么假设哈,我拉。从A这一直拉到PAC def,那么这样的话,这个扇子的折扇这个宽度是不是相当于越拉越长啊,那么这样影响的范围也会越来越大。我们为了让他。
02:07
不要占用越来越多的系统资源,我们是不是要引起引起这个服务雪崩的现象的话,我要避免这种情况,我们是不是有一种刚才的讲解叫服务熔断啊,那么回忆一下刚才我们所说的。我们在这儿。说过啦。故意让你烂的时候,我这呢只是为了给大家做一个演示啊,所以说呢,故意呢,人为的抛出了一个异常,那么是不是可以把它当做当我的consumer再调我的微务提供者,在熔断机制这个8001的时候,故意A调BB这个微服务,也就是我们的熔断8001出了故障。那他出了故障了以后干嘛,我应该如何处理呢?那么那个时候呢,我们干的一件事情让他抛出了一个异常,那么谁来替我收拾烂摊子擦屁股,谁来给我兜底呢?针对于我掉哪个方法,哪个方法出现了异常,那么呢,我们是不是用了这个东东,然后由它来进行兜底和处理,由于他这是要以前要返回一个department,那么干脆我呢?
03:19
因势利导。也返回个department,但是这个department里面的信息是不是已经完全变了呀。那么它相当于说是一个什么带着异常信息的一个返回值,那么前端工程师去解析的时候,比方说我们这。故意写一个4444,那么假设前端工程师取某个字段是一个失败的值的话,那它是不是会来进行一种什么友好页面的提示啊,或者说是异常的处理,那么所以说我们这儿。来看何为服务熔断,一般是某个服务故障了或者异常引起的,那么我这儿给大家做了说明,我是不是故意,当我查235那个号,或者9999这个ID数据库里面没有的,查出来是个烂,是烂的话,我就故意给他抛个异常啊。
04:12
那么这个时候。有异常了,就是类似现实中的保险丝,当某个异常条件被触发了,直接熔断整个服务,而不是一直等到此服务超时,导致服务系统的资源大面积的被占用,那么OK,这儿就是我们的服务熔断。那么呢?之后我们讲了两个小问题,既然有熔断了,从技术和业务的角度,为什么又会有降级呢?那么这个时候先说技术,Spring cloud底子也还是spring spring有两个重要的技术支柱,一个是IOC,一个是opoc loc就是面向切面的编程,说白了,是不是应该把我们的主业务跟我们这个异常处理给它做成一个切面,用吃入的方式自动的润物细无声,随风潜入夜的。
05:09
让你执行啊,再说狠一点的话,就是你的业务逻辑方法里面就不应该带着这么多。横向的,横切性的关注点,这种异常的处理信息实现主业务方法和我们的异常处理,我们的熔断处理的解耦。这是第一步,第二一个我们说过了,要避免方法膨胀,那么呢哥,你这些get方法其底层是不是还是掉我这个service接口,那么我这个接口里面这个方法,如果我干脆给你一把抓一锅端。我针对你这个接口里面的每一个方法。总的做一次熔断处理,做一次服务的。异常情况的处理,那这样我们是不是就可以避免不用每一个方法头上都添加这么一个拨方法。
06:06
我们将把分散的back方法集中起来,统一的放在一个。接口里面。那么这个时候请看,根据刚才我们之前讲的步骤,我们已经有了这个接口,注意这个接口它是API的,那么这个接口我们统一的提出来,让它针对于某个微服务,然后这个微服务要用这个接口,如果调用这个接口里面的任何一个方法出了问题以后,谁来兜底,谁来负责,那么由我们fall back factory这个类来实现,那么这个类。就是我们做的这个类,它是不是实现了for back发这个接口啊,那么呢,然后呢。其中的信息,因为我这为了演示降级哈,我只写了其中的一个方法,这两个就没有了,那么呢,这两个方法不再写,就写我们的get,这个get我针对于。
07:09
Get里面的字段填充了一些异常信息,那么我们在讲服务降级的时候说过一件事,何为降级啊?那么再次强调整体资源快不够用了,比方说现在ABC3个系统。每个系统有五个开发工程师支撑,平时都是大家是平等的关系,但是现在呢,我们为了保证A系统能够充分的开发,现在客户比较注重A系统的功能,我们要投入更多的资源,那么呢?希望比方说这一个月以内,陈学员的数量增加到十个,那么这个时候我是不是要从其他项目组干嘛?借掉我们的资源,程序员过来来支援A呀,那么这个就是什么呢?忍痛将某些服务先关掉,那么现在这种情况,刚才的这种项目管理上借调这种问题,那么是不是就是我们为了保证A这个系统。
08:13
资源开发充分,我们先把C的程序员借调过来,C这个微服务。这个项目的资源是不是被抽掉了,那么他被抽掉了以后,对C而言是不是服务被做了降级,但是。有可能还有其他来访问这个C,那怎么办呢?那么这个时候我们呢,就要成我们自己的服务降级的策略考虑么呢。所谓降级一般是从整体符合考验,就是当某个服务熔断之后,服务器将不再被调用,当然我这个不但是什么,因为我当时做的时候,我故意干坏事,我做了一件什么事,我是不是把C直接8001给close关闭了?
09:08
那么彻彻底底就根本就没这个服务了,你就当C项目组的程序员,通通被抽走了,去支援A项目组。那么呢,什么时候A忙完了这五个程序员回到C,咱们再把服务开启,正常对外服务提供服务,那么现在被抽走了以后。这边服务降级了,A系统就像一个抽水机一样,就把C系统的资源给抽走了,那么现在是不是忍痛将C系统的服务先关掉,也就是我们8001关了,待A渡过难关了以后再开启回来帮忙,帮完了以后我是不是再回来呀?那么这个时候为了避免。这边的客户长时间的去等待,那么你想如果你不做这个服务降级以后的处理所有的访问,去访问C的时候,是不是会报一个l page错误的页面啊。
10:01
这就好比现在大家有问题要去问徐俊博老师,或者问杨哥,那么现在一种情况。我们呢,不在学校。那么现在假设有一种提示,马上就告诉你,哎,今天他们两个都不在学校,那么请问客户端的访问的同学们,那是不是马上就走了,但是第二种,如果你没有收到这种确切的消息,然后说你看他今天来不来也不知道啊,徐老师到底在不在你也不知道,要不你先做了,等一会儿吧,好家伙,那么这个时候这些客户反问就会在这儿大规模的等着,那么这个时候是不是容易引起系统的资源的占用挂起和资源的紧张啊?那么所以说我们这请看这三句话,我翻译一下,所以这级我们是从整体复合考虑,因为你想嘛,如果说每一个同学知道徐建波老师今天不在,他立刻就走了,他是不是不会把六楼办公室占满了,如果今天来了100个学生都会来找徐建波老师,现在徐建波老师在不在不知道,我们也等着,那么这个时候会议室教室里面的人是不是越来越多,那么所以说呢,我们呢,此时要求这个客户端,你干脆自己准备一个本地的for back回调返回一个缺省值,那么所以说这也就是我前面一再强调的这句话干嘛呢?
11:25
服务降级处理是在客服端完成的,跟客服服务端没有关系,也即客户端访问的时候,我们自身就带着一个准备好的本地的for back回调会返回一个缺省值啊,那么只不过这个缺省值是不是就是我针对于。Service接口所写的get方法里面这个缺省值啊,如果能成功调用,请返回数据,如果不能成功调用,是不是返回这个for back里面的这个缺省值啊,那么这样就避免了这个C,虽然说关停,也就是我们的8001,因为要支援其他,虽然说关停了,那么客户端访问就不会在这儿访问了,以后报错或者不停的转着。
12:10
一句话,能反问我们就反问,不能反问马上访问对应的for提示信息,告诉你此时pro已经关闭了,8001不好使了,那么收到这个消息的其他客服端是不是也就不再冲冲冲的冲过来了?就比方说有些同学来到了六楼来找徐建波老师不在,他到了一楼的同学马上会告诉后面的学员,别去找了,别找了,今天徐徐老师他不在办公室,不用去了,那么这样是不是减少了访问的客服量的压力啊?所以说在这块请大家看。不熔断和服务降级的意思,请同学们最终跟着杨哥读一遍,那么呢,熔断是某个服务故障了或引起异常了,前面说过了,我这儿干的时候是不是故意抛了一个人为的抛了个异常给大家做异常演示啊,那么这个时候干什么呢?类似于现实使用的保险丝啊,当某个异常条件被触发直接熔断,这熔断这个服务我这儿报异常以后,大家可以看,我也没有在前面抛了个什么空指针异查,我抛了一个专time异常,有这么一句话,但是前面的收到了以后,那是不是也就自行的给他处理了,不用等到此服务超时啊。
13:20
简单一句话就是什么痛痛快快,不牵扯整个系统,我不行就不行,我走,那么呢,尽量避免我们的什么东道服务雪崩这种概念,大家看左图中诶。PH假设调A出事,出事就出事,A你别连累大家。没有连做你不行了,你赶快返回一个不行的提示信息,就让这边调用,知道不调你或者少掉你对不对,就是熔断,就是保险丝,那么这样企服务过了,一般从整体符合考虑,一定要深刻理会理会这句话,整体资源快不够了,忍痛将某些服务先关掉,那么这个时候呢?
14:05
我们那就可以看到。服务器都关了,那么将不再被调用,因为你也调不到了嘛,8001,我现在是不是都给它关了干坏事,所以说客户端为了避免导致整个系统被挂起,资源被占用耗尽,死循环,死锁各种异常现象,干脆保证服务的健壮性,我们这个客户端自己就做了一套。本地的for back回调的方法可以返回一个缺省值,那假设我收到这个缺省值以后,我就知道现在这个服务已经是淡了,我尽量的是不是也不再去访问了,那么这样的话呢,虽然说服务水平下降了,但好歹可用比直接挂掉要强。那么这两个概念务必请同学们慢慢的理解好,那么呢,我们后续接着往下走,专门给大家呢来介绍我们的。
15:03
S dashboard。
我来说两句