来自 MailBox 的应用扩展经验

  • 崔康

2013 年 6 月 22 日

话题:移动语言 & 开发架构文化 & 方法

MailBox 可以算是创业社区的一个奇迹,从应用推出到被 DropBox 以 1 亿美元收购,仅仅用了不到 1 个月的时间,这样的成绩自然与其产品的受欢迎程度密不可分。最近,有国外媒体采访了 MailBox 应用的开发主管 Sean Beausoleil,深入了解了 MailBox 如何成功地处理用户数量迅速增长所带来的扩展性问题。

据 Beausoleil 透露,因为电子邮件应用设计到很多数据来源,所以从一开始,开发团队就做好了大规模后台系统的准备,无论是心理上的还是代码上的,但是百万用户的增长速度仍然超过了开发团队的预期。所以,他们通过一次次的迭代过程不断扩展 MailBox。

Beausoleil 把 MailBox 的扩展历程分为三个步骤,分别是:

  • 设计阶段,通过迭代过程慎重地考虑规模扩张。
  • 模拟阶段,通过对用户量的测试模拟来发现并修补产品存在的扩展性问题。
  • 反馈阶段,一旦产品上线,就对用户的负载压力快速做出响应,及时解决问题。

具体来说,“系统模块化”是开发团队在设计阶段的主要选择,这有利于迭代期间专注的处理某一个模块的具体问题,而不会被淹没在整体系统的复杂性之中。

而为了更好地模拟用户负载,MailBox 的开发团队搭建了相关的测试系统和模拟工具,这使得他们在产品发布之前发现了不少扩展性方面的问题,Beausoleil 认为如果这些问题在发布之后被发现,那么修补的成本和压力都会很高。

不过,无论在前期做了多少工作,发布的产品总不会是一个完美的系统,这也是开发团队的共识。所以,面对产品发布之后的问题,开发团队总是快速做出反应,深入分析问题的原因,并做好设计和约束方面的评估,然后付之于行动。

对于一款移动应用,用户体验是必须要重视的。MaiBox 很清楚这一点,作为一家聪明的创业公司,他们选择了一种聪明的方式来降低用户负载的增速——排队系统,这类似于饥饿营销,但是让用户又能够接受。MailBox 上线初期采用了排队注册的方式,虽然应用提供免费下载,但是下载后会自动开始排队,用户必须耐心等待获得注册。通过这种方式,开发团队获得了宝贵的喘息机会,他们对产品的扩展性迅速做出调整,满足了后续的发展势头。

Beausoleil 特别提到,MailBox 扩展性好的一个重要原因是限制了技术的数量,也就是说,开发团队专注于把自己熟练掌握的几门技术来打造一款出色的应用,而不是百花齐放,掺入过多的不同技术,一方面会让开发人员受到不断学习的压力(在项目上线初期,精力和时间是何其宝贵),另一方面也影响团队快速做出反馈的信心和实际效果。

MailBox 的后台基础设施采用了 Amazon 的 AWS 云服务,对于创业公司来说,这是一个不错的选择,没有太多的人力资源来管理一个专用的数据中心,AWS 的成本对创业者来说很划算。

Beausoleil 在回顾了 MailBox 发展过程之后表示,整个系统扩展的问题在事后总结时会觉得在发布之前就应该想到和解决,但实际操作过程中,只有开发团队经历之后,才会想到这些解决方案,所以只有通过不断的迭代、迭代、迭代在产品上线后随机应变地解决实际的扩展性问题。

highscalability 网站总结了这次采访的要点,主要包括:

  • 对产品发布后的信息提前进行收集。预热视频可以让用户对产品产生兴趣,同时也可以让你预见产品发布后的效果,并得到反馈信息,从而提前做出准备。产品拥有一些独一无二的特性。有特别之处才可以吸引用户,将创新之处列出清单,并逐个实现。
  • 开发团队了解产品背景。比如电子邮件业务对资源的需求就很高,并且对产品要求苛刻,所以需要尽快的扩展。Mailbox 初始只针对 Gmail 以及 iPhone,清晰狭窄的目标可以让你在产品设计上投入更多精力,做出更有针对性的项目。
  • 因为初期设计就是一个模块化系统,这样就可以根据需求对不同的组件进行迭代。建立模拟系统用以发现问题,这些测试解决了许多项目在运行过程中难以解决的问题,而这个重要的步骤一般被许多初创公司所跳过。将技术的数量限制到最小。因为精力是有限的,谁都不可能成为许多领域的专家,专注自己的产品开发才是王道。
  • 关注用户行为。核心基础设施的调整、分解或者删除宗旨在于适应用户的使用模式。云具有成本效益和高效两大特性,云是快速和有限资源构建应用的最佳搭档。
  • 通过排队系统限制新用户的增长速度。早期 Mailbox 的排队系统比产品更加出名,有些类似于“饥饿营销”,不仅刺激了用户,还以一种可控制模式有效的引导负载。这里的关键在于用户体验,而不是吸引新用户。开发者不断的修复故障并完善系统,在早期的开发中应该着重对待,这也是项目整个周期最高效的一个阶段。
  • 应用不可避免会发生故障并且进行修复。任何测试都是有条件的,许多未知的问题在特定的环境下就会爆发出来。通过不停的迭代,你将更加了解你的系统、数据和用户行为。 如果你现存的技术不再适合目前的环境,果断使用可替代方案去替换。花时间去做新的技术选择,然后在这些技术上下功夫。
  • 注意过程的重要性。经历整个产品周期,这是团队和产品磨合的重要组成部分。
  • 选择时机被收购。在 Mailbox 产品发布的一个月后就被 Dropbox 收购,原因是 Dropbox 可以帮助他们增长的更快、更大。
  • 良好的客户沟通。如果关注 Mailbox 的博客,你就会发现其团队在解释目前正在做的事情上做了很多的努力,足够多的细节让用户感到的是欣慰而不是困惑。
移动语言 & 开发架构文化 & 方法