00:01
各位同学大家好,我们继续来演示秒杀的案例,刚才呢,咱们把秒杀案例的过程已经完成了,并且咱们模拟出这个效果,但是刚才的模拟效果过程中有这么一个问题,因为我只是自己操作,所以没法模拟出并发的效果来,实际中的秒杀肯定都是并发操作,所以下面呢,给各位用一个工具再来模拟一下,就是多请求加并发的一个效果,然后咱们演示出我们这个程序中里边的几个问题。那这个并发这个问题我们该怎么去模拟呢?大家看一下啊,咱们用一个工具叫AB工具,这是第六中的一个工具,用它在模拟出我们这个多请求,包括并发的效果,那这个工具我们要用的话呢,首先需要做安装,如果你用的是散OS6,它默认已经装过了,我们现在用的是SANDS7,所以咱们需要手动做安装,安装的话很简单,因为这东西很小,如果你是无网络,那找到你的安装那个就是戒指去安装,因为咱们现在大部分都是有网,所以咱直接通过yam in install把这个装上就可以了,那我现在给他就来安装一下。
01:15
那我来操作一下啊,首先我把这个,呃,咱们再打开一个新的一个客户端链接在里边,我们用这个样及安装。亚母因死斗。HTTPD叫这个。Tos,这是我们要装的这么一个内容,Htcd POS,然后咱们回车。现在他就会联网去下载这个AB的这么一个测试工具,用它能模多个HP请求,包括并发的效果,这里边我们输入Y默认安装。咱们这里边大家看目前就已经安装完成了,这就一个AB测试工具安装,安装之后呢,我们可以看一下啊,怎么看呢,咱们来一个AB杠杠。
02:04
Help,然后看一下它的一个帮助的信息,就是告诉我们这个AB,这个命令或者这个工具该怎么进行使用,然后大家看啊里边做法这里告诉我们很清楚,AB加上里面的参数,后面加上你请求到路径可以了,然后这个参数下面有很多,咱们来看一下啊,里面有很多,给各位介绍几个主要的,首先第一个参数我们叫杠N,叫request,杠N什么意思呢?它就表示啊你当前的请求次数,比如我们当前请求1000次,当前请求1万次等等,这个叫杠N,表示请求次数,然后里边还有一个叫杠C,你看这个啊,叫current,杠C什么意思,它就表示当前你的并发次数。比如说你看我这个例子啊,杠N是1000,杠C100,它就表示我们1000个请求中有100个式并发操作,就是同时进行某一个操作,所以这是里边的两参数,然后除了这个参数之外,咱再往下看啊,下面还有一个参数,我们看里边的就是这个参数,它叫做杠T。
03:15
也就是里边的这个位置,杠T什么意思呢?这里写的很清楚啊,如果说你用的是post或者put方式提交,那这个时候需要设置一个叫content type,就是你提交那个数据,那个类型,类型设置成这个值,这个叫杠T,这需要我们知道,因为一会儿我们要用到这个内容,然后除了杠T之外,在里边还有一个参数,它叫杠T,就是里边的这个地方叫POS file,比如说你现在要用POS提交,里边有参数,那你把参数就要放到这个post file,其实就是放到一个文件中,然后这里告诉我们,你在提交参数中还要设这个杠T,就刚才说的这么一个。
04:00
Content type这个类型,所以这是里边重要的四个参数,我再重复一遍,第一个杠N,你的请求的这么一个数量,第二个杠C指的是请物中的并发数量,第三个这个叫杠P,是你提交那个参数,针对是POS提交杠P表示你那个参数的类型,就是content type。所以这是关于AB的一个基位使用,那咱下面呢,按照格式,咱把这个请求给他写一下,然后最终在里边我们给他做这么一个测试,那咱来写一下啊,比如说这里边我就写到我们的这个位置啊,在里边写一下。首先按照格式啊,第一个我们肯定叫AB,然后AB后面呢,加上一个叫杠N,杠N后面加上你的请求的这么一个数量,比如说我们是1000,然后1000之后我们再来一个叫杠C,指的是你的并发数量,比如我们是100啊,所以这是一个值,然后后面加一个叫杠P,杠P后面呢,加上你那个就是提交参数,这个参数呢,咱们需要建一个文件,那这个文件比如说我在里边我来创建一个啊,我就在当前目录中直接创建了,我们叫post。
05:18
Five。然后在post file中呢,写上你的参数,因为咱的参数叫这个product ID,我们等于这个0101,所以我把这值给它直接拿过来,拿过来之后后面需要加上一个an的符号,因为你可能会有其他值,所以这是写的这么一个参数部分。咱给它保存退出。这样的话,把这个就写出来了,然后写完之后在杠P后面就加上你这个参数就可以了啊,但是这里边呢,因为我们在word中写的话,它这个格式啊,可能会有些小问题,咱为了更明显,我给他写到就是我们一个。T文件中在这里边,那你来编写啊,那里边比如重新写一下啊,第一个AB。
06:05
杠N加上1000,表示咱们有1000个请求,然后杠C加上100,表示有100个并发加上一个叫杠P加上你那个就是POS file这个文件,那这个文件呢,因为咱们是在我的当前目录中,最后加上我当前目录啊,就是一个。波浪线,然后叫post file,这个加上之后还是要来个参数叫杠T,杠T后面就是你那个content type,比如你的这个类型,这content type这个类型这个值呢,不需要各位去写,因为你很容易写错,咱们到表单里面找到就这个。就是它的这个ec typeb值,把这部分给它拿过来,然后洗完之后还有最后一部分,最后一部分呢,就是你请求那个路径,就是咱们那个请那个那个路径,那这路径我们来写一下啊,各位注意啊,这个路径呢,其实就是这个路径,但是这个路径呢,你不能这么写,你前面要加上你的值,这个值注意一下啊,因为我们的AB的工具是不是在我的虚拟机中,而我要写的话,咱们肯定不能写这个local house,要加上你当前你的Windows系统那个IP地址。
07:23
我说各位是不是能听懂啊,你不能加六号的,要不他绑不到,所以我加上我这个就是IP地址。那我们来看一下啊,首先把名字先写一下,就这个do seek。Q,啊,这个先给他拿过来。然后这里边加上我当前这个主机的IP地址,我写一下啊,应该是幺九二点幺六八点,咱们看一下啊,我打开我当前这个Windows的CD窗口,然后用一个简单命令IP con,我们来找一下啊,应该是2.115,那我来写一下就是。
08:02
二点。115后面加上我里边那个就是端口号8081啊,包括咱们可以试一下看能不能访问到啊,192.168.2.115。咱看里边啊,这里边通过这个IP,我们来做个访问,应该是访问到我们里边的这个地址中来,咱看一下啊。我们等他访问,包括咱们在这个就是linu系统中呢,可以给他P一下这个命令,看能不能给他聘通192.16 8.2.115,应该是这个啊,咱看这里边应该能品读,就表示它目前是能正常访问啊,包括这里边应该也可以访问到啊,这个啊是我们写的地址,所以现在咱们把这个格式就写完了,咱们再检查一遍啊,看有什么遗漏,AB-N加上请求的这个数量杠C并发数量杠P加上这个port five,咱们在这个当前路径下,杠P加上content type,然后最后申请用那个地址。
09:09
那这个应该就正确了啊,这应该没有什么问题。然后这个没有问题之后呢,咱就把它最终给他执行一下,看一下我们最终的效果怎么样啊,咱给他就执行下啊。这个我给他就是。复制一下,然后来到我们这里边,咱们给他最终。执行下,那我在里边直接复制你看啊,这个值现在我给它做回车,然后在过程中呢,咱也可以观察里面这个地方它的变化,但是在经营之前呢,咱需要把RA是不是先设置一下,因为里面有些值咱没有设到,然后设置一下啊,比如咱们现在这么来做,首先比如说我先给他,呃,把这个就是用户这个内容给他清空一下。是这个。SK0101U色这个先给它删掉,因为这个用户一会儿咱们要重新进行添加,另外就是里面这个库存数量给它变成就是十,让它有十个库存。
10:15
这个给它复制过来。然后这个值变成十,咱们可以再看一下,看一下这个库存数量目前是不是,所以目前这值应该都有了,然后值都有之后,下面咱就做一个最终的测试,看一下它的效果是怎么样的,然后现在我把它回车。大家看结果啊,你看啊,这里边马上就完成了,然后完成之后里边有一些信息,比如你看啊,这里边就是完成了100个请求,200个,300个,最终一共完成了1000个请求,而在1000中终一共有100个并发,包括在这过程中,你看啊,他最终这些请求一共花了就是这么多毫秒时间啊,就是。
11:01
1319毫秒完成了所有的请求,所以这是我们用AB这种工具模拟的一个并发效果,然后模拟之后咱们到这里边看一下这个控制台的中的输出的部分,我们看下这个特点啊,大家看啊里边特点,你看这里提示说秒杀成功了,秒杀结束了,成功了,我说各位是否看到问题啊,我都已经结束了,是不是又成功了,所以这里边就是因为这个并发而产生的问题,你看里边啊,这里边已经结束了,但是在结束之后,它后面又提示有的又是成功了,比如你看这里边是又成功了等等不同的情况,那这个呢,这么看可能不是特别明显,咱们通过RA中的数据,我们来看一下啊,首先我们看一下。里边。咱先看这个这里边。是不是有这值,然后咱们看一下这个库存的这个数量,大家看库存多少,是不是变成了负三,有库存不能有负三吧,如果它小于一是不是就没了,不能再秒杀了,但是目前因为你在并发情况下,它就出现了负三。
12:15
所以这个啊是我们目前演出来一个问题,就在并发情况下,咱的程序是有问题的,它不能解决并发问题,并发中会造成你这个商品已经没了,但是还会造成秒号成功,最终会出现你的值出现了负值,这是我们演示的一种情况,然后这里边呢,比如说我们在进一步演示啊,假如我现在这么做,我把这个请求数量呢,加下换成2000。然后这个并发呢,咱们给它换成200给他加一下,看一下它会出现什么新的问题啊,咱们也是给他。试一下。然后现在把这个我到里边再定一下啊,咱们还是啊,把这个值先给它。处理一下,先删除一下这个用户,然后把这个就是库存的这个数量。
13:05
还是变成十,然后咱们再看一下库存的数量,目前是不是十,然后现在到里边我们再来执行一下。目前呢,我们是有这个2000个请求。200个并发。然后现在咱们给他飞车,咱们看一下里边的最终结果啊,看他目前怎么样,就是目前2000个请求呢,一共花费了2196毫秒啊,包括里边就是各种的基本信息,然后咱们到这里边看一下啊,你看这过程中,它里边就出现了啊,就是这么一个情况,但是这里边呢,其实我们在多并发场景中呢,可能会出现一个问题,这问题呢,不一定能模拟出来,因为它问题就是存在的,那我再模拟几次啊,如果实在不出来,给大家来说明一下这问题是什么啊,咱再模拟一次啊,那我们再试一下啊。
14:01
首先我还是先做处理一下啊,咱们还是。就这个值啊,目前还是刚才那个问题,比如现在我先把那个用户这个T里面内容先删掉,然后把这个值还给它,再改成十啊,包括咱们再查看一下SK0101冒号。QT目前值是十,然后现在到里边呢,咱把这个并发再给他加一下啊,看这效果能不能模拟出来,如果实在出不来,给大家说明一下会有什么问题,就是现在比如说咱们请求还是2000,并发变成300,后面不变还是请求我们这个地址,然后现在呢,我把它回车,咱们看目前会有什么样的情况。啊,包括这个啊,我先给他就是清除掉。现在把这个我们再执行下。然后咱们看啊,就是目前应该还是刚才问题啊,就这个啊,它有一个随机概率问题啊,没定模拟出来,那说一下这过程中可能会产生什么问题,给大家来说明一下啊,包括各位也可以多试几次,但是问题可能出现不了,因为咱是模拟这个过什么什么问题呢?大家注意啊,就是这个过程中,如果说我们在模拟出来的话,出现一个叫什么叫做连接。
15:19
超时的问题,什么叫连接超时呢?大家注意啊,咱们现在要每个操作是不是要连接我们这个ready。不要连接它要,而我们目前咱是不是有2000个请求啊,那你注意啊,2000个请求我瑞能同时去处理2000个请求吗?是不是肯定不能处理,而两请求中,比如说有些请求不能处理,那他怎么样,是不是要等待呀,比如他等待时间过长的话,那最终还没有连上会怎么样,是不是报一个叫连接超时问题啊,所以这过程中好像有一个连接超问题,因为你这边意不能同时处理更多的请求,如果你请求一直等待,会出现一个连接超时的问题。
16:05
这个是我们说明的一个问题,所以各位知道啊,比如说咱们目前呢,通过AB工具给各位主要出现了两问题,第一问题就是这里边呢,明明我这个商品已经秒杀完成了,但是它里边还提示我秒杀成功,然后第二个就是这个连接它的问题,就这个商品就是我们这里边明明已经完成了,但是还会成功,这个问题有一个描述叫做超卖问题,比如说你这个东西已经没了,但我还买到了,叫超卖,然后第二个就是我们这个连接它问题,所以现在咱通过AB工具就演示出来了这么两个问题,各位把这给它知道,然后这个问题眼之后呢,下面给大家就来说明这两问题咱们到底该怎么去解决,那咱们马上来讲解它的解决方式。
我来说两句