在很久以前,就与别人聊过抢购的设计。
一般抢购的第一步是控制抢购的开始时间,只有到达指定时间后,抢购业务才能正常进行。有以下方式可以实现:
1.通过Redis或数据库,或zk共享变量
2.通过计时实现(每次访问对比系统时间)
3.通过消息中间件,加本地变量实现
我今天坐公交车,突然想,这些不与业务相关的控制可以交给上游网关去做。
在未到达抢购时间之前,前端只访问计时服务器,提供业务负载的ngix不进行路由。
已到达抢购时间,nginx更改配置,正常负载到业务服务实例。
需要在服务端执行一个定时任务,在到达抢购时间时,reload配置文件。
当然,这样的方案也有些风险性,如果我计时服务器与我ngix的时间不统一,或者几个ngix做负载时也可能出现意外,可以把reload提前一秒执行。