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

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

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

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

这时开发组面临一个选择,是继续在现有商城上优化,还是单独搞一套抢购系统?我们决定冒险一试,我和几个同事一起突击开发一套独立的抢购系统,希望能够绝境逢生。

HTTP服务层主要功能如下:

  1. 进行基本的URL正确性校验;

  2. 对恶意访问的用户进行过滤,拦截黄牛;

  3. 提供用户验证码;

  4. 将正常访问用户数据放入相应商品队列中;

  5. 等待业务处理层返回的处理结果。

业务处理层主要功能如下:

  1. 接收商品队列中的数据;

  2. 对用户请求进行处理;

  3. 将请求结果放入相应的返回队列中。

用户的抢购请求通过消息队列,依次进入业务处理层的Go进程里,然后顺序地处理请求,将抢购结果返回给前面的HTTP服务层。

商品剩余数量等信息,根据商品编号分别保存在业务层特定的服务器进程中。我们选择保证商品数据的一致性,放弃了数据的分区容忍性。

技术方案需要依托具体的问题而存在。脱离了应用场景,无论多么酷炫的技术都失去了价值。

转载于:https://www.cnblogs.com/andibier/p/11055459.html

小米网抢购系统开发实践阅读心得相关推荐

  1. 小米网抢购系统开发实践和我的个人观察

    本文个人观察部分,为自己的一点看法. 正文内容,转载于 <程序员>2014年11月刊:电商峰值系统架构设计 http://www.csdn.net/article/2014-11-04/2 ...

  2. 《小米网抢购系统开发实践》读后感

    原文地址:    https://mp.weixin.qq.com/s/ecU_CjTluQUX-420v3nWTQ 今天读了<小米网抢购系统开发实践>这篇文章,感受如下: 首先文章介绍了 ...

  3. 读《小米网抢购系统开发实践》有感

    这周我们来学习一下小米的抢购系统开发实践. 小米公司在2011年8月16日首次发布了手机,立刻引起了市场轰动.随后,在一天多的时间内预约了30万台.之后的几个月,这30万台小米手机通过排号的方式依次发 ...

  4. 秒杀(小米网抢购系统开发实践--“米粉节”背后的故事)

    摘要:今年4月的"米粉节"对小米网来说意义非凡,是其彻底重构后迎来的一次全面压力测试,涉及网站前端.后台系统.仓储物流.售后等各环节.高并发的负载能力.稳定性.准确性等已不是问题, ...

  5. 小米网抢购系统开发实践

    2014年的米粉节 2014年4月9日凌晨,我和同事们对小米网的抢购系统做了最后的检查与演练.几个小时后,小米网今年开年来最重要的一次大型活动"米粉节"就要开始了. 这次米粉节活动 ...

  6. 升讯威微信营销系统开发实践:订阅号和服务号深入分析( 完整开源于 Github)...

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  7. 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)...

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  8. 升讯威微信营销系统开发实践:(4)源代码结构说明 与 安装部署说明( 完整开源于 Github)...

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  9. 升讯威微信营销系统开发实践:(1)功能概要与架构设计( 完整开源于 Github)...

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

最新文章

  1. 从一个面试题看程序员的几项基本功
  2. PHP上传文件大小限制问题 post_max_size对大小的影响及解决方法
  3. [数据库] Oracle单表查询总数及百分比和数据横向纵向连接
  4. qsort()函数详解
  5. SSH服务--Linux学习笔记
  6. linux mysql关闭启动不了了,linux启动或关闭mysql失败的解决办法
  7. XFire报错:org.codehaus.xfire.fault.XFireFault
  8. windows2003配置
  9. Elasticsearch--进阶-term_keyword查询---全文检索引擎ElasticSearch工作笔记015
  10. linux DISPLAY变量
  11. linux /etc/security/limits.conf的相关说明
  12. AIR如何实现窗口顶置
  13. 物联网和工业物联网有什么区别?
  14. Excel表Ctrl+v和Ctrl shift+v有什么区别_Excel表格操作技巧,超实用
  15. zoj 2975 Kinds of Fuwas(数学题)
  16. 白鹭引擎egret打包成微信小游戏
  17. HTML利用posotion属性定位 小技巧
  18. 利用iframe跨域请求
  19. 正确卸载Visual Studio 2015
  20. 迈普路由器访问控制列表配置命令_cisco访问控制列表acl所有配置命令详解

热门文章

  1. centos7安装nvida显卡驱动
  2. 桂电信科17级c语言期末试卷,桂电期末考试Linux习题总结
  3. 解决iPhone经常收到共享相簿广告
  4. html5图片看不见,html5 绘制图片 drawImage
  5. Python+Selenium实现12306买票
  6. 万能播放器 PotPlayer 的下载与安装,直播流 m3u8 导入
  7. iec104协议测试软件弓口虫,IEC104测试工具
  8. 美化CodeBlocks的主题和字体
  9. Linux下文件的编译
  10. 手机相机里面的m_我的数码相机设置里面有个图像尺寸分L、M、S,有何用