zoukankan      html  css  js  c++  java
  • 投票活动

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

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

    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

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

  • 相关阅读:
    装饰模式Decorator
    File类
    进程之基础
    IO流
    反射之基础
    20155219 题目补做
    2017-2018-1 20155219 《信息安全系统设计基础》实验三——实时系统
    2017-2018-1 20155219 《信息安全系统设计基础》第九周学习总结
    20155219--pwd指令的简单实现
    2017-2018-1 20155219 《信息安全系统设计基础》第8周学习总结
  • 原文地址:https://www.cnblogs.com/ceshizhilu/p/11835827.html
Copyright © 2011-2022 走看看