一、功能需求分析

1、前端需求分析

前端是一个系统中离用户最近的部分,为用户提供信息展示、交互逻辑等。当前端的需求基本决定,一个系统的功能需求也就随之产生。 所以,接下来,我们重点分析一下秒杀系统前端的需求。

1. 秒杀详情页

首先,作为电商的子功能模块,秒杀通常不会直接出现在首页上,而是有一个单独的秒杀详情页,首页作为它的流量入口。用户会先打开平台首页,从首页秒杀入口进入到秒杀功能模块的页面。

当用户通过首页入口进入到秒杀页面后,他希望看到什么信息呢?应该是有关这场秒杀活动的详细信息,比如活动场次、秒杀商品、秒杀价格,活动规则等。对我们来说,这就是秒杀详情页。

详情页会展示多场秒杀活动信息以及每场秒杀活动的商品信息,让用户选择自己感兴趣的活动场次。比如今天 9:00 ~ 10:00 是小米手机专场,10:00 ~ 11:00 是红米手机专场,11:00 ~ 12:00 是生态链产品专场。

因此,秒杀详情页需要划分两个展示区:活动场次信息区、活动商品列表区。活动场次信息区里可以点击场次按钮切换场次;活动商品列表区里可以点击某个商品的按钮查看商品详情。

2. 查看商品列表

接下来,用户可能会点击活动场次信息区的某个场次,查看该场次的商品列表。像点击“出行穿戴”专场,就可以查看所有参与秒杀活动的穿戴商品,比如小米手环 4 NFC 版,大屏彩显,可刷公交和门禁,原价 229,活动价 179,库存剩余 8%等信息。

对应到前端需求当中,就是商品列表区的商品信息——商品图片、商品名称、广告语、库存信息、原价、活动价、秒杀按钮。

接下来,用户可能直接点击商品按钮,这里会出现 3 种情况:

活动已开始,对于已登录用户来说,按钮提示“立即抢购”,点击后会跳转到商品详情页;

活动已开始,对于未登录用户来说,按钮提示“登录后抢购”,点击后会跳转到登录页;

活动未开始,按钮则会提示“提醒我”,点击后就会订阅活动通知。

最后,当用户进入到商品详情页,可能希望看到诸如“原价 229,活动价 179,距离结束还剩 15 分钟”的活动信息;“全新 AMOLED 大屏彩显,手环刷公交卡、门禁卡,能用支付宝抬手支付……”的商品描述信息;“黑色”“白色”等规格选项;“北京朝阳区”“上海浦东区”等配送区;是否有货的库存信息。这些就是商品详情页的前端需求。

以上就是用户参加秒杀活动时,在前端页面出现的行为及需求,具体落实到前端设计,主要包括 UI 设计和交互逻辑。

3.UI 设计

UI 设计主要包含秒杀系统各个功能页面的内容和布局,大致有 3 类:首页入口、秒杀活动页、商品详情页。

4.交互逻辑

介绍完 UI 设计,我们来说下交互逻辑。所谓交互逻辑,主要包括页面上各个部分对用户行为的交互方式和响应结果,它是基于 UI 设计页面来进行的。我们还是以首页入口、秒杀活动页、商品详情页来介绍。

首先来看首页入口,它的交互逻辑是“点击秒杀广告位进入秒杀活动页”。

秒杀活动页,它存在四大交互逻辑,请看下面的流程图。

  1. 当用户进入活动页,如果当前页面显示的就是他想要的场次信息,那么他就会参与其中。
  2. 活动场次切换,如果当前显示页面不是他想要的,用户则会点击切换场次,这就是用户点击切换,还有一种是自动切换,它需要设定定时任务判断时间,到了时间则自动切换,切换后系统自动重新获取活动场次信息。
  3. 接下来,为了找到自己想买的商品,用户会点击活动详情区的商品,进入到商品详情页。
  4. 活动详情区商品的按钮。如果是活动已开始,未登录用户会提示“登录后购买”,点击则会跳转登录页;如果是已登录用户,则会提示“立即抢购”,点击后会跳转到商品详情页。如果活动未开始,则会提示“提醒我”,点击订阅活动通知。

最后,我们来介绍下商品详情页上的交互逻辑。它有三类交互,请看用户操作流程图。

第一个交互,点击配送区修改按钮,选择配送地区;

第二个交互,点击规格按钮,选择商品对应规格;

第三个交互,点击秒杀/购买按钮。这里会出现两类状态,一类是活动进行中,一类是活动未进行。

在活动进行中,如果是未登录用户,则会提示“登录后购买”,然后点击跳转登录页;如果是已登录用户,则会提示“立即抢购”,点击后若抢购成功,将商品加入购物车,商品享受活动价。若抢购失败,根据后端返回,给出失败提示“活动已结束”或“已售罄”。

活动未进行,交互逻辑会提示“加入购物车”,点击后将商品加入购物车,商品不享受活动价。

另外,由于用户量大,页面需要采用前后端分离、动静数据分离的方式,静态资源和静态数据由 CDN(Content Delivery Network,内容分发网络)和前端缓存,尽量减少对后端的压力。

对于一个秒杀系统来说,需求分析是一个项目中最关键的环节之一。只有把需求弄清楚了,在项目落地的时候方向才会有的放矢,才能设计出既满足业务需求又能稳定运行的业务

2、后端需求分析

这部分主要包括需求分析及其接口,还有隐藏需求。

1.需求分析

后端的需求依赖于前端。 为了分析后端需求,我们需要先了解用户在秒杀活动中的行为。

首先,他会先打开官网首页,点击首页的秒杀入口,进入秒杀活动页。

第二,当他进入秒杀活动页后,必然要了解活动信息,比如双十一有哪些场次,都有什么优惠,以及自己要买的东西在哪场。为此,我们需要为用户提供一个获取活动信息的接口。

第三,假设手环和耳机都在上午场,为了找到它们,这名米粉会点击场次按钮来了解。那么,这些场次信息就需要我们在后端提供,且最好是能缓存在页面,避免因每次请求而给后端带来压力。

第四,为了避免错过活动,他会点击上午场里手环和耳机的提醒按钮订阅通知。此时,后端需要判断他是否已登录 App。如果是,则生成一条 Push 订阅记录,并返回已订阅人数;如果没有登录,则提示他先登录。

第五,假设现在已经到了上午场活动开始时间,这名米粉开始进入手环的详情页,去了解它的价格、库存、活动信息等,判断要不要购买。

这个环节需要我们在后端提供手环的商品信息,特别是它的配送区信息、库存信息、活动信息。其中,库存信息和配送区并不是秒杀系统本身的主要内容,可以简明扼要,而活动信息则是秒杀系统的数据之一,需要提供接口获取该商品是否参与秒杀活动。

最后,假设这个米粉看了促销信息,觉得划算,他就会点击秒杀按钮进行购买。此时,后端需要判断他的登录状态:如果未登录,则跳转登录页;如果已登录,则判断是否参加秒杀活动、是否有库存、是否有资格,满足条件则扣预留库存、加购物车,并返回结果。

这是我们假设一名用户访问前端秒杀活动的行为轨迹,通过它,我们分析出了后端需要哪些需求。

2.接口清单

根据上面的需求分析,我们不难发现,点击场次信息时是从前端缓存里提取数据,所以不需要后端接口,而其他 4 种行为则需要对应的后端接口以便和前端互动。具体如下:

  • 对应秒杀活动页需求的秒杀活动信息列表接口;
  • 对应提醒按钮需求的 Push 订阅接口;
  • 对应商品详情页需求的商品活动信息接口;
  • 对应秒杀按钮需求的秒杀抢购接口。

3.隐藏需求

  • 为了获取库存信息,需要对接库存中心;
  • 为了获取商品信息,需要对接商品中心;
  • 为了操作购物车并生成订单,需要对接交易中心;
  • 为了方便做数据统计,需要将秒杀成功的用户 ID 记录下来,以便对接账号中心验证用户账号合法性。

另外,还需要支持灰度测试,以便我们在正式上线前,及早发现测试环境中无法暴露的问题。

最后,为了抗住大流量,还需要做一些维护服务稳定性相关的工作。

总之,后端的需求不像前端那么直观,有原型图参考。特别是隐藏需求,它比较依赖后端研发人员的经验来分析。

3、管理后台需求分析

1.需求分析

那么,每个商品的信息从哪里来呢?主要有两大来源:

  • 从其他系统中获取,比如名称、描述、图片等商品基本信息,价格、库存等销售信息;
  • 从管理后台中录入,比如商品 ID、活动价格、活动库存、限购策略等。

一般大型促销专题活动通常是由多场活动组成。比如:双十一大型促销专题活动里可能包含上午场和下午场两场活动,每场活动里有 10 件参与活动的商品。所以,在活动信息编辑功能里,我们还需要三个数据录入功能:活动专题信息录入、活动场次信息录入、商品信息录入。

2.后台页面

从大到小,大致有这三类:

  • 活动专题管理,主要是用于管理所有秒杀活动专题,包括专题列表页和专题编辑页;
  • 活动场次管理功能,用于录入秒杀活动场次信息,并关联到专题上,包括场次列表页和场次编辑页;
  • 商品管理功能,用于管理参与秒杀活动的商品信息,包括商品列表页和商品编辑页。

首先,我们来介绍下第一类——专题管理,它包括专题列表和添加专题这两个页面。

第二类后台页面——场次管理

场次管理也包括两个页面,一个是“场次列表”,一个是“添加场次”。

其中,场次列表就是针对一个秒杀活动的场次信息。比如 2020 年双十一秒杀活动,它有两个场次——生态链第一场和生态链第二场。每个场次都有各自的场次 ID、关联专题活动、描述、开始结束时间、状态和操作选项(查看、编辑、上线、下线)。

添加场次,就是把每一场的活动信息都添加上,请看下图。

这一页的信息主要有场次关联的活动专题、开始结束时间、场次描述、限购策略、商品、添加按钮,以及最后的信息提交/取消按钮。

这是活动场次管理,场次之下就是具体的商品管理了,前面提到过,它包括商品列表页和添加商品页。 我们来看这个原型图。

注意:

提交按钮点击后需要给出提示,成功后跳转到相应列表页,失败则给出具体的失败提示,以便运营同学和研发同学快速定位问题。

各功能列表项中查看操作的页面内容,类似于编辑页面,只是查看页面中内容不可修改。

对于进行中或已结束的场次,查看页面需要展示每个商品的剩余库存,以及秒杀成功的用户名单。

3.接口清单

当然,对于管理后台来说,前后端分离在技术上是大势所趋。所以,除了页面需求外,为了前后端交互方便,管理后台也有接口需求。从以上后台需求分析中,我们可以整理出后台接口大概如下:

管理后台基本上是增删改查的操作,接口设计最好是符合 RESTFul 风格。查询接口需要支持批量查询和单个查询。

在需求分析的时候,为了考虑全面,我们可以站住不同的角色立场来分析,比如站在用户、产品经理,前后端研发、测试人员、运营人员等的角度来看待。

有时候我们拿到的需求并不是详细的需求文档,可能仅仅是个原型图,这时就需要我们充分与业务方沟通,并将沟通结果整理成可拆解的需求点用文档记录下来,以便后续做详细设计和任务拆解。

另外,我们还需要挖掘出隐藏需求,以免评估工作量的时候有疏漏,导致项目延期。

二、非功能需求

除了分析功能需求外,还应该思考些什么?

  • 这个系统的用户是谁?
  • 有多少用户?
  • 用户都在什么时间使用系统?
  • 用户可能会做哪些危害系统的操作?

除了外部,我们还需要更多地从内部因素考量,比如运行系统的机器配置、语言并发能力、机房可用性等等这些是否满足要求。像这种除用户使用功能之外的潜在需求,就是非功能需求

非功能需求包括:可用性、并发能力、性能、安全防护能力、水平扩容缩容能力、运维/运营成本等。

比如,我们在设计一个重要系统时,可能会要求可用性达到 99.99%,并发能力达到 100 万 QPS,请求延迟低于 500ms,能防范跨站脚本攻击,1 分钟内快速扩容,总成本控制在 10 万元每月。这些要求就是非功能需求要满足的。

为什么要关注这些指标? 因为如果没有满足这些指标,系统在运行的时候,会出现重大故障。甚至可以说,满足它们是系统在特定条件下正常运行的最低要求。

举个典型的例子:

某个金融系统要求每年最多只能发生一次故障,故障时间不能超过 10 分钟,为此他们还准备了故障赔偿金。但是在项目部署的时候,相关人员因为没有充分评估机房的网络质量,结果在两次流量高峰时都出现了故障,不仅影响用户体验,还导致赔偿金严重超支。

1.如何分析非功能需求?

对于秒杀系统来说,它的核心非功能需求主要有:高可用指标、高性能指标、高并发指标,比如可用性方面要高于 99.99%,高性能方面要求请求延迟小于 100ms,高并发方面要求QPS 大于 10万。这三个指标俗称“三高”要求,公司不同,指标大小要求也会有所不同。

如何计算高可用指标?

高可用指标是指用来衡量一个系统可用性有多高。这里有几个需要了解的概念:

  • MTBF(Mean Time Between Failure,平均可用时长),系统正常、稳定运行的平均时长,比如三天内系统出现了3次故障,每次持续1小时,那么平均可用时长是23小时;
  • MTTR(Mean Time To Repair,平均修复时长),系统从失效后到恢复正常所耗费的平均时间,比如前面提到的每次故障持续1小时;
  • SLA(Service-Level Agreement,服务等级协议),用于评估服务可用性等级,计算公式是MTBF/(MTBF+MTTR),一般我们所说的可用性高于 99.99%,是指 SLA 高于 99.99%。

通常我们在看监控数据的时候会关心这个指标。在使用第三方服务和平台的时候也会关注第三方平台的可用性指标,如某第三方支付平台可用性高于 99.999%。

如果一个系统的正常运行还依赖多个子系统,如下图所示,系统中有 a、b、c、d 四个子系统,只要其中一个子系统不正常,整个系统就无法正常工作,那么整个系统的 SLA = SLA(a)*SLA(b)*SLA(c)*SLA(d)。

如果两个子系统作为主备关系提供服务时,只有两个子系统都出问题了才会影响整个系统,那么SLA=1-(1-SLA(a1))*(1-SLA(a2))。

2.如何计算高并发指标?

通常我们用 QPS(Queries Per Second,每秒查询率)来衡量系统承载能力。

对于秒杀系统来说,通常用户数都是远大于库存数的。库存一旦抢完,秒杀活动基本结束。我们可以针对秒杀活动的特点,做以下分析。

  • 用户增长:月/年用户增长量是多少?是否有在社交平台推广?
  • 用户习惯:秒杀活动期间是否跟用户活跃时间重叠?用户是否会频繁点击秒杀按钮或者刷新活动页面?
  • 业务形态:是否是爆品?商品在购物车超时时间是多少?下单超时时间是多少?超时后库存是否需要归还?
  • 系统承载能力:系统底层数据库等资源承载能力如何?业务系统是否要扩容?

举个例子:

某电商通过观察数据统计得知,自己的日活大概有 600 万。活动期间,运营团队在社交媒体上推广,预计可拉新 50 万,那么活动当天日活大概就有 650 万。根据经验,活动期间活跃用户占日活用户 70%,那么参加这场活动的活跃用户大概有 455 万。

假如有一爆款商品,库存只有 1000 件,预计会有 30% 的活跃用户参加秒杀,那么参与抢购的人大概是 136.5万人。假如每个用户每秒触发 2 次请求,那么业务服务承载的 QPS 最高可能达到 273 万。另外,我们还知道它的底层 Redis 承载能力为 1 万 QPS。

根据业务服务承载最高值达 270 万 QPS 以及底层 Redis 承载能力 1 万 QPS,我们预留 10% ~ 20% 的余量,可以初步制定出并发指标:业务服务300万QPS,底层资源 8000QPS。

这里你可能会问了:为何业务服务的 QPS 要比实际的高,而底层资源 QPS 却比实际承载能力低呢?

其实这是一种保护措施:业务系统设计上保留余量,要比计算出来的 QPS 高一些,以防实际突发流量高于估算值导致系统不稳定;底层资源一般比较固定,不容易扩容,需要限制QPS不能超过其承载能力。总的来说,系统资源在设计上要留有 10% ~ 20% 的余量,以便应对突发流量。

引自:拉勾打造千万级流量系统

打造千万级流量系统——秒杀系统(需求篇)相关推荐

  1. 打造千万级流量秒杀第十六课 漏斗模型:如何将并发流量过滤和串行化?

    在前几讲中,我提到了秒杀单机并发能力需要达到 10 万 QPS 以上.你有没有想过:这 10 万请求是否都需要读写 Redis ?秒杀系统又是如何判断哪些请求应该读写 Redis? 我之所以提这个问题 ...

  2. 打造千万级流量秒杀系统第一课 功能需求:秒杀业务背景及前端需求是怎么产生的?

    你好,我是易乐天,到 2020 年,我在软件行业已经 10 年了. 我曾经做过 Linux 系统编程相关的工作,积累了许多性能优化方面的经验.后来,我开始做分布式系统的架构设计和实现,特别是项目当中涉 ...

  3. 打造千万级流量秒杀系统第六课 云架构:基础设施是如何做到高可用的?

    你好,欢迎进入模块三"高可用架构设计",这一讲我会和你聊聊云架构高可用原理以及秒杀系统是如何使用云架构的. 我为什么要跟你聊聊云架构呢? 实际上,许多互联网服务都是部署在云上的,这 ...

  4. 打造千万级流量秒杀第十课 Web 安全:如何解决重放攻击和 XSS 注入?

    上一讲,我给你介绍了 KV 存储.虽然用了 KV 存储后,服务整体性能和可用性都得到了提升,但是如果有人恶意捣乱,效果也会大打折扣.举个例子,如果秒杀系统有安全漏洞,导致有1/3 的是利用漏洞发起的恶 ...

  5. 如何打造一个抗住千万级流量短信服务(续)

    前言 在之前写过一篇博文<短信服务设计>当时讲述了设计的思路,有很多读者朋友反馈说想了解具体的设计思路:今天又重新回顾下当时的具体实现细节发现当时实现的还是有一些巧妙的地方,值得大家参考, ...

  6. 千万级在线推送系统架构解析

    2019独角兽企业重金招聘Python工程师标准>>> 千万级在线推送系统架构解析 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所接受 ...

  7. 00 如何设计一个秒杀系统——秒杀系统架构设计都有哪些关键点

    一.如何理解秒杀系统 秒杀系统其实主要解决两个问题,一个是并发读,一个是并发写.并发读的核心优化理念是尽量减少用户到服务端来"读"数据,或者让他们读更少的数据:并发写的处理原则也一 ...

  8. 千万级高并发秒杀系统设计套路!超详细解读~~

    曾经有一家巨头公司和我们公司进行战略合作,经过双方的不懈努力及精诚合作,双方公司决定共同举办一场秒杀活动,我们公司提供优质商品和强有力的吸引价格以及使用场景,对方公司提供巨大的用户流量,再加上我们公司 ...

  9. 老板让你抗住千万级流量,如何做架构设计?

    来源:cnblogs.com/GodHeng/p/8834810.html 随着互联网的发展,各项软件的客户量日益增多,当客户量达到一定峰值时,当数以万计的流量来临时,程序的顺利运行以及即时响应则显得 ...

最新文章

  1. lstm timestep一般是多少_用LSTM中的不同时间步长预测使用keras
  2. Centos环境下mysql源码编译安装
  3. 鸟哥的Linux私房菜(服务器)- 簡易 APT/YUM 伺服器設定
  4. vs怎么建java的控制台程序_像VS一样简单的打包“控制台”程序
  5. C语言指针用得好犹如神助!这些使用技巧值得收藏
  6. php mysql 库存变负数_php解决秒杀并发入库导致的库存负数
  7. VS中监视窗口,即时窗口和输出窗口的使用
  8. 总结一下数据库的 一对多、多对一、一对一、多对多 关系
  9. Delphi编写事件模型客户端(3)
  10. 网站敏感词过滤的实现(附敏感词库)
  11. LumaQQ.NET For Visual Studio 2005 代码下载
  12. 各省简称 拼音 缩写_中国省市县地区首字母缩写
  13. 还不重视!脸上有螨虫的几种表现?
  14. Thinkpad T410i升级问题
  15. 蓝队在攻防比赛中常用的防护手段汇总
  16. 论文精读(1)-- Lipschitz constrained parameter initialization for deep transformers
  17. linux查看所有文件
  18. 批量将多张图片的宽度和高度同时缩小一半,也可以按固定比例缩小
  19. 如何挑选自己喜欢的colormap样式
  20. 安装ubuntu服务器版本

热门文章

  1. 【C#】C# 中的回车换行符
  2. HTML5技术的发展前景解析
  3. 【HDL系列】乘法器(2)——阵列乘法器
  4. 计算机网络应用层协议分析总结
  5. java按键手机游戏51_开发基于Java语言的手机游戏
  6. python msgpack_windows 安装msgpack-python
  7. 【沃顿商学院学习笔记】商业基础——Operation Management:03运营管理活动中流程数据的详细分析
  8. BSP学习Day11 C语言基础 宏定义和宏函数 函数调用 类型转换 数组
  9. blockly android教程,【blockly入门指引】3,android-入门
  10. 如果把谷歌数据中心的数据都用打孔卡存起来