敏捷开发产品管理系列之八:基于业务设计技术架构兼谈12306性能问题)

在产品开发中,常常遇到产品性能问题,这些性能问题会很大程度上影响到产品的架构。

但解决这些性能问题,切莫认为只是技术人员的事情,产品经理和产品总监也要参与其中,甚至是业务人员(销售、售前)。

下面以12306的售票问题为例,来做一个完整的说明。

本文的目的,不是说技术性优化不必要,而是说作为开发人员不要闷头只想技术,而作为产品经理不要把所有“技术”问题推给开发人员,这一点很重要。

技术方案的局限性

12306为什么崩溃了?

原因众说纷纭,解决方案也众说纷纭。

到网上一搜“12306 性能”http://www.baidu.com/s?wd=12306+%D0%D4%C4%DC&rsv_bp=0&rsv_spt=3&inputT=8540支招者不计其数,但多数集中在技术方面。

本人对数据库一项所知甚少,也不懂如何优化,但下面我们从业务的角度看看有没有什么解决方法。

先看看这个方案:为何不上10倍的服务器?

很多人提出,如果上10倍的服务器(或10倍的内存/硬盘/……),可能就解决了拥堵问题。

实际上我也想过是否可以上10倍的火车,解决中国的春运问题。答案是不能。

因为任何能够满足春运数量的火车,在非春运的时候都会变成很大的负担,只能停在什么地方风吹雨淋等待下一个春运到来。

所以,突发性是核心矛盾,无论用技术方法,解决突发性是主要矛盾。

突发性的放大

除了很多人在这段时间买票之外,有一个正反馈过程加重了突发性,那就是买不到票。

可以说,访问人数无论上升还是下降,只要还有票,多数人都只会登录此网站一次,性能问题至少还是线性的。

但如果买不到票,或买不到某个车次的票,人们就会突然多次访问网站,性能问题就变成非线性的了。比如有一个人就刷新200多次,终于购票成功。

把200变回1,这不是一个简单地利用技术能解决的问题。

在某个攻略中也提到,由于人数太多,登录都需要20~30次才能完成。这些非线性因素,乘上本来就增加的人数,难免崩溃。

从业务角度思考问题

先胡写几个方案看看,先假设我不会编程。

1. 把提前售票时间从10天改为20天

“什么?”是的,这个傻方法差不多可以降低服务器负载50%。

2. 设计一个排队系统,完成登录

以前玩游戏的时候,经常因为部分服务器崩溃而无法登陆,不过,这时候都会出现一个排队系统:“您正在排队登录,前面还有1000人……900人……800人……(别乱动键盘啊,快到你了)”

这个是用来解决雪上加霜的突发性放大问题的。

我相信12306肯定为30亿人次的春运做过准备,只是没为6000人次的春运做准备,排队系统可以把人数重新变回30亿。

3. 设计一个排队系统,完成预订票

进去了,还是没有票,怎么办?每天抽空就上来看看,然后重新登录……刷新……又是一个突发性放大因素。

如果有一个排队系统,你按优先级排列上自己想买的几种票,甚至直接说“某月日,哪到哪,无论车次,有票就给我”,在家等着退票,或者偶然发出临时车次吧。

如果是我,我还会做个短信服务,如果买到了就短信通知;如果还在排队……如果你愿意接收,每排名向前10%,可以再发个短信;你耐不住性子想查询一下,也可以反向发个短信来,实时查询。

不过,短信要付费的,1毛一条,平价的。我听说短信分账是2:8开,电信才拿2分钱,剩下8分归铁道部,不知道现在是否还是这个规矩。

一个春运下来短信还能赚几亿(应该完胜CCTV的春晚),而且客户还挺高兴,毕竟这几毛钱解决了大问题了,免去半夜爬起来/请假/寒风中排队。撇开这些不说,一台台式机开机3小时就是一度电,6毛钱,管保3小时内你买不到票的;而现在能了(如果还有票)。

当然,如果铁道部愿意让利于民,免费发短信就更好了,不过如果能解决这个问题,相信实际上大家都会觉得让不让的都无所谓了;毕竟火车票10年没涨价,这些钱给人家发加班费吧。

另外这个排队系统还能把黄牛的刷票软件干掉,黄牛再多,也跟着十亿人民一起排队吧。

……

等等诸种业务方法,虽然不能解决有没有票的问题,但能解决购票的性能问题。

实际客户体验也要好得多,毕竟无论你怎么上服务器和优化技术,如果我还是上去200次,依旧耽误工作和生活,弄不好还的从黄牛党买票(他们有专业刷票软件,从性能优化的收益远超过我们)。

从业务角度思考技术架构

正题反而很简单了,如果要做技术架构,先要了解业务架构。

这一点要说服产品人员和业务人员参加进来,在http://cheny.blog.51cto.com/blog/3988930/1101425里边的案例中提及了如何让商务人员进行架构设计的问题。

更多相关文章
  • 本文是敏捷开发产品管理系列的第一篇.(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理)序言之前的“敏捷开发用户故事系列”已经提到了微观层面的需求管理问题.由于敏捷开发的提出者和实践者主要是开发团队及其 ...
  • 本文是敏捷开发产品管理系列的第二篇.(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理)本文是一篇旧文,原名为<“迭代期内无变更”与敏捷开发产品版本规划>,因符合本系列内容,做相应修改后重新 ...
  • 本文是敏捷开发产品管理系列的第一篇.(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理)这里所指的新产品研发,不是指自己企业的新产品,而是特指那种在行业中初创,前途不明,尚需市场检验的新产品.敏捷开发可 ...
  • 本文是敏捷开发产品管理系列的第七篇.(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理),也是敏捷开发团队管理系列(拟)中的一篇.目的在之前的<Product Servant>一篇中曾经提到 ...
  • 本文是敏捷开发产品管理系列的第三篇.(序言及设立迭代目标,产品版本规划,产品用户群规划,新产品研发,预估会议,Product Servant,Product Owner团队,产品线管理)上周在培训做“用户故事的用户建模”练习的时候,就有人提出一个疑问:这么短的时间里边,能定义好用户群和用户群分类吗? ...
  • 这是敏捷开发团队管理系列的第四篇.(之一,之二,之三,之四)整体上有两种测试团队的模型,既然都有存在,自然是各有各的道理.城里城外的人倒不必互相羡慕,只是要观察对面的优点,分析自己的缺点,尝试做点事情补偿一下.所以,下面多说一点各自的坏处.独立的测试团队这个就是著名的与程序团队打架的测试团队.好处独 ...
  • 敏捷开发团队管理系列之五:大型研发团队的切分
     抱歉在这次MPD上不知道中间的20分钟茶歇也在3小时内,所以最后有10分钟左右的内容没有讲,这里补充一下.大型团队的切分如果团队大到一定程度,比如40人,那么怎样切分团队最好呢?答案是纵向切分,就是按产品而非按职能切分,也就是事业部化,而非开发-测试-支持这样划分.原因大致如此:1. 纵向切分的团 ...
  • 问题大致问题:若人数在30人左右开发一个产品,里边的子系统数量比较多,每个子系统都有各自的发布计划,而又要协调.如果作为一个团队管理,人数会太多:分解为多个项目,协调又麻烦,如何处理?分析与方案这个问题很难有普遍适应的方法来处理,我结合之前自己做过的项目来说说.由于大型团队很难见到太成功复制的,所以 ...
一周排行
  • 对象作为map的key时,需要重写equals方法和hashCode方法
    对象作为 map 的 key 时,需要重写 hashCode 和 equals方法 如果没 ...
  • 实战使用Axure设计App,使用WebStorm开发–构建页面架构
    在本文中,将继续介绍在 WebStorm 中开发,去实现App的功能需求. 就像盖房子一样 ...
  • XenServer之虚拟机备份篇上PHDVirtualBackup
      如今的XenServer也有了快照技术,如果在做一些危险操作,可以先做一个快照,这样即 ...
  • 1.MongoDB简介2.MongoDB特点3.MongoDB功能4.MongoDB部署4.1 MongoDB单机部署4.2 MongoDB主从部署4.3 MongoDB分片部署附录一:MongoDB工具介绍附录二: ...
  • 1. 前言   netifilter最大的优点就在于其扩展性好,可以任意定义新的模块扩展其功能,而且结构比较容易理解,即使是新手也能很快掌握其规则配置方法.   2. 防火墙规则模式   Linux防火墙常见的ipt ...
  • 管理Oracle统计信息
     在CBO(基于代价的优化器模式)条件下,SQL语句的执行计划由统计信息来决定,若没有统计 ...
  • 项目中经常会遇到单例的情况.大部分的单例代码都差不多像这样定义: internal class SingletonOne { private static SingletonOne _singleton; priva ...
  • 下面主要介绍一下,在CentOS命令行环境下如何配置 ADSL 联网: 1.确保安装了网卡并能正常运行,使用命令查看一下网卡状态: [[email protected] simon]# /sbin/ifconfig eth ...
  • 今天在使用LINUX的时候,发现我的一个160G的大硬盘不能自动挂载具体弹出的信息如下:$LogFile indicates unclean shutdown (0, 0)Failed to mount '/dev/ ...
  • 用户权限管理    用户分类:        以下用户都映射为系统用户.        用户的验证都是基于PAM的.        匿名用户            anonymous            用户的根目 ...