进修(一):写一个有秒杀的简单的电商需求分析

设定你自己是项目负责人,围绕商品列表、秒杀场景+购物车+下单+简单实现库存这个业务,写出需求设计思路、数据库表结构设计、大概的前端页面需求等。

1. 需求设计思路:

   - 用户可以浏览商品列表,查看商品的名称、价格、库存等信息,

  - 可以在搜索框进行搜索,高亮查询,分词查询,根据分类、价格等进行筛选。

   - 实现秒杀场景,用户可以参与秒杀活动并抢购秒杀商品,限定数量。

   - 用户可以将商品添加到购物车,并在购物车中管理和编辑商品。

   - 用户可以下单购买商品,生成订单,并提供支付功能。

   - 库存管理需要保证商品的库存数量准确,并在下单时进行库存的扣减。

   - MySQL数据同步到elastic search,把商品同步到elastic search

具体设计思路:

1. 商品列表:

   - 提供接口获取商品列表信息,包括商品ID、名称、价格等。

   - 商品信息可以从数据库中获取。

2. 秒杀场景设计:

   - 提供秒杀开始的接口,设置秒杀开始时间和结束时间。

   - 在秒杀开始前,预先将商品的库存数量加载到Redis缓存中,确保Redis中的库存与数据库中的库存一致。

   - 用户请求秒杀接口时,先从Redis中获取商品的库存数量,若库存不足则返回秒杀失败。

   - 若库存充足,则从Redis中扣减库存数量,并记录用户的秒杀订单信息。

   - 使用分布式锁(如Redis分布式锁)确保秒杀操作的原子性和避免超卖问题。

   - 返回秒杀成功的响应。

3. 购物车设计:

   - 提供接口用于用户将商品添加到购物车,并记录商品数量。

   - 用户可以从购物车中删除商品或者修改商品数量。

   - 用户可以查看购物车中的商品列表和总价。

4. 下单设计:

   - 提供接口用于用户提交订单,生成订单记录。

   - 根据购物车中的商品信息,生成订单详情,并计算订单总价。

   - 扣减商品库存数量,保证库存的准确性。

   - 生成唯一的订单号,用于后续的支付流程。

5. 简单实现库存:

   - 维护商品表中的库存字段,记录商品的库存数量。

   - 在秒杀场景中,使用Redis缓存来保存秒杀商品的库存数量。

   - 使用分布式锁保证秒杀操作的原子性,避免超卖问题。

   - 定时任务或者后台服务可以定期同步Redis中的库存数据与MySQL数据库中的库存数据,以保持一致性。

6. Redis与MySQL库存一致性:

   - 在秒杀开始前,将商品的库存数量从MySQL数据库加载到Redis缓存中。

   - 在秒杀过程中,通过Redis缓存进行库存的检查和扣减操作。

   - 秒杀结束后,将Redis中的库存数量与MySQL数据库中的库存数量进行对比和校验,确保一致性。

   - 定时任务或者后台服务可以定期同步Redis中的库存数据与MySQL数据库中的库存数据,以保持一致性。

   

实现秒杀场景的大致步骤:

1. 预加载商品库存到Redis缓存中,并设置秒杀的开始时间和结束时间。

2. 用户请求秒杀接口,从Redis缓存中获取商品库存数量。

3. 若库存不足,则返回秒杀失败的响应。

4. 若库存充足,使用分布式锁保证秒杀操作的原子性,从Redis中扣减库存数量,并记录用户的秒杀订单信息。

5. 返回秒杀成功的响应。

2. 数据库表结构设计:

   - 商品表(product):包含商品的ID、名称、价格、库存等字段。

   - 秒杀商品表(seckill_product):包含秒杀商品的ID、名称、价格、库存、开始时间、结束时间等字段。

   - 用户表(user):包含用户的ID、姓名、手机号等字段。

   - 购物车表(cart):包含购物车的ID、用户ID、商品ID、数量等字段。

   - 订单表(order):包含订单的ID、用户ID、订单号、商品ID、数量、金额等字段。

   - 库存表(stock):包含商品ID、库存数量等字段。

3. 前端页面需求:

   - 商品列表页:展示商品的名称、价格等信息,并提供查看商品详情、添加到购物车的功能。

   - 秒杀页面:展示秒杀商品的名称、价格、库存数量等信息,并提供参与秒杀的按钮。

   - 购物车页面:展示购物车中的商品列表,可修改商品数量和删除商品,提供结算和下单的功能。

   - 下单页面:展示订单商品的信息和总金额,提供选择支付方式和支付功能。

   -  用户界面:展示个人信息以及个人订单等信息

4. 技术选择及解释:

   - Spring Boot:作为项目的基础框架,简化配置和快速开发。

   - Redis(集群模式):用于实现缓存和分布式锁,提高系统性能和并发控制。

   - MySQL:用于存储商品、用户、购物车、订单和库存等数据。

   - Elasticsearch:用于全文搜索和商品的快速检索,提升商品搜索的效率。

   - 消息队列(如RabbitMQ、Kafka):用于异步处理订单和支付操作,提高系统的并发处理能力。

   - 前端框架(如React、Vue.js):用于构建用户界面,实现商品列表、秒杀页面、购物车页面和下单页面的交互和展示。

这些技术的选择是基于以下考虑:

- Spring Boot简化了项目的配置和开发,提供了快速构建项目的能力。

- Redis集群模式提供了高可用性和性能,Redis 的原子操作、分布式锁这两个功能特性可以有效地来支撑秒杀场景的需求。可以用于缓存数据和分布式锁的实现,提高系统的并发控制和性能。在接入层进行限流

- MySQL作为关系型数据库,提供了数据的持久化存储,并且在商品、用户、订单等方面具备良好的数据表结构设计能力。

- Elasticsearch作为全文搜索引擎,可以提供快速的商品搜索和检索功能,增强用户体验。

- 消息队列的引入可以实现异步处理,将订单和支付操作解耦,提高系统的并发处理能力和性能。

- 前端框架可以提供良好的用户界面和交互体验,使用户能够方便地浏览商品、参与秒杀、管理购物车和下单购买。

秒杀需要考虑的问题:

1. 高并发访问:商品秒杀往往会引发大量用户同时访问系统,导致高并发请求。这会给系统带来巨大的压力,容易导致系统崩溃、性能下降等问题。

2. 库存控制:秒杀活动通常会限制商品的数量,防止超售现象发生。因此,需要对商品库存进行实时控制,确保商品的库存数量准确,避免超卖和卖完的情况。

3. 秒杀接口安全性:秒杀接口需要进行安全性保护,防止恶意请求、刷单等行为对系统造成影响。常见的安全措施包括接口限流、验证码校验、请求频率限制等。

4. 秒杀活动时间窗口:秒杀活动通常有一个固定的时间窗口,用户只能在指定时间范围内参与秒杀。因此,需要在系统中定义和控制秒杀活动的开始时间和结束时间,确保秒杀活动的顺利进行。

5. 订单处理和支付:秒杀成功后,用户需要生成订单并完成支付。在高并发的场景下,订单处理和支付也会面临性能和并发的挑战。

根据上述问题的分析,以下是对秒杀场景的需求详细分析:

1. 高并发访问需求:

   - 实现系统的并发处理能力,通过优化系统架构、使用缓存等方式提高系统的性能和承载能力。

   - 使用分布式缓存如Redis来缓解数据库的压力,并提高读写效率。

   - 使用消息队列来异步处理秒杀请求,减轻系统的压力。

2. 库存控制需求:

   - 系统需要提供实时的库存查询和更新功能,确保商品库存的准确性。

   - 在秒杀开始前,需要将秒杀商品的库存加载到缓存中,秒杀结束后将缓存中的库存同步回数据库。

3. 秒杀接口安全性需求:

   - 实现接口访问限制,限制用户在指定时间范围内的请求次数。

   - 使用验证码等方式来防止机器人和恶意请求。

4. 秒杀活动时间窗口需求:

   - 在系统中设置秒杀活动的开始时间和结束时间,限制用户只能在活动时间范围内参与秒杀。

   - 提前进行活动预热,提醒用户活动时间和规则。

各位大佬中,如果这些需求有问题或者有需要注意的问题,请多指点,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值