写点什么

架构实战营 - 毕业设计

作者:瓜子葫芦侠
  • 2022 年 1 月 16 日
  • 本文字数:1245 字

    阅读完需:约 4 分钟

一、系统概述

1.1 业务场景

1.1.1 购物场景

用户注册登录-->浏览商品信息-->添加购物车-->下单-->支付-->物流配送-->确认收货

1.1.2 秒杀场景

用户注册登录-->浏览商品信息-->秒杀下单-->支付-->物流配送-->确认收货

1.1.3 秒杀场景时序图

1.2 复杂度分析

收集各大电商平台好评与热卖商品,10 个品类,每个品类不超过 20 个商品,则在售商品总数量 200 左右,可以使用关系型数据库进行存储;

日活用户 100 万,按照 50%比例计算,则用户总数在 500 万左右;6.18 大促期间,活跃用户数按照 40%比例增加,则大促期间日活用户数在 200 万左右;

秒杀商品,价格诱人,会有比较多的用户参与活动,假设参与秒杀活动用户数比例在 30%,则整体参与秒杀活动用户数在 60 万左右,这个数值代表 6.18 期间最大的并发访问数值;如果按照 4:6 比例分配到充电宝、iPhone 12 两个商品,再拆分到 10:00,15:00,20:00 不同的秒杀时间段,那这个并发数值会被进一步缩小,预估单个商品每个秒杀时间段的并发访问数在 30 万-40 万;

支付采用对接第三方平台,微信、支付宝,保证接收第三方推送的支付结果即可;

商品信息涉及大量图片、视频文件,使用 OSS 存储,通过 CDN 进行加速访问;

充电宝 1000 个,iPhone 12 10 台,则秒杀订单总数量 1010 条;加 6.18 大促期间每日成交量 20 万,则秒杀订单对整体的订单影响量不大;

二、架构设计

2.1 存储设计

2.1.1 库存设计

涉及秒杀场景,并发访问量较大,每次对数据库查询性能扛不住,需要在秒杀开启前将秒杀商品库存加载到 Redis 中,同时利用 Redis 单线程高性能的能力,实现秒杀扣库存。

考虑到单节点 Redis 的能力在 50000 左右,可以采用 RedisCluster 模式,8 节点类型,每个主节点配备两个从节点;同时在库存 key 的设计上也要保证均衡的落到 8 个节点上,架构图如下:

2.1.2 用户数据、商品数据

通过前面的场景与复杂度分析,用户数据 500 万,商品数量 200 个,统计上历史商品数据,按照百万计算,用户数据、商品数据可以使用关系型数据库存储,MySQL 即可,采用主从架构,架构图如下:

2.1.3 订单数据

日活 100 万,按照 20%的订单转换率,则每日有 20 万的订单,一年下来有接近 7000 万的订单,此时采用单库单表存储性能肯定受到影响,建议订单数据基于用户 ID 采用分库分表架构,架构设计图如下:

2.1.4 其它数据

图片、视频使用 OSS 进行存储,可以采用公有云的方案进行,然后配备 CDN 进行加速;

订单数据量较大,运营系统、管理后台,可以通过 ElasticSearch 进行存储,提升运营响应速度;

2.2 性能设计

秒杀场景 30 万以上的并发访问,同时领导要求万无一失,考虑 F5 的价格,决定采用 LVS 进行负载均衡的支撑,同时采用同城双机房的方式进行部署,架构图如下:

2.3 缓存设计

缓存设计采用 App 缓存、CDN、Web 容器缓存、分布式缓存,利用 CDN 存储加速商品介绍信息中的图片、视频文件的访问,提升静态资源加载速度;利用分布式缓存,减少对数据库访问的直接访问,降低数据库压力;

2.4 可用设计

搭建同城双机房架构,保证 6.18 大促的稳定运行,同时利用双机房架构,给到秒杀系统做故障切换,保证秒杀活动的万无一失。架构图如下:


用户头像

还未添加个人签名 2018.01.11 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营-毕业设计