面试精选

Redis 秒杀系统的设计与实现

2021-02-12  本文已影响0人  you的日常

还记得刚工作那会,每每听到大牛们聊技术,各种专业术语,巴拉巴拉的,简直像是在听天书,比如什么中间件、分布式、SOA、无状态、热更新、懒加载、ACID、LVS、LDAP、VIP、CDN、负载均衡、鲁棒性、POJO、DSL、DI、IOC,太多太多了。一转眼快 10 年过去了,当很多新人再问到我这些名词的时候,我就在想,能不能用通俗易懂的大白话,就能聊明白这些专业的技术知识呢?

最近,给几个公司做技术咨询,经常会聊到秒杀系统。所以,借这次机会,尝试用大白话和大家聊聊 Redis 秒杀系统的设计与实现,。

什么是秒杀

说起 “秒杀”,我相信大家肯定都耳熟能详了,双十一零点抢购、手机整点抢购、抢火车票、1 元秒杀、抢红包等等,都可以说是秒杀的各种应用场景了。

秒杀系统的设计,难就难在,在极短的时间内,应对瞬时涌入平时成百上千倍的巨大流量,还包括各种攻击刷量作弊等未知流量,最终我们要保证在用户体验顺畅良好的情况下,不能多卖或者少卖。

而当我们公司决定要做秒杀系统的时候,我就去找业务,到时大概会有多少 UV,不知道 10 倍或者 100 倍?然后去找老板,给技术多少预算,最多平时的 10 倍不能再多了,当然越少越好,呵呵,也就是说让我们用平时最多 10 倍的预算去解决不可预估的用户流量,怎么做?要是有钱直接扔 1 万台服务器跑去吧,钱能解决的事就不是事,但问题是现在还没那么多钱,还要把事情搞定。

秒杀系统有哪些特性

艺术,源于生活,又高于生活。

在聊秒杀系统设计之前,让我们先回到现实生活中,聊聊常见的“秒杀”场景和秒杀场景的独有特点,以及它们都是怎么应对的,在应对过程中都需要注意什么。

日常生活中,其实也有很多秒杀场景,比如,早上 9 点超市开门,老大爷老大妈抢购蔬菜水果,是不是? 还有,新楼盘开盘抢购,是不是? 股市开盘、交易所现场,是不是?

对的,生活中其实有太多类似场景了,你有没有发现“秒杀”的独有特点呢?

记住了上面三个特点,我们就可以区分和确定秒杀的业务场景了。 这里我举一个特别的例子, 你说挤公交车,算不算秒杀场景呢?

下面,我再和大家聊一个关于抢猪肉的故事。

抢购猪肉

有一天,新闻上说,由于一些原因导致猪肉价格连续上涨,某大型超市的经理知道后,决定第二天早上 9 点举行一次猪肉抢购活动,把库存的新鲜猪肉一次销售完。

谁知道,这个消息一传十,十传百,第二天早上天微微亮,就有很多人拥挤在超市门口,而且是越来越多,估计可能会是平时的几十倍不止。

由于大家一开始没有排好队,经理非常担心人员安全,所以叫来保安大队长说:“一定要负责好现场的秩序,如果出现人员安全问题,拿你是问!”

这个时候,如果是你,你会怎么安排呢?

在保安部门充分讨论之后,保安大队长决定通过以下安排,在保证人员安全的前提下,还要做到相对公平。

  1. 将现场的所有已经到的人,通过警戒线先区分开来,然后随机分成十个组,每组人员通过抓阄的方式,排好队。
  2. 没在警戒线里面的人,也就是后面来的人,通过先来后到原则,依次排好队。
  3. 然后,十个组里每个组里依次出来一个人,这十个人再通过抓阄方式,再排好队,依次进入超市选购猪肉。
  4. 如果警戒线里面的人都买了猪肉,超市还没卖完,再让警戒线外面的人,每次 10 个,依次匀速进入超市买肉,每次进入超市后间隔一小段时间。
  5. 如此直到猪肉销售完成,活动宣布结束。

后来,活动井然有序的开始了,但是由于猪肉销售场地太远,销售窗口又少,老大爷和老大妈们买肉又精挑细选,导致整个过程很漫长,而且外面等候的人们都开始骚动起来,这个时候保安大队长赶紧找到经理:

  1. 申请临时增加猪肉销售窗口。
  2. 将销售猪肉场地搬到超市入口的空地上。
  3. 每次安排 20 个人进入去买肉。
  4. 开设绿色通道,不用排队,不用进超市,只要下单填好住址,并扫码支付后,就可以离开,然后超市会安排人员免费送货上门。
  5. 推迟非抢购猪肉的用户进入超市的时间。

秒杀系统设计原则

故事讲完了,如果我们把上面的故事,理解为秒杀业务场景,我们就可以总结出一个秒杀系统的设计原则了:

上一篇下一篇

猜你喜欢

热点阅读