这周我们来学习一下小米的抢购系统开发实践。

小米公司在2011年8月16日首次发布了手机,立刻引起了市场轰动。随后,在一天多的时间内预约了30万台。之后的几个月,这30万台小米手机通过排号的方式依次发货,到当年年底全部发完。

然后便是开放购买。最初的开放购买直接在小米的商城系统上进行,但我们那时候完全低估了“抢购”的威力。瞬间爆发的平常几十倍流量迅速淹没了小米网商城服务器,数据库死锁、网页刷新超时,用户购买体验非常差。

市场需求不等人,一周后又要进行下一轮开放抢购。一场风暴就等在前方,而我们只有一周的时间了,整个开发部都承担着巨大的压力。

小米网可以采用的常规优化手段并不太多,增加带宽、服务器、寻找代码中的瓶颈点优化代码。但是,小米公司只是一家刚刚成立一年多的小公司,没有那么多的服务器和带宽。而且,如果代码中有瓶颈点,即使能增加一两倍的服务器和带宽,也一样会被瞬间爆发的几十倍负载所冲垮。而要优化商城的代码,时间上已没有可能。电商网站很复杂,说不定某个不起眼的次要功能,在高负载情况下就会成为瓶颈点拖垮整个网站。

摆在小米面前的是一道似乎无解的难题,它要达到的目标如下:

  • 只有一周时间,一周内完成设计、开发、测试、上线;
  • 失败的代价无法承受,系统必须顺畅运行;
  • 抢购结果必须可靠;
  • 面对海量用户的并发抢购,商品不能卖超;
  • 一个用户只能抢一台手机;
  • 用户体验尽量好些。

设计方案就是多个限制条件下求得的解。时间、可靠性、成本,这是我们面临的限制条件。要在那么短的时间内解决难题,必须选择最简单可靠的技术,必须是经过足够验证的技术,解决方案必须是最简单的。

在高并发情况下,影响系统性能的一个关键因素是:数据的一致性要求。在前面所列的目标中,有两项是关于数据一致性的:商品剩余数量、用户是否已经抢购成功。如果要保证严格的数据一致性,那么在集群中需要一个中心服务器来存储和操作这个值。这会造成性能的单点瓶颈。

在分布式系统设计中,有一个CAP原理。“一致性、可用性、分区容忍性”三个要素最多只能同时实现两点,不可能三者兼顾。小米要面对极端的爆发流量负载,分区容忍性和可用性会非常重要,因此决定牺牲数据的强一致性要求。

做出这个重要的决定后,剩下的设计决定就自然而然地产生了:

1. 技术上要选择最可靠的,因为团队用PHP的居多,所以系统使用PHP开发;

2. 抢资格过程要最简化,用户只需点一个抢购按钮,返回结果表示抢购成功或者已经售罄;

3. 对抢购请求的处理尽量简化,将I/O操作控制到最少,减少每个请求的时间;

4. 尽量去除性能单点,将压力分散,整体性能可以线性扩展;

5. 放弃数据强一致性要求,通过异步的方式处理数据。

本文参考文献:《程序员》杂志精选:“米粉节”背后的故事——小米网抢购系统开发实践

转载于:https://www.cnblogs.com/sunshine-z/p/11055054.html

读《小米网抢购系统开发实践》有感相关推荐

  1. 读《豆瓣的基础架构》有感

    豆瓣整个基础架构可以粗略的分为在线和离线两大块.在线的部分和大部分网站类似:前面用LVS做HA,用Nginx做反向代理,形成负载均衡的一 层:应用层主要是做运算,将运算结果返回给前面的用户,DAE平台 ...

  2. 15读《算法基础》有感——决策树

    15读<算法基础>有感--决策树 学完本学期的<算法设计与分析基础>,想对"决策树"做进一步的了解,于是读了Rod Stephens<算法基础> ...

  3. simplify逆向_Simplify-SDK-一种以代码形式管理基础架构的框架。

    simplify逆向 When working with AWS services, you've got several choices to build and deploy your lambd ...

  4. View 5.1 重装上阵(4—基础架构篇)

    从底层架构方面来看,VIEW 5.1最大的改进在于引入了Content-Based Read Cache(CBRC) 技术,大大降低了部署桌面虚拟化所带来的IOPS风暴,同时大大降低了对于存储的压力和 ...

  5. 聊聊 Kafka: Kafka 的基础架构

    一.我与快递小哥的故事 一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音.突然,我的电话铃声响起了,顿时打破了这种安静. 我:喂,哪位? 快递小哥:我是顺丰快递的, ...

  6. 机器学习的中流砥柱:用于模型构建的基础架构工具有哪些?

    本文转载自公众号"读芯术"(ID:AI_Discovery) 人工智能(AI)和机器学习(ML)已然"渗透"到了各行各业,企业们期待通过机器学习基础架构平台,以 ...

  7. 数据中心基础架构 22 年演进

    01 前言 当今世界正处在信息技术(IT)创新的黄金时代.由机器学习.物联网和大规模可扩展应用支持的云计算.移动应用.大数据分析的巨大力量正在重塑商业和社会的方方面面.而这场IT复兴的中心,则是超大规 ...

  8. k86跟mysql_MySQL【基础架构】

    一.前言 平时我们使用数据库,看到的通常都是一个整体. select * from T where ID=10: 对于上述语句,我们看到的只是输入一条语句,返回一个结果,却没有关注这条语句在 MySQ ...

  9. 译 | .NET Core 基础架构进化之路(一)

    原文:Matt Mitchell 翻译:Edi Wang 随着 .NET Core 3.0 Preview 6 的推出,我们认为简要了解一下我们基础设施系统的历史以及过去一年左右所做的重大改进会很有用 ...

  10. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

最新文章

  1. 64位环境启用ASP.net 2.0的32位扩展
  2. 【Maven学习】定制库到Maven本地资源库
  3. Win10系列:JavaScript图形
  4. java win7 jdk_WIN7下配置JDK并运行JAVA的过程
  5. Android之如何解决popupWindow(pw.setFocusable(true))按返回键和menu键退出
  6. bootstrap到底是用来做什么的(概念)
  7. 中国大学慕课python答案第七章_中国大学慕课mooc用Python玩转数据章节答案
  8. 华为发布智能数据解决方案FusionData,重定义数据基础设施,释放数据价值
  9. react实战之cnode—01环境配置
  10. pic单片机 c语言开发环境,《PIC单片机开发环境入门》.pdf
  11. BCIduino脑电/肌电放大器结合eprime做实验流程说明
  12. Java课设——文本编辑器
  13. U盘启动BIOS设置
  14. 高维正方体(找规律+二项式定理+逆元)
  15. 注册表-在IE上永久显示我的名字www.baidu.com - 朱建强
  16. jQuery圆点slider轮播插件
  17. aso是做什么的_ASOer的目标
  18. 图片img标签设置默认图片
  19. 6to4隧道实验配置
  20. 机器学习中,什么是线性和非线性?

热门文章

  1. 好分数班级等级C_2020年上海高校MTA旅游管理硕士分数线汇总
  2. ROS机器人Diego 1#制作(三)base controller---ros_arduino_bridge
  3. CC2640R2F BLE5.0 开发向导
  4. 谈谈常见的迭代优化方法
  5. Word怎样转换成PDF文件? 迅捷Word与CAD互转图文教程
  6. 位、字节、kb、mb等单位的换算
  7. VR虚拟现实的工作原理,你知道多少?【转】
  8. IT创业正当时——掘金App Store
  9. 2005年乔布斯在斯坦福大学毕业典礼上的演讲
  10. 信息资源管理思维导图