zoukankan      html  css  js  c++  java
  • 微服务电商秒杀系统

    一、学习目标

    • 了解秒杀的业务

    • 掌握秒杀的设计思路及技术架构

    • 掌握SpringCloud针对于秒杀业务的应用

    • 掌握redis对于性能的提升作用

    • 掌握RabbitMQ对于业务拆分异步的处理应用

    二、了解秒杀的业务及使用的技术架构

    2.1. 什么是秒杀

    【秒杀】一词在网络的最早起源,应该要追溯到日本的综合格斗技团体Pancrase在1993年9月21日发行的WEEKLY PRO-WRESTLING(每周职业摔跤)杂志中出现的自创词,在2000年发行的一款回合制网络游戏【石器时代】传入中国并被发扬光大。

    【石器时代】在战斗时会出现【合击】现象,就算大家敏捷素质不同,在倒计时28秒时,同时选择攻击一个目标,也会极大概率发动攻击群殴一个目标。特别是在玩家的PK战,经常出现群体合击或者人宠合击,造成强大的杀伤,瞬间打飞或者打晕对手。

    由于游戏战斗采用的是倒计时模式,强大的杀伤往往只在一秒没过就结束,所以这类瞬间或几下击败对手就被称作:【秒杀】

    到后来演化渐变成通俗用语,甚至用来替代一些暴力词汇:

    “小心我秒你”;“昨天PK遇到高手,我被秒了”;“lj快走,不然秒你”;“终于120级,转生可以秒机暴啦”等等。

    并在之后的【传奇】【MU】【CS】等各种经典游戏中广为流传。直至被商家促销活动所用。

    所谓“秒杀”,是网上竞拍的一种新方式,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。2011年以来,在淘宝等大型购物网站中,“秒杀店”的发展可谓迅猛。

    对于商家来说,按照商家的规模,秒杀分为三种形式:

    1、平台要求准时准点做秒杀,类似于天猫双11,11月11日0点开始抢购,或者京东的整点抢购,都由平台发起。

    2、商家对于自己的店铺做秒杀,一般是厂家的旗舰店,在平台首页占据有利广告位,进入店铺做秒杀。

    3、微信公众号链接网页做秒杀,由公众号运营的商家发起。

     

    按照商家的促销活动内容,秒杀分为三种方式:

    1、限价秒杀:最常见的秒杀形式,秒杀价格绝对低到令人无法相信也无法抗拒而不去参与,此种秒杀一般在开始之后1-3秒之内就会秒杀完毕。

    2、低价限量秒杀:此种形式也可以理解为低折扣秒杀,限量不限时,秒完即止,此种秒杀形式商家提供一定数量的商品,直至秒完即止。

    3、低价限时限量秒杀:此种形式也可以理解为低折扣秒杀,限时限量,在规定的时间内,无论商品是否秒杀完毕,该场秒杀都会结束。

    2.2. 秒杀的业务特点

    1、瞬时并发量大:大量用户会在同一时间抢购,网站流量瞬间激增。

    2、库存少:一般都是低价限量,而访问的数量远远大于库存数量,只有极少数人成功。

    3、业务流程简单:流程短,立即购买,下订单,减库存。

    4、前期预热:对于还未开启活动的秒杀商品,以倒计时的方式显示,只能访问不能下单。

    2.3. 设计思路

    1、限流:只能让秒杀成功的一小部分人进入到后台,和数据库进行交互,来减少数据库服务器的压力。

    2、缓存:将部分业务逻辑写到缓存里,例如:商品限购数量、秒杀政策等。

    3、异步:将业务逻辑拆分,减少服务器压力,例如:正常业务流程是下订单、付款、减库存同一时间完成,秒杀时可以将业务逻辑拆分。

    4、预热:商家进行宣传,并提前设置好秒杀的商品、秒杀时间、限购数量,将设置的商品写入 redis 缓存。

    5、展示:页面分为两层,第一层是商品列表页,第二层是商品详情页,通过商品列表页链接进入商品详情页,秒杀开始前,展示商品秒杀倒计时,不允许操作提交订单,只允许查看商品详情。秒杀开始时,展示商品秒杀到期时间。

    6、提交订单:秒杀提交完订单将 redis 缓存里的数量减少,并提示支付。

    7、队列操作:当支付成功之后,将秒杀成功详情写入 rabbitMQ,订单服务进行监听接收消息写入订单,库存服务进行监听接收消息减少库存。

    8、时间服务器:页面服务端通过负载进行布署,各服务器时间可能会不一致,因此增加时间服务,来提供统一的时间。

    2.4. 技术架构

    整体架构图:

    Eureka Client:

    时间服务(端口号8000):为页面服务提供时间统一的接口。

    商品服务(端口号7000):对外提供的接口(商品列表、商品详情、秒杀政策)。

    库存服务(端口号6001):队列监听,在队列中提取消息与数据库交互减少库存。

    会员服务(端口号5000):为页面服务提供会员数据接口,会员的添加、修改、登录。

    订单服务(端口号4000):队列监听,在队列中提取消息与数据库交互生成订单。

    页面服务(端口号3000):为前端页面提供数据接口。

    Eureka Server:

    注册中心(端口号9000):各服务都在注册中心进行注册。

    配置中心 :提供所有服务需要的配置。

    Redis的应用:

     

    缓存商品数量、秒杀政策。

    商家对秒杀政策、商品限量进行设置,设置完成写入Redis。

    消费者访问商品详情,提交订单之后,从Redis中减少商品数量。

     

    Redis里存取内容:

    1、在政策新增的时候存入,key的值为:LIMIT_POLICY_{sku_id},value的值为政策内容

    2、商品列表取数据时,通过key(LIMIT_POLICY_{sku_id}),取出政策内容。

    3、政策到期之后,自动删除。

     

    RabbitMQ的应用:

    消费者提交订单,自动写入订单队列:

    订单队列:订单服务监听订单队列,接收到消息之后将队列信息写入数据库订单表。

    消费者付款之后,更新订单状态,更新成功之后写入库存队列

    库存队列:库存服务监听库存队列,接收到消息之后将库存信息写入数据库减少库存。

    2.5. 数据库结构 

     

     关注本博客微信公众号

     

     

     

  • 相关阅读:
    [noip2011d2t2]聪明的质检员 二分+前缀和优化
    [noip2016d2t2]蚯蚓
    KMP
    杨辉三角(二项式定理)&&组合数 【noip 2011/2016 d2t1】
    bzoj1615 [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
    [noip2015 pjt3]求和
    [周记]8.28~9.3
    [noip2011 d1t3] Mayan游戏
    react基础用法二(组件渲染)
    react基础用法一(在标签中渲染元素)
  • 原文地址:https://www.cnblogs.com/wqsbk/p/15117188.html
Copyright © 2011-2022 走看看