跳转到内容

Scenario 22: E-commerce 电商平台

你想做一个电商网站原型,体验完整的浏览-加购-下单流程。

  • 商品列表页(JSON数据源)
  • 商品详情页
  • 购物车(localStorage存储)
  • 模拟下单(生成订单号,存localStorage)

用HTML+CSS+JS做一个电商网站。商品数据硬编码JSON(至少12个商品,含名称、价格、 图片URL、分类、库存)。商品列表页:网格展示,支持分类筛选和价格排序。 商品详情页:大图、描述、选择数量、加入购物车。购物车页:修改数量、删除商品、 显示总价。结算页:填写地址表单,点击下单生成随机订单号,清空购物车。 全部数据存localStorage。

  • 商品列表筛选和排序正常
  • 加入购物车数量正确
  • 购物车修改和删除功能正常
  • 下单后生成订单号并清空购物车
  • 电商页面布局 → Module: 前端页面设计
  • 购物车状态管理 → Module: 客户端状态
  • 表单验证 → Module: 表单处理

V2 — 10人用:商品管理+订单流程

Section titled “V2 — 10人用:商品管理+订单流程”

小店铺需要后台管理商品和处理订单。

  • 商品CRUD API
  • 购物车服务端存储
  • 简单订单流程(下单→待发货→已发货→完成)
  • 管理后台

Go+Gin后端,SQLite数据库。商品表(id, name, price, stock, category, image_url), 购物车表(user_id, product_id, quantity),订单表(id, user_id, total, status, address), 订单项表(order_id, product_id, quantity, price)。 商品API:CRUD操作。购物车API:添加/修改/删除/查看。 下单API:从购物车创建订单,扣减库存(库存不足返回错误),清空购物车。 订单状态流转:pending→paid→shipped→completed。管理后台页面:商品管理、订单列表。

  • 商品CRUD正常
  • 购物车操作正确
  • 下单扣减库存,库存不足报错
  • 订单状态流转正确
  • RESTful API设计 → Module: API设计
  • 订单状态机 → Module: 业务状态管理
  • 库存扣减基础 → Module: 库存管理

V3 — 100人用:库存事务+支付集成

Section titled “V3 — 100人用:库存事务+支付集成”

多人同时下单,库存扣减需要事务保障,支付需要真实集成。

  • PostgreSQL事务保证库存一致性
  • 悲观锁/乐观锁防止超卖
  • Stripe支付集成(或模拟支付网关)
  • 支付回调处理

迁移到PostgreSQL。库存扣减用事务+行锁: BEGIN → SELECT stock FROM products WHERE id=$1 FOR UPDATE → 检查库存 → UPDATE products SET stock=stock-$qty → INSERT订单 → COMMIT。 支付流程:下单后创建pending订单,调用Stripe创建PaymentIntent, 前端跳转Stripe Checkout。Stripe Webhook回调确认支付成功后更新订单为paid。 支付幂等:order_id作为idempotency_key,防止重复扣款。 未支付订单30分钟超时自动取消,归还库存。

  • 并发下单不会超卖
  • 支付流程完整(创建→支付→回调→确认)
  • 重复回调不会重复处理(幂等)
  • 超时订单自动取消并归还库存
  • 数据库事务与锁 → Module: 并发控制
  • 支付集成 → Module: 第三方支付
  • 幂等性设计 → Module: 分布式系统基础

V4 — 1000人用:搜索+推荐+异步处理

Section titled “V4 — 1000人用:搜索+推荐+异步处理”

商品数量增多,需要搜索和推荐能力,订单处理需要异步化。

  • Elasticsearch商品全文搜索
  • Redis购物车(提升性能)
  • 基于用户行为的商品推荐
  • 订单异步处理(消息队列)

Elasticsearch索引商品数据,支持:关键词搜索、分类过滤、价格范围、 排序(价格/销量/评分)。商品变更时同步更新ES索引。 购物车迁移到Redis Hash(user:{id}:cart → {product_id: quantity}), 未登录用户用session_id。推荐:基于”买了又买”(订单共现分析), 商品详情页显示”购买此商品的人还买了”。 下单后发消息到队列,异步处理:库存扣减、发送确认邮件、更新销量统计。

  • 搜索结果相关性合理
  • Redis购物车登录后可合并
  • 推荐结果基于真实订单数据
  • 异步订单处理不丢单
  • 全文搜索 → Module: Elasticsearch
  • Redis数据结构应用 → Module: Redis实战
  • 消息队列异步处理 → Module: 异步架构

大促活动需要处理流量洪峰和复杂的促销规则。

  • Redis预扣库存应对秒杀
  • 消息队列削峰填谷
  • 优惠券系统(发放、使用、核销)
  • 促销规则引擎(满减、折扣、赠品)

秒杀:活动开始前将库存预热到Redis(SECKILL:{product_id}:stock), 请求先Lua脚本原子扣减Redis库存,成功后发消息到队列异步创建订单。 限制:每人限购1件(Redis SET记录已购用户),接口限流(令牌桶算法)。 优惠券系统:优惠券模板(满100减20)→发放(用户领取)→使用(下单抵扣)→核销。 促销规则引擎:JSON定义规则(type: full_reduction, threshold: 200, discount: 30), 多规则可叠加,计算最优组合。下单时自动匹配适用的促销。

  • 秒杀不超卖,限购有效
  • 消息队列削峰后订单无遗漏
  • 优惠券全生命周期正确
  • 促销规则自动匹配最优方案
  • Redis Lua原子操作 → Module: Redis高级
  • 消息队列削峰 → Module: 高并发设计
  • 促销规则引擎 → Module: 业务规则系统

V6 — 10万+用户:多商户+分库分表

Section titled “V6 — 10万+用户:多商户+分库分表”

平台化运营,多商户入驻,数据量需要分片。

  • 商户入驻系统(注册、审核、店铺管理)
  • 分账系统(平台抽佣+商户结算)
  • 多仓库物流管理
  • 数据库分库分表

商户系统:商户注册→平台审核→开店。商户后台:商品管理、订单管理、资金明细。 分账:订单支付后,按比例分账(平台10%,商户90%),T+1结算到商户账户。 物流:多仓库管理,就近发货(根据收货地址选最近仓库),物流状态跟踪。 分库分表:订单表按user_id取模分16张表,商品表按merchant_id分库。 分布式ID(Snowflake算法)。跨分片查询通过汇总服务处理。 读写分离:主库写、从库读,商品详情页走缓存+从库。

  • 商户入驻全流程通畅
  • 分账金额准确,结算定时执行
  • 就近仓库选择正确
  • 分库分表后查询路由正确
  • 读写分离不影响数据一致性
  • 多租户架构 → Module: SaaS架构
  • 分账系统 → Module: 资金系统
  • 分库分表 → Module: 数据库扩展