美文网首页面试精选
Redis 秒杀系统的设计与实现

Redis 秒杀系统的设计与实现

作者: you的日常 | 来源:发表于2021-02-12 20:05 被阅读0次

    还记得刚工作那会,每每听到大牛们聊技术,各种专业术语,巴拉巴拉的,简直像是在听天书,比如什么中间件、分布式、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. 推迟非抢购猪肉的用户进入超市的时间。

    秒杀系统设计原则

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

    相关文章

      网友评论

        本文标题:Redis 秒杀系统的设计与实现

        本文链接:https://www.haomeiwen.com/subject/acwubktx.html