一个小小变化的效果

今天是双11,本想来公司凑凑热闹…^^
结果主要问题都是在我的服务里,还把登录给整瘫了半个多小时…ㅠㅠ

高峰过去了,可以松口气了~ 抽个时间写写博文。

这次我想共享我们公司一个部门遇到的事情。

那天我正在为拆分服务的问题而苦恼着。
(本来是一个的服务拆分成4个服务,问题巨多…ㅠㅠ)

有位同事(韩国人)跟我说,看到了一些不太正常的请求。 希望我帮他和相关负责人沟通。(我是朝鲜族,有时候会帮他们沟通)。
在沟通的过程当中,我感觉到这是一个很有趣的问题。

◆ 为什么会有这么多的请求?

先简单的说一下业务吧。
线上(天猫商城)出售一笔商品,线下的卖场会把这个单子抢过来,自行给购物者发货。
全国各地的卖场会积极的抢线上出售过的单子,因为每抢到一笔单子,他们就有提成赚。
所以比较勤奋的卖场人员只要店里没有顾客的话就会不停的刷单。
(不停的给服务器发Request请求,看看有没有可抢的单子。)

有些喜欢思考的人就会问,那不能做成推单吗?
这样就没有这种查询的压力了。为什么不那么做的种种原因这里就不做解释了。

那问题是什么呢?其实就是请求量异常的的多。
在我们不怎么注意的情况下,Request请求量1个月内翻了6倍!
不可能吧?当时是9~10月份。又不是双11,又不是做了什么活动…
卖场数量没什么太多的变化,这请求数量怎么会上升的这么快?

◆ 原来是有人用脚本刷单啊?

我们赶紧查看了一下日志,发现有几个卖场的请求比较异常。
1个卖场1天内请求量居然达到了10万次。
1秒一次也是刷20个小时也只能刷7.2万次。10万次太夸张了吧?
而且我们在前端做了限制3秒才能刷一次。

问题应该明确了,这几家卖场肯定是在用脚本刷单。
而且是有写计算机基础的人获取后台api的url刷单。

◆ 好像不对?日志证明不了有人用脚本刷单

但是我们看了前一天的日志,傻眼了。
请求量最高的卖场不停的变。
这就不能证明这些卖场人员是用脚本刷单了。
用脚本刷单的卖场,应该是每天都会刷单吧? 而且请求量最高的卖场分布在全国各地区,
今天是这家卖场,明天又是另一家卖场….ㅠㅠ

我们开始怀疑我们的程序有问题了。
前端是不是有bug在特定的情况下会不停的发请求?
企业微信是不是有我们不知道的bug? (我的的应用是嵌套到企业微信的。) 开始争辩:
项目的负责人说我们的程序绝不会有这样的问题。
我们反问你怎么证明你的程序是没问题?
如果是企业微信的问题,我们怎么证明这是企业微信的问题?

◆ 虽然不知道怎么办,但是我们可以做一些改变

争论一番后,大家都累了。不知道怎么解决这件事情。
大家你看我,我看你~ 都等着别人出方案…^^;;

这怎么办啊?联系了卖场,卖场负责人说我们这里没有异常~ 也不承认自己用了什么脚本。
(这举动很傻,如果我是卖场人员,即使用了我也不会承认自己用了脚本刷单。)

这时候我们发现这个api没有做身份验证。我们提议要不要做身份验证? (至于为什么不做身份验证,好不专业之类的评价我不做解释了~)

这是一个比较古老的api,而且过些日子会有新的api代替他的。
所以相关的负责人是不怎么希望动这套代码。
而且做身份验证是解决不了这个古怪的现象的。

最后我们决定加身份验证看看,当时大部分的人都认为做身份验证没什么用。
没事找事,这老代码改动后,万一报错怎么办? 虽然我们不知道有什么效果,或是给我们带来什么?
总比什么都不做强吧?

◆ 加了身份验证没什么效果啊?

添加身份验证功能以后,早上我们紧急发布了新版本。
看了日志,我们失算了~ 没效果…ㅠㅠ 没有报我们想看的401验证失败的错误, 而且又是别的几家卖场刷单刷的特别厉害。 NND 这问题怎么解决啊?

当我们迷茫的时候,第二天有转机了…^^
有一家卖场从下午开始刷单,都在报401的错误。 而且是直到第二天有8万次左右的请求都是在报401的错误。

嘿嘿,我们就是想要看这个效果~
我们可以猜测,这家卖场很有可能是用脚本直接刷单的,
因为过了这么长时间,用系统正常的方式调用是不会出现401的验证失败。
及时前端有bug,不停的调用也是不会出现身份验证失败的。
(前端调用肯定会有token, 而且我们token的有效期是15个小时。失效了得从新登陆)
那些异常的请求是不知道我们加了身份验证,所以用以前的方式刷了一晚上的单都在报错。 可以确定不是我们前端发出的正常的请求。

◆ 做了限制,人家有应对方法?

这就好办了~ 我们可以放心的对api的请求做限制,每个用户10秒只能调用10次请求。
超过这个次数的话我们直接抛异常,提示稍微休息一会…^^

有趣的现象发生了~
仅过了一天~ 日志上很多卖场都是1分钟发60次的抢单请求。
NND 这不是用脚本刷单吗?

◆ 原来是按键精灵~

我们再次做了调整20秒只能调用10次请求。
因为我们前端限制是3秒刷新一次,所以其实这么改也应该不会有问题。

哈哈~ 日志显示很多卖场是1分钟平均30次请求。
NND 这肯定是脚本刷单。

这期间居然有个卖场联系了我们(刷单可疑卖场),他们说抢单查询总有提示休息。
于是我们用视频连接看了他们操作的情况。
这些卖场人员真厉害,我们做的3秒限制居然还可以破解?
太感谢了,赶紧处理一下。

重点不是在这里,因为即使用这种方法,1天刷8万次是不可能的。 我们编了个理由看了一下人家的手机界面。
按键精灵!!

原来如此~ 所有的谜题都有答案了~

原来是用按键精灵,所以当我们加身份验证也是,他们是可以正常的刷单。
后来我们猜测卖场人员是相互有联系的。这东西被共享了~
有些人用按键精灵,有些人脚本刷单,有些人用我们不知道的东西刷单…^^;;

没想到问题居然这么严重?之后怎么做处理是部门负责人要做的事情了。
我在这里就不做更多的讨论了。

◆ 总结

我们会遇到一些问题或困难,会让我们迷茫,不知所措。
这时候后我们不妨试一试小小的尝试性的改动,或是来点小小的变化?
我们可以依据这些行动带来的效果和经验,可以做下一个行动的计划。
虽然我们不知道这么做是对,还是错。
但是这些改变或行动很有可能是这个问题的突破口。

打个比方,你想挖一个井。
不知道在哪里挖。没人告诉你~ 该怎么办? 你可以找个地方先挖一点看看,你可以总结一些经验。
根据那个经验再挖别的地方,你又可以总结一些经验。
根据那个经验………………
最后你有很多很多总结经验,可以挖到一个比较好的井。

不知这个例子举得好不好,有些人说这是什么傻傻笨笨的方法?
但是总比你什么都不做,干等着别人教你强吧?
万一没有人教你呢?你是负责人连你都不知道的问题,还有谁会过来教你?

当遇到一些问题让你迷惑,不知所措的的时候:
不妨试一试做一些尝试性的的行动或做一些变化。
根据这件事情的结果或经验再做下一步的打算?
久而久之你会发现你已经解决这个问题了。


欢迎大家的意见和交流

email: li_mingxie@163.com