web系统快速开发

http://www.internationalnewsandviews.com/wp-content/uploads/2017/03/flash-sale-banner.png

中国有一个著名的网站,几乎每个中国人都使用它,我们通常每年只使用一次-12306.com,即火车票预订系统。

当网站打开农历新年门票销售时,许多人都在电脑前等待并且准备在销售开始的确切时间点按“ reserve按钮。

然后,网站崩溃了,用户抱怨了。

(然后,软件工程师会反映如何修复它)

什么是闪购系统

上面的示例是一个典型的快速销售系统。 它通常具有以下特征:

  1. 大量用户同时进入系统,导致流量激增。 (门票销售从上午6点开始,并在上午6:30结束)
  2. 订购请求的数量远远大于库存大小。 (100万用户争夺10,000张门票)

有哪些挑战

  1. 处理读取负载。 用户将不断刷新页面以检查可用库存。 所有用户也可能同时请求其他类似资源,例如帐户,商品说明等。
  2. 提供高吞吐量。 有限的清单记录将有许多并发读写,因此数据库锁定可能会导致某些请求超时。
  3. 避免库存过高或过低。 如何处理可用的库存编号? 如果多个请求保留了相同的库存,则物品可能超卖。 如果保留了库存但流程失败并且未释放库存,则该项目可能会被抛售。 这发生在某些电子商务网站上,通常他们会打电话给客户退款。
  4. 防止使用脚本作弊。 用户可以编写脚本以循环触发请求。 因此该用户可能会产生许多重复的请求

设计注意事项

  1. 来自上游的限制请求:我们的库存有限,即使有100万用户,我们也只能为其中的1000个服务。 可以减少用户不必要的请求数量吗?
  2. 分散流量:根本原因是我们要求用户同时来,并造成峰值。 我们可以将销售分成不同的时段并邀请用户使用不同的时段吗?
  3. 异步处理:我们需要立即处理请求吗? 还是我们可以接受请求,以系统可以支持的速度处理请求并在可接受的时间内通知用户?
  4. 缓存,缓存,缓存:对资源的多次重复读取,永远不会/很少会更改。 我们可以将它们保留在缓存中以减轻数据库负载吗?
  5. 了解权衡并做出牺牲:我们真的需要显示实时库存吗? 我们一年只进行一次这种闪购,是否有必要倾销大量资源?
  6. 数据库设计:针对同一问题的不同架构设计将具有不同的权衡。
  7. 可扩展性:我们是否可以水平扩展以支持更多用户?

逐层优化

客户

当用户在提交请求后没有立即得到响应时,他们将倾向于一次又一次地单击按钮。 但是,这些请求是重复的,并且会给系统造成不必要的负载。 (假设每个用户再提交9个请求,那么系统收到的请求中有90%是冗余的)

我们可以做的是:

  1. 提交后禁用“提交”按钮
  2. 仅在最近1分钟内没有重复的请求时发送请求。

这将减少来自客户端的大多数不必要的请求,但是,这不会阻止用户编写脚本来绕过客户端限制。 因此,我们需要做更多的事情。

网关

当请求到达网关时,我们会跟踪同一用户的请求编号。 一种简单有效的解决方案是在内存中为每个用户ID保留一个计数器。

如果该用户最近提出了相同的请求,我们可以删除该请求或返回相同的响应。

但是,如果该用户创建了数千个用户帐户,该怎么办? 我们将在服务层中处理它。

服务

现在到达服务层的请求要少得多。 让我们开始处理它们。

  1. 管理可用库存

我们需要做的第一件事是检查可用库存。 我们如何获得剩余库存量?

首先,如果我们使用COUNT聚合查询数据库,则可能需要对事务具有可serialisable隔离级别,这会影响性能。 如果不应用此隔离级别,则可能会以幻象读取并认为此请求仍然有足够的库存,然后我们的销售量超过了现有量。

为了解决这个问题,我们可以使用原子性计数器。 当需要处理请求时,Redis将是原子减量的不错选择。

2.带消息队列的缓冲区

处理交易可能非常复杂且繁重。 例如,根据用户的忠诚度积分自动应用促销。

因此,让我们使用消息队列来缓冲请求,然后让服务按照自己的步调处理它。

数据库

现在,到达数据库的请求数量已大大减少到可接受的数量。

我们可以专注于设计更好的模式,优化查询以及可能对表进行分片。

讨论区

现在,我可以直接将此设计复制到我的项目中吗?

没有。 首先,这取决于您的要求。 其次,您可能不需要花费很多精力,可能还有其他更好的方法。

结论

这篇文章是Flash销售系统设计的简要案例研究。 它为正在解决类似问题的人们提供了总体指导,并可能为他们提供启发。

翻译自: https://hackernoon.com/developing-a-flash-sale-system-7481f6ede0a3

web系统快速开发

web系统快速开发_开发一个快速销售系统相关推荐

  1. 积分商城系统开发_专业提供积分商城系统定制解决方案

    积分商城系统开发_专业提供积分商城系统定制解决方案 一.什么是积分商城? 1.积分商城的第一种理解,偏重于"积分".即积分商城是专门为消化"积分"这一奖励而特设 ...

  2. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  3. javaweb JAVA JSP图书销售系统JSP网上书店商城JSP购物系统JSP网上书店JSP图书在线销售系统JSP图书商城jsp二手图书销售系统

    javaweb JAVA JSP图书销售系统JSP网上书店商城JSP购物系统JSP网上书店JSP图书在线销售系统JSP图书商城jsp二手图书销售系统 开发语言:Java 开发工具:Myeclispe ...

  4. java快递柜系统开发_他专注智能柜系统开发,产品日使用频次达60万次,服务近400厂家...

    陈巨擘:智能化生活无处不在! 大众创业万众创新,创业者成为时代的英雄.记录他们的坚持与努力,即是呈现这个时代的发展与变革,这是我们做"创业者专访"的初衷. 米库创业网(miku99 ...

  5. 导览系统定制开发_联联周边游系统源码定制开发平台方案

    点击上方关注我们! 联联周边游系统开发,找[金生157威6875店2419同号]联联周边游软件开发,联联周边游系统APP开发,联联周边游系统小程序开发,联联周边游系统开发模式,联联周边游系统平台开发, ...

  6. 抽奖功能java开发_基于Java实现抽奖系统

    摘要:这篇Java开发技术栏目下的"基于Java实现抽奖系统",介绍的技术点是"抽奖系统.Java.抽奖.基于.系统.实现",希望对大家开发技术学习和问题解决有 ...

  7. 鸿蒙系统下载地址_华为鸿蒙2.0系统下载-鸿蒙系统(HarmonyOS)下载 github源码版-当快软件园...

    鸿蒙系统,英文名HarmonyOS,是由华为公司打造的,而华为鸿蒙2.0系统全新升级,这是一款基于微内核的面向全场景的分布式操作系统,它可以适配于智慧屏,是一款"面向未来"的操作系 ...

  8. 华为鸿蒙系统是怎么样的一个系统,华为手机是什么系统,鸿蒙操作系统是一个怎样的系统...

    用来这么久的华为手机,大家知道华为手机是什么系统么?大家对EMUI和安卓之间的关系有所了解么?知道EMUI有什么特色么?接下来我们就来一起了解一下华为的EMUI系统吧. 华为手机是什么系统?目前华为大 ...

  9. java系统缓存应用_著名java开源缓存系统 【zz】

    目前在学习缓存的一些开源代码,查询到 一些资料分享给大家 以下是几个著名java开源缓存系统的介绍: OSCacheOSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何J ...

最新文章

  1. Java concurrent 学习
  2. dbda.class.php 下载,DBDA
  3. Redis基础知识之—— hset 和hsetnx 的区别
  4. vue路由跳转权限_如何在vue中实现路由跳转判断用户权限功能?
  5. hibernate oracle clob 注解,Hibernate3.X实现基于CLOB字段类型的注解方式:
  6. 图解面试题:找出数组中重复的数字?
  7. STM32工作笔记0062---定时器中断实验
  8. win10系统做游戏服务器吗,win10架构游戏服务器
  9. [2018.11.03 T1] 游戏攻略
  10. FunCode---游戏设计之Fireman(火柴人大战)
  11. 计算机组装主板,组装电脑如何选择合适的主板 组装电脑选择合适主板介绍【详解】...
  12. Windows安装curl及基本命令
  13. Callnovo全球联络中心云通讯CRM平台系列(一)
  14. 猫哥教你写爬虫 022--类与对象(下)
  15. 【16.8】苹果四代蓝牙耳机+吉萌兔保温杯+小红杯拿铁黑咖啡+公务员教材真题
  16. 视频教程-项目管理12个微案例-项目管理
  17. CleanMyMac多功能mac电脑管家清理软件
  18. 利用粤嵌LinuxGEC6818开发板实现电子相册
  19. events.js:174,throw er; //Unhandled ‘error‘ event
  20. foobar2000 1.4.4 正式版发布

热门文章

  1. 杠杆炒股中洗盘是什么?
  2. 【综合实训】图书管理系统——需求规格说明书
  3. 打小都说我聪明,自从学了Linux,我才如梦初醒
  4. 动态内表的俩栗子_SAP刘梦_新浪博客
  5. 正确率能很好的评估分类算法吗_机器学习算法优缺点对比及选择(汇总篇)
  6. Alpha冲刺——第八天
  7. 美专家起诉欧洲对撞机可能撞出黑洞毁灭地球
  8. Kinectfusion开源实现_配置Kinfu环境_Cmake编译PCL点云库_Kinect3D重建
  9. python+vue校园足球联赛管理系统django源码
  10. 使用mlpack解决机器学习基本算法之一准确率、精准率、召回率、F1以及mlpack中的Classify