关于秒杀:抢购业务的技术方案
总体架构计划网络拦挡: DNS优化, SLB负载平衡,网关封IP限速 业务拦挡: ID限速, 验证码, 只排汇后面N个申请,前面的全回绝; Redis拦挡: 库存不超发,保障限购 接口拦挡: 尽量减少业务查看,判断黑名单 MQ+MYSQL: 异步解决落库状况; Redis List计划 + Incrby计划从缓存读取出流动信息判断流动开始工夫和完结工夫redis内无库存就间接返回无库存,流动完结读取 UID+流动ID的 参加次数 达到限度就返回限度应用Incrby 写入 UID+流动ID的 参加次数,判断返回的次数是否超过限购次数,超过则返回限度写入DB(或者用MQ推送给DB削峰落库)第四点尽管redis是单线程的,然而客户端是多个的,所以第四点的读取和第五点的应用,两个不能同时具备原子性, 必须以 incrby后果为准; 比方一人限购一个,就算某用户第二个申请进来了,把 UID+流动ID 的值 incrby 为2 ,那么这个人返回的也是 “一人只能够购买一个”,对于业务无损; 如果呈现Redis解体或者Mysql解体等异常情况,期待服务复原后, 能够间接从DB外面的购买记录和库存信息简略同步到redis外面,无需开发人员进行过多操作 Redis List计划反对库存编号模型,如果所有的SKU自身无编号意义或者发货才确定库存,能够应用 Incrby管制库存 + Incrby 管制集体限购数量