首页 > 其他分享 >[系统设计]秒杀系统

[系统设计]秒杀系统

时间:2024-08-02 16:08:36浏览次数:9  
标签:数据 系统 Redis 限流 秒杀 设计 热点

如何设计一个秒杀系统?

设计秒杀系统之前,我们首先需要对秒杀系统有一个清晰的认识。
秒杀系统主要为商品(往往是爆款商品)秒杀活动提供支持,这个秒杀活动会限制商品的个数以及秒杀持续时间。
为什么秒杀系统的设计是一个难点呢? 是因为它的业务复杂么? 当然不是!
秒杀系统的业务逻辑非常简单,一般就是下订单减库存,难点在于我们如何保障秒杀能够顺利进行。
秒杀开始的时候,会有大量用户同时参与进来,因此秒杀系统一定要满足 高并发 和 高性能 。
为了保证秒杀整个流程的顺利进行,整个秒杀系统必须要满足 高可用 。
除此之外,由于商品的库存有限,在面对大量订单的情况下,一定不能超卖,我们还需要保证 一致性 。
很多小伙伴可能不太了解当代三高互联网架构:高并发、高性能、高可用。

我这里简单解释一下:高并发简单来说就是能够同时处理很多用户请求。高性能简单来说就是处理用户的请求速度要快。高可用简单来说就是我们的系统要在趋近 100% 的时间内都能正确提供服务。
知道了秒杀系统的特点之后,我们站在技术层面来思考一下:“设计秒杀系统的过程中需要重点关注哪些问题”。
参与秒杀的商品属于热点数据,我们该如何处理热点数据?
商品的库存有限,在面对大量订单的情况下,如何解决超卖的问题?
如果系统用了消息队列,如何保证消息队列不丢失消息?
如何保证秒杀系统的高可用?
如何对项目进行压测?有哪些工具?
......
好的,废话不多说!正式开始!
高性能
热点数据处理
何为热点数据? 热点数据指的就是某一时间段内被大量访问的数据,比如爆款商品的数据、新闻热点。
为什么要关注热点数据? 热点数据可能仅仅占据系统所有数据的 0.1% ,但是其访问量可能是比其他所有数据之和还要多。不重点处理热点数据,势必会给系统资源消耗带来严峻的挑战。
热点数据的分类? 根据热点数据的特点,我们通常将其分为两类:
静态热点数据 :可以提前预测到的热点数据比如要秒杀的商品。
动态热点数据 : 不能够提前预测到的热点数据,需要通过一些手段动态检测系统运行情况产生。
另外,处理热点数据的问题的关键就在于 我们如何找到这些热点数据(或者说热 key),然后将它们存在 jvm 内存里。 对于并发量非常一般的系统直接将热点数据存放进缓存比如 Redis 中就可以了,不过像淘宝、京东这种级别的并发量,如果把某些热点数据放在 Redis 中,直接可能就将整个 Redis 集群给干掉了。
如何检测热点数据?
我了解到的是市面上也有一些类似的中间件,比如京东零售的 hotkey 就是一款专门用于检测热点数据的中间件,它可以毫秒级探测热点数据,毫秒级推送至服务器集群内存。相关阅读:京东毫秒级热 key 探测框架设计与实践,已完美支撑 618 大促 。
另外,我们平时使用 Redis 做缓存比较多,关于如何快速定位 Redis 热点数据,可以看下如何快速定位 Redis 热 key这篇文章。
如何处理热点数据? 热点数据一定要放在缓存中,并且最好可以写入到 jvm 内存一份(多级缓存),并设置个过期时间。需要注意写入到 jvm 的热点数据不宜过多,避免内存占用过大,一定要设置到淘汰策略。
为什么还要放在 jvm 内存一份? 因为放在 jvm 内存中的数据访问速度是最快的,不存在什么网络开销。
静态资源处理
秒杀页面可能涉及到很多静态资源比如商品图片、CSS、JS。秒杀开始之前以及进行中的时候,会有大量的用户点开页面,有的用户还会不断的刷新秒杀界面。如果这些界面中的静态资源全部通过服务器获取,会造成大量的带宽消耗,甚至造成秒杀还没开始服务器就崩了。
对于这些静态资源,我们可以使用 CDN 进行处理,这是业内目前比较成熟的解决方案。
CDN 全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是内容分发网络 。CDN 的作用是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。
你可以将 CDN 看作是服务上一层的特殊缓存服务,分布在全国各地,主要用来处理静态资源的请求。
基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。
高可用
集群化
如果我们想要保证系统中某一个组件的高可用,往往需要搭建集群来避免单点风险,比如说 Nginx 集群、Kafka 集群、Redis 集群。
我们拿 Redis 来举例说明。如果我们需要保证 Redis 高可用的话,该怎么做呢?
你直接通过 Redis replication(异步复制) 搞个一主(master)多从(slave)来提高可用性和读吞吐量,slave 的多少取决于你的读吞吐量。
这样的方式有一个问题:一旦 master 宕机,slave 晋升成 master,同时需要修改应用方的主节点地址,还需要命令所有从节点去复制新的主节点,整个过程需要人工干预。
不过,这个问题我们可以通过 Sentinel(哨兵) 来解决。Redis Sentinel 是 Redis 官方推荐的高可用性(HA)解决方案。
Sentinel 是 Redis 的一种运行模式 ,它主要的作用就是对 Redis 运行节点进行监控。当 master 节点出现故障的时候, Sentinel 会帮助我们实现故障转移,确保整个 Redis 系统的可用性。整个过程完全自动,不需要人工介入!
Sentinel 也是一个 Redis 进程,只是不对外提供读写服务,通常哨兵要配置成单数。
限流
限流是秒杀业务最常用的一个手段,所以经常你一参加秒杀就会提示“当前人数过多,请稍后再试”。
接口限流
限流是从用户访问压力的角度来考虑如何应对系统故障。接口限流是为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。

标签:数据,系统,Redis,限流,秒杀,设计,热点
From: https://www.cnblogs.com/DCFV/p/18338953

相关文章

  • 达梦数据库系列—45.系统存储过程总结
    目录参数数据库表执行计划会话备份恢复数据守护归档日志SQLLOG统计信息参数查询数值类型参数值--语法格式:selectSF_GET_PARA_VALUE(scopeint,paranamevarchar(256));--SCOPE参数为1表示获取INI文件中配置参数的值--SCOPE参数为2表示获取内存中......
  • 【C++】学习笔记——特殊类的设计
    文章目录二十二、特殊类的设计1.请设计一个类,不能被拷贝2.请设计一个类,只能在堆上创建对象3.请设计一个类,只能在栈上创建对象4.请设计一个类,不能被继承5.请设计一个类,只能创建一个对象(单例模式)未完待续二十二、特殊类的设计1.请设计一个类,不能被拷贝拷贝......
  • 【C++庖丁解牛】C++特殊类设计 | 单例模式
    ......
  • 基于tp8框架开发野兔广告联盟系统源码定制
    这款程序是采用国内主流的PHP框架,最新版本thinkphp8.0.4,也是目前市面上功能相对比较强大,界面比较好看的一款全开源的广告联盟系统,程序支持任意二开商业,并且代码无任何加密处理。程序开发:PHP+MySQL ,PHP最低版本是PHP8.0程序开源:100%开源程序授权:无,支持任意二开商用主要功能模......
  • 无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用
    无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升1.简介MaxKB(MaxKnowledgeBase)是一款基于LLM大语言模型的开源知识库问答系统,飞致云是中国领先的开源软件公司。飞致云旗下开源产品包括1Panel开源面板、JumpServer开源......
  • SSM餐饮管理系统uto0o 系统界面在最后
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,员工,桌台信息,桌台预订,菜品信息,点菜订单,盈利统计,菜品分类开题报告内容一、选题背景随着社会经济的快速发展和人们生活水平的提高,餐饮行业迎......
  • DDD领域驱动设计
    DomainDrivenDesign核心方法论:领域通过领域模型驱动软件设计具体方法面向对象分析设计:用例分析,对象职责分解,通用建模四色建模:特定于商业场景建模方式CQRS:只对命令类问题领域模型建模,降低建模难度事件风暴:从事件出发建模四层架构:独立的领域层六边形架构:领域模块成为架构......
  • 从零构建直播生态系统:直播软件平台源码的完整搭建指南
    开发一个直播软件平台源码的完整流程涉及精细规划、技术决策、环境配置、功能实现、服务集成以及最终部署等多个关键环节。以下是一个全新的、详尽的步骤指南:需求分析与规划市场调研:首先,进行市场调研,了解目标用户群体的需求,以及竞争对手的产品特点。功能规划:基于调研结果,明确......
  • 基于SpringBoot的智能购房推荐系统-09040(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    Springboot智能购房推荐系统摘 要近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。智......
  • 表面贴装型晶体振荡器(汽车电子用)DSO221SX/DSO211SX:汽车电子系统的精准时间之源
    在现代汽车电子领域,精确的时间同步和稳定的频率控制是确保各种系统高效、可靠运行的关键。表面贴装型晶体振荡器DSO221SX/DSO211SX凭借其卓越的性能和出色的特性,成为了汽车电子系统中不可或缺的重要组成部分。一、汽车电子中晶体振荡器的重要性随着汽车技术的不断发展,汽......