00:01
来我们接着往后说,呃,那么下一个呢,我们再来说一下啊,事物的一个超时设置啊,事物的超时设置啊,叫做什么呀?叫做这个time啊,Time out,我们来看一下啊,写到这啊,Time out,呃,那这个超时设置是什么意思啊?啊,Checkout干什么事的呢?给大家解释一下啊,就是呃,指定就是什么设置事物在强制回滚之前可以占用的时间,明白吧,啥意思呢?解释一下,就是一个事物你开了一个新的事物以后,它总共就是它能操作多长时间啊,就是你通过这个time out来进行设置的啊,就是他在强制回滚之前可以占用的时间,也就是意味着这个事物你总共能操作的一个时间啊啊那么可能有同学在想啊,你说你设置这个干嘛呀,事物不应该是让他什么从头执行到尾的吗?
01:10
对不对啊,那么其实正常情况下,那肯定是要什么从头执行到我这个事务结束的,这样的话呢,我整个的这个流程是才能结束啊,但是你就敢确保我的每一次操作它都是正常执行的吗?不会出现一些意想不到的问题吗?不敢确保吧,所以说呢,就会有这样一种现象啊,给大家解释一下,有些情况下,那我们的程序呢,会出现一些我们意想不到的问题,比如说他一个事物啊,拿到一个连接以后呢,他开始进行操作了,但是呢,诶这个事物呢,不知道出现了什么问题,就卡在中间,就不动,也不往后走。能明白吧,就卡到这个不动了,那么其实像这种情况下,你的程序就已经出问题了,好如果说这个问题你不解决的话,大家注意另外一个数物拿到连接进来以后,也卡到这不动了,再一个事物进来以后,来到这儿也卡到这不动了,再一个事物拿到连接来到这也卡到这不动了,就会发现什么呀,慢慢的你这个整个的这个程序呢,就会变得特别特别慢,然后呢,再往后呢,你就会发现别的用户已经连不上了,为什么连不上呢?因为这个连接呢已经没有了。
02:30
明白吧,而是呢,之前那些用户呢,他也什么成功不了,就一直在那卡着,明白吧,所以这种现象的话呢,我们在程序里面是有可能会发生的,所以说呢,我们这里来给他设置一下,设置一个什么超时属性,就什么意思啊,当你的事物,比如说诶从这走,走到这以后卡住了,对不对,呃,卡住以后呢,你不往后走了,那么我会在一定时间段内,那比如说你达到我这个设置的这个时间了,好,那我就强制性的让你这个事物回滚,你这个事物一回滚,那么其实我们的连接是不是释放出来了,能明白这个意思吧?OK,好,那么大家来想一想,你说我这个设置为多长时间比较合适啊。
03:15
分钟啊,多长时间比较合适啊?啊,注意了,其实这个是没有一个标准答案的啊,那么这个时间我们应该怎么去把它统计出来,或者这个算出来啊,哎,那么这个我们是需要怎么样?诶有一个合理的一个什么这个测试,然后得到一个结果的啊大概是怎么一个意思呢?给大家去简单说一下啊,就是我们没写好一个程序呢?啊就是我们分为这么几个阶段啊,第一个呢,肯定就是我们这个开发阶段了,是吧?啊跟我们相关的直接去开发就行了,那你开发好了以后,这东西直接就能用吗?不能用吧?啊你得经过什么呀测试对吧?啊,你得经过什么测试这个人员啊,他得过一遍把把关是吧,看看你这个问题,你这个程序有没有什么问题啊,那么在这个测试里面讲的话呢,我们就有一些什么基本的这个功能性的测试,对吧,还有一些什么呀,压力性的测试,知道什么叫压力测试吗?
04:16
知道吧,就是我来看看你这个程序到底能扛多少个用户,对吧?他们测试人员手里面就有这个赛程的工具,我可以同时模拟啊,几十号人,几百号人,甚至几几万号人同时发送请求来访问你这个程序,这叫做压力城市,那我就看一下,比如说1000号人直接过来以后,你这个程序能不能扛得住,或者说呢,在多长时间内你能把这1000个请求全部处理完?对吧,这叫做压力测试啊,然后呢,我们就可以什么,其实你在做一个程序之前,你就大概要预估一下我将来这个程序它这个呃,峰值的时候会有多少个人,对吧?你这个是要什么,经过一些市场调研,然后呢去预估的,明白这个意思吧,那比如说呢,我预估啊,就是有1万个人啊,就是一开始的话,我这个业务可能就有1万个人啊,峰值的时候会有1万个人存在,好那么我们在测试的时候就拿上这个1万个人,或者说呢,诶比跟他什么差不多的一个数字来进行一个测试。
05:13
啊,假如说诶,我撤出来了,这1万个人我是能扛得住的,并且呢,在三秒钟之内,这1万个请求我就全部都处理完成了,好,那么这个三就是你的超时设置,因为你正常情况下峰值的时候,其实人越多,我们相应的这个程序处理起来就会越慢一点,你并发太高了,能理解这个意思吧,哎,他们处理的会慢一点,也就意味着这三秒钟就是什么,在人最多的情况下,就是并发最高的时候,我三秒钟就能给你处理完了,那么正常情况下人越少,其实相应来讲处理起来是越快的,所以说这个三呢,也就是我们的一个超时时间了。如果说他超过了三了,那么他基本上都是出问题了。
06:00
明白吧,所以说我们一定要经过一个合理的测试啊,你不能随随便便去写这个数的,明白了吧,比方说你这个程序写的比较烂是吧,随便一个请求都需要五秒钟的处理,你就给他设置个山啊,你永远处理不了,业务师傅过来了,还没能执行的回滚了。对吧,这可能也是不合理的啊,所以说这个地方的话,我们就一定要经过一个什么相应的一个测试,然后呢,才能得到我们这个数值的,明白这个意思了吧,OK,就简单给大家去说一下啊,以后的话,大家可能也会接触到相关的一些东西啊呃,那么其实说到这的话呢,再来稍微给大家去这个扩展扩展啊,就是刚刚说到的这个,呃,一开始我们会预估一下,就是我当前比如说我要做一个什么电商是吧?啊,我会预估一下就是呃,我这个电商啊,就是业务初期,他这个峰值会有多少个人是吧?那么其实这个是很有必要的,你必须要经过一些什么调研对不对,然后呢,经过各种什么统计,然后呢,把这个人呢,先大概给他预估出来,为什么要去预估这个人呢?那是因为你在去做这个程序的时候,第一个你要去按照这个并发量来去写这个代码,另外一个呢,我们需要去啊做一些什么呀,服务器端的一些什么呀,这个这个配置。
07:13
能明白什么意思吗?比如说诶,1万个人啊,我需要十台服务器,哦,OK,那我就买十台服务器就行了,对吧?啊,那么比如说你假设说将来我这个电商可能会峰值达到什么,达到几十万人,那么你的十个服务器肯定是搞不定的,那你可能就需要50个服务器,那你想一想,我会在我这个业务初期,我就直接买50个服务器吗?万一我达不到这么多人了,你是不是浪费了对吧?所以说特别是对于这个创业型的公司来讲,他不可能一开始就买那么多服务器的,而是我先买一台先用着,对吧,不够用了以后呢,我再买一台,再加上是吧,再不够用了我再买一台,我再加上,能理解什么意思吧?所以说他不可能说任何一个程序不可能从一开始就设计的特别特别完美,它总是后续要进行什么各种优化的。
08:03
理解吧,所以说呢,这也就是为什么一个公司开发一个软件,然后要开发完了,怎么天天还在开发呀,是吧,你像那个淘宝京东这东西我们一直在用吧,对吧,但其实它这个东西天天都在开发。啊,对,这个东西可能已经趋于一个稳定,他在开发也是去加一些什么新的功能,或者是改一些组织架构什么的了,明白吧,但是像我们这个比较普通的一个程序来讲,你看到你正在用的这个版本,你在用的同时,那背后的那个开发人员已经在开发什么第二个版本了。对吧,他说这个一直这么去有就有一个这个更新迭代的一个过程,所以说呢,我们在项目初期的话呢,我们就不可能说一下把这个50个服务器都给他买回来,这也是这个压力很大的,你把你创业嘛,你也没有那么多钱,是不是啊,你一下子把50个服务器买回来了啊,发现没钱了,你咋办是不是啊,就出问题了,所以说呢,我们就是诶一个服务器能扛得住,我就不买俩,明白吧?啊比如说我这个用户量上来了,确实这个一个不行了,而且你能看到这个用户量一直在增加,对吧,那你就敢去买第二个第三个了。
09:08
听懂了吧,哎,然后呢,到最终你就会发现啊,如果说你这个项目确实这个推广的比较好,用的人比较多了,这个人是一直往上增加的,然后呢,你就会发现到某一个点的时候,你再买服务器不行了。已经不是这个硬件方面的问题了,就是你这个软件的架构方面的问题了,那么这个时候就要重新去改你的架构,然后呢,重新去做一个啊,特别这个呃,厉害的一个这个程序出来了。听懂了吧,但是呢,一开始的话呢,我们也会去按照这个,呃,就是尽可能的去把它做的更加的好一点,但是呢,一开始我们肯定是想不到各种各样的问题的。好吧,这就是一个开发的一个过程啊,其实相对来讲呢,还是比较麻烦一点的,对不对啊,就个大家可以了解一下就行了啊好吧,那这个时候呢,这个地方呢,给大家去解释下这个超时的这个设置啊,你大概知道一下就行了,呃,那么这个位置的话,我们简单给大演示一下,比如说呢啊,我让你的这个超时设置呢,就是三秒钟啊,它是以这个秒为单位的吧,我们来看一看啊,它应该是以这个秒为单位的啊,我们找找这个check out看看在哪,在这儿是吧?啊,看他那边有没有一个单位。
10:23
这里面没提到这个单位是吧?啊timeout default看一下啊30TIMEOUT default负一,负一的话就是没有超时设置是吧。啊,这里面没提到单位啊,我记得他应该是以这个秒为单位的啊OK,好,那我们就设置上这个三啊,那代表的就是什么呀,三秒钟吧,对吧,三秒钟,你超过了三秒钟,我就要给你什么强制回滚了,行,那我们就来演示一下,我让我这个方法一进来以后呢,我就先睡一觉,对吧,我们就是模拟一下出现了这个。卡死的这种状态吗?对吧,假死了是吧,你看了这个程序还能用,其实已经用不了了啊假死了,OK,那我就让他睡上五秒钟。
11:07
看到了吧,来我们加上这个,呃,拆开啊,把它捕捉一下这个异常,行,那我们来看,当我这个事物一开始的时候,本来它就有三秒钟的时间可以去操作,但是呢,我直接让你睡了五秒钟,那么肯定就要回滚了吧,对吧,所以现在你看我们来测试了啊,好,那我回到我这个。测试方法这个位置啊,来到这我就直接测这个方法就行了,我们来运行一下啊,大家稍等一下啊,他现在还在运行呢,看到没。OK,结束了,那结束了以后呢,我们就来看一下,它有一个异常,叫做什么事物已经什么超时的异常吧,对吧?来告诉你啊,什么事物已经什么time up超时了啊,在什么什么死的,你看到没有,具体的时间是都告诉你了,看明白了没有啊,这就是我们的一个什么超时的一个设置啊啊那那这个的话呢,代表什么?对它有一个什么,呃,了解就是呢,将来的话呢,我们是有必要把这个设置上的啊,有必要把这个设置上了,但是呢,这个数字啊,千万不要自己去写,听懂了吧,必须要经过什么哎,合理的测试,然后得出这个结果,我们才能去写的明白了吧,好行吧,那我把这个注释掉啊。
12:24
OK,这就是我们的第五个15的属性,叫做什么超时啊。
我来说两句