就一个静态页面

周二晚上邮件收到一个需求:下周有个活动页面,就一个静态页面。打开设计稿一看,一个秒杀活动页面,与设计对了一下,发现有个动画要做。之后需求方描述了一遍:倒计时结束,按钮可点,跳转到订单页面。后来,开发一对需求,发现秒杀后面的很多逻辑都没考虑:

  1. 时间同步问题
  2. 验证码问题
  3. 订单有效期
  4. 是否影响正常售卖
  5. 其它业务逻辑问题…

就目前情况考虑,参与活动的人并不多,而且事急从权,可以简单处理。

  1. 时间就先取服务器时间。

  2. 验证码,先找个 npm 包 ccap,随机生成一段文本和对应的图片。服务器端在返回验证码图片时,将原文本保存在 session 中。创建订单时检测验证码与 session 中的信息是否匹配。那么问题来了,我们的服务器肯定不止一台,session 是怎么同步的?看看 session 模块好像没有这些逻辑啊,最后 session 是使用了 tair 同步 session。验证通过之后,应该清除 session 中的 验证码信息。如果验证请求是同时发出的,读取 session 内容比较,肯定都是通过的,这就有问题了。也就是说,读 与 清 必须是一起的。这就得用锁了,读取的时候加锁,完成后,释放锁。
    做完这些,验证码这块还留有问题,上面提的那个 ccap 包,每次重新创建图片的方式肯定太慢,最好是提前生成一批,定期更换。

  3. 订单有效期的问题:后端需要一个任务定时检查订单是否过期释放库存。

  4. 正常售卖最好与秒杀分开,就算秒杀出什么问题,也不影响正常售卖。

实际的秒杀活动中,为了减少服务器压力,在请求的最开始就直接随机拒掉一批请求了。所以,手黑是有原因的。

这就是需求方说的:就一个静态页面。

评论