00:00
好,同学们,我们接着说,那么从我们学生请教老师这个问题,那么按照我们的说法,消息中间键是什么,为什么引入,尤其什么叫消息,说穿了就是上一次我们按照我们的消息格式的约定,没封提问卷,提问卡都要有问题提问人手机问题正文的这个描述,那么这样的一种约束,一张张纸片,一张提问卡交给班长,那么这个就是我们的消息,那么班长就是介于老师和学生之间的一个中间调停的人,那么好,这是生活上的case啊,慢慢的进入到我们上述问题,也就是我们产生的这些背景,从生活的case啊,到实际的技术生产案例,那么来,兄弟们跟着杨哥来,首先在没有引入跟这个一样哈,在没有引入消息中间件之前,那么是不是就是AB系统的互调。那么系统。
01:00
时间是不是怎么调用直接最简单嘛,我们在idea里面啊,当然我现在idea没开哈,那么当时我们用这个cloud去做的时候,最简单是不是通过U瑞卡注册器了以后。微服务的这个生产者。和消费者互相调用,消费者直接去查生产者对吧?那么这个时候我们干嘛?恢复架构之后什么调用?链式调用是我们在写程序时候的一般流程,那么为了完成一个整体的功能,会将其拆分成多个子模块。我们。A调BB调CC又调B,那么大型的分布式系统,我们的雷锋阳老师,徐静博老师两位各自给大家讲过的这些系统,包括杨哥讲过的系统都会是什么?不是double,就是cloud的这种RPC调用,Rest调用,那么一个功能背后要调上百个接口也是有可能的。那么。这种情况下,这种价格会有哪些问题?好最简单,订单系统,你下订单了,我是不是要干嘛,锁定库存减库存,然后干什么调支付,支付完了以后我又调什么,是不是又调物流系统,那么好,A调用BB调用CC调用D,一个不通,全部在这耗着,在这等着,那么你可想而知啊,这个时候系统能整体上是不是会存在性能下降的风险和危险,那么除此以外干嘛?我们来看三大问题。
02:33
系统之间的直接调用接口哈,A系统调用B系统提供的一个。Rest风格的接口也好,或者是web service调用,各种socket调用好,耦合比较严重,什么意思呢?请看我每新增加一个下游功能,都要对上游的相关接口进行改造。言下之夜,现在假设哈BCD干嘛?假设这是库存系统,这是支付系统,这是什么物流系统?BCD系统为什么动?那是不是都是因为有客户调用A系统,A系统什么是不是订单系统,订单是不是决定着库存,决定着支付,决定着负零,那么好,A系统要发数据给B和C,那么每个数据呢?可能比方说这个是要求一种报文格式是XL,这个是要有要求接算串二,这个是要用一个干嘛纯数字编码字符串,那么这个时候A系统要给每个系统的数据进行组装,然后干嘛逐一发送,当代码上线以后,又来个需求,那么干嘛呢?
03:37
现在我们现在BCD,假设D后面还有个E,还有个F,哇,那么这个时候干嘛?下游每增加一个系统都跟A系统有关系的话,就要让A系统干嘛?知道我下游又增了一个系统,人家A系统是什么,我就是一个订单系统,怎么下面有什么变化都要让我感知得到呢?我就是一个处理的,就比方说干嘛。
04:04
我就是一个后台的厨师,我只负责做宫爆鸡丁,至于说前台谁来吃啊,无关紧要,对我后台人而言,我把宫保鸡丁做好,叮叮叮敲个铃铛,大堂经理把菜端上去,只要客人吃了点个赞就OK了。我不想知道今天。来了多少客人,几个男的,几个女的,几个小孩,那这不增加这个厨师他的负担吗?那么这个时候你看干嘛?每接入一个下游系统,上游的A系统都要进行代码改造,开发联调的效率很低,那么所以说这种情况下干嘛耦合度高,系统和系统之间干嘛?而且更恐怖的是什么?你们要的不一样啊。酸甜苦辣四个客人对吧?那么再来我说过这么一个问题,A可能要要的是格式是X秒,这个是要阶层串,这个可能是只要纯字符串,那么每个格式不一样,那么这个时候干嘛?A系统就会负担越来越重。
05:06
第二个。面对大流量并发的时候容易被冲垮。那么同学们。风阳老师在给大家介绍电商项目的时候,是不是讲过一个东东叫秒杀呀,那么我这提一嘴,整一个秒杀上游系统,下个单,下游的处理秒杀的这个系统干嘛?我们要有哪些步骤,同学们回忆一下。好同学们,那么首先啊,这题重要哈,那么杨哥呢,因为呢是基本上呢,是拉通的给大家讲,一边讲新知识,一边带大家复习老知识啊,比如说现在面试官就问你同学,你写简历上说你做过基于分布式系统微服架构的电商,那么请问。你们这个秒杀你是怎么做的?应该有哪些步骤和流程?下单以后后台从库存到物流到支付到积分,系统怎么怎么怎么怎么着,说说你大家看。
06:04
你只关心技术,不关心业务和流程,不爱说,不会说,不愿意说,是不是很吃亏呀?那么好,借着MQ我们过了现在没有。的时候这么多就直接冲到系统这哗,明天早上干嘛,十点钟小米商城,小米手机小米九干嘛,200块钱一个,某个乡县是不是疯了,那么这个时候干嘛全部的大流量全部涌入到什么我们的业务系统,你想想。是下班快还是处理系统快,那么这样的话呢,容易被冲垮,这么多人来提问,班长帮我挡一下,所以说看了吗?每个接口的模块吞吐能力有限,这个上线能力如果是堤坝大洪水冲垮,那么来我们举个例子,秒杀上游系统发起什么下单购买操作,我就是一个下单操作,上游系统倒是简单,前面的客户手机上点一下完活提交订单,但是下游系统你要完成秒杀的业务逻辑是有这么多步骤的来复习。
07:07
读取订单,库存检查库存冻结余额检查余额冻结订单生成余额扣减库存扣减生成流水,余额解冻,库存解冻,那么兄弟们,每一步,杨哥,雷锋阳老师,我们呢?都给大家聊过,复习过,那么这个时候你别到时候呢,上硅谷完完整整的教了你一个西瓜,你去面试的时候只说的出来一个芝麻,那这个时候干嘛,风牙和杨哥。干嘛?我们是不是会哭的?听懂了吧?你把两位老师气死了,那么你跟我讲,还有人给你们讲?更新的技术吗?所以说呢,这个时候注意,为了避免上游系统那么很简单的下单一秒钟,这哥们干嘛能够给我下1万张单子,我下游戏的我由于我步骤牵扯了这么多,我一秒钟只能处理2000张单子,那么你懂的,五倍的差距,朋友一天要把我压垮了,那么所以说我需要有个人挡在我前面消峰,不要把我冲垮,最后等待同步存在性能问题,什么叫同步啊,讲过了。
08:17
干嘛你不回我发起调用请求,我调用你,你没有给我一个答案,我就不走,我就一直在这转着,那么你懂的,你不能去干别的,我也被你耗死在这,你们双方干嘛?是不是一直在这儿?僵死的,我讲过了,比方说,呃,杨哥说不好意思,同学,这道面试题挺难的,可能有些东西我也需要去查查资料,要不这样吧,晚上我给你电话,我再告诉你,那这个同学说那不行,杨哥,今天你不告诉我,你就别想回家,我告诉你。我耗死你是吧,那么这时呢,我就悲剧了,对不对,那么呢,他这么轴的话,碰上这样的学生好,那么这个时候干嘛,我们只能是来。RBC回到系统,它接口基本是同步调用,就是A调用B的时候,B什么时候,一般B什么时候给我消息,我一般什么时候回,那么整体服务遵循木桶原理,同学们都明白吧是吧?一个木桶能装多少水,取决于这个木桶最短的那块木板,那么整体系统系统的耗时取决于链路,当调用当中哪个最慢的那个接口都很简单,那么同学们A调用BCD都是50毫秒。
09:22
EEE好说,如果只调用C50毫秒完成,但是如果调用B,关键是B又去调用BB到be,又要耗费2000毫秒两秒钟,那么就直接拖累了整个系统的性能服务,那所以说怎么办?结合上面从生活到实际生产案例,我们就会明白,需要引入我们的一个东东,就叫消息中间件,需要它能够摆平上述这主要的这三种情况,第一个要做到系统奇偶,新的模块接进来可以做到代码改动最小,能够干嘛解耦,也就是新增的下游系统我不管。
10:05
比如说兄弟们,你们现在是下面杨哥站在讲台上,杨哥就是一个。A,系统我只管在这讲课,至于说下面有哪位同学今天有事要请假,至于说今天突然又加进来两个学生是来试听的,你不用来跟我说,不要增加我的负担,我跟你们没关系,我就在讲台上负责讲课,也就说什么可以做到,干嘛不要动?杨哥,下面本来假设你看今天有50个同学,下面来了一个试听的,加了一个。不用有人来通知我,不用来告诉我杨哥这个今儿下面来的那个张三,是今天他来试听,你试听讲课,准备听听上硅谷的讲课风格是什么样的,那么这个时候什么不要来通知我,代码改动量最小,我跟那位试听或者请假或者早退的同学没有关系的,我们干嘛?彻底解耦第二个流量缓冲池秒杀讲过了别打,别全部请求打到后端业务系统,那么这个时候干嘛?
11:06
请去消息中间键,那不要让业务系统被冲垮,能够消封,最后干嘛,我们呢,异步化的提升整体性的冲突能力干嘛?一步一个请求过来了,兄弟早上提交个请求,就跟你下个订单,调动快递公司同城,你也应该早上下单,快递员赶过来取件,上门取件,然后下午那个哥们能够收到,早上下单,下午收货,换句话说,这个时候不代表你现在前一秒下单,下一秒他就收获,没有可能,那么这种就是异步,所以说从这干嘛,我们可以得到一个小小的结论,对于我们的分布式系统,只要是消息发送尽量都是什么异步,只要是系统解偶,尽量都可以引入我们的什么消息中间键,好,那么这个就是我们消息中间键的一个入门大致的情况介绍。
我来说两句