投票活动

之前做了一个外包项目,然后测试上线后踩过的坑:

投票统计两个字段:总人数和中票数,以及作品的总票数

1.因为甲方的要求第二天早上八点上线

因此在前一天在线下和测试环境中完成测试后,就等第二天早上八点运维直接上线了,然后在第二天上线后,突然收到通知,说是无法投票

 

原因:投票活动是redis记录服务器哪里拿到的用户ip来做刷屏限制的,所以正式服上,服务器配置问题,没有拿到用户的ip地址,所以每次请求都拿到的是docker地址,于是超过10次后,所有人都无法进行投票

 

临时解决方案:

做成cookie记录  弊端:用户可以通过请求cookie来刷屏,每次清楚后在去请求就会拿到新的key,然后增加了验证码,防止脚本刷票,当然这些都不并不能解决实际问题,只是增加了成本和避免了脚本

晚上:运维从新起了服务器,配置了下,可以拿到ip了,然后我们又把代码改成了原来的通过redis拿ip做限制

上线后:排行榜之前统计的数据不见了,原因是上线后,redis不知道为什么把redis里的数据清除了,导致线上的数据不见乐,又开始从先记录,

还好那边有数据抓取来做分析查看哪些作品在刷屏

然后就去把那边的数据拿过来了,填到redis里的key里了

当然这些所有的影响都是redis的数据,数据库里依然保留着没份方案的数据

随后上线后,第二天又出现了问题

 

问题:反馈说有时无法投票,然后我就去定位,发现4g有时能拿到ip有时拿不到ip

定位:查看redis里和数据量里记录的日志发现有时候服务器拿到的ip地址是docker的

结果:是因为有两台服务器做映射,然后具体的问题不是很清楚(对运维服务器之类,docker之类的东西知道的不是很多)

解决方法:运维重新去修改服务器配置

随后运行了一段时间都是正常

 

到了某一周周一然后又收到反馈,说排行榜里统计的数据清楚重新开始了

定位问题:查看redis里的数据发现数据被清楚了,然后统计数据库里的总票数已经达到了100w票

分析问题:作为测试的我,首先是去看了redis里的情况,然后其他开发说是不是因为redis设置的过期时间的问题,于是我又问了开发这个的开发,得到的信息时设置的60天,然后看redis ttl 发现还剩余很多时间

然后我根据这些信息,在根据以前对数据库的认知以及redis每次都会去记录获取的ip来限制每天每个ip只能投10,发现redis存了几十万的数据,然后根据数据库同理,每个数据库都会自带有最大内存占用的参数,然后询问开发有没有去设置这些参数,然后结果是没有,应该是默认的,由此猜测可能是因为redis的内存占用超过了最大数,redis可能会去清除数据,然后让开发去查下了redis的这方面知识,结果跟我的猜测不谋而合,redis是有这个功能的

因为redis是docker起的,不知道有没有做映射,运营也在查,还没有方案怎么去设置maxmemory的值

临时解决方案:把数据库里所有的投票数去统计写在redis里面,ip数因为是存在redis里的,所以清楚过后是无法统计到的,于是 把上次出现清楚状况的数据,加上后面加的访问ip的日志里的ip统计出来然后相加,在放到redis里面

后续解决方案:为了避免再出现这种状况,开发然后去数据库里做了两个总数字段,把redis里的两个总字段同步到数据库里面,然后设置了那个库里没有数据,就会互相同步,就算redis在清楚数据但是依然会同步过去,这样线上的数据就不会出现清0的数据,以前线上的数据是直接从redis里拿的,现在改成同步到数据库里的两个字段,从数据库的理去拿,但是还是累加的形式,redis判断有没有重复的ip,有的话就会在原有的数据上加1

测试:测试的过程中,询问了开发的解决方案,以至于根据有力的进行测试分析,然后得出结果,就时,虽然能避免线上数据清0,但是这样如果在清0会导致统计的ip数不准确,统计不到真实的ip数(人数)

原因:ip全是统计到redis里的,并且做了每天限制10次,请0后,redis没有原来统计的ip数,所以会默认为收到的所有ip数都是新增加人数,这样统计出来的数据是不准确的,其实这个数据在这次发生,以及不准确了,庆幸的是这个数据除了展示没有任何作用,并不会用于计算排名

问题已经发生了,这个问题是无法解决的,所以只能弥补,只能设置redis最大占用内存,防止再次自动清0

 

 

总结:在这一些用户量很大的项目时,其实涉及的内容和用大的东西也就越多,所以需要想到和测试的内容就越广,虽然功能是没有问题了,但是除了这些事故总是会带来不好的影响的,想要做优质的产品就应该避免任何会影响到结果的东西,所以单纯的依靠测试是不行的,开发也应该在该过程中更加的专业,测试也应该想到跟多的内容,所以优质的东西需要大家共同的努力,确实我们这边的项目太依赖测试了,导致测试的思想都集中在产品的功能上,因为功能小问题实在是太多了,所以要真的解放出来,还是需要避免这些小的功能问题,然后测试把跟多的时间花费在跟多其他因素上

posted @ 2019-11-11 16:00  whssup  阅读(154)  评论(0编辑  收藏  举报