写点什么

来自 MailBox 的应用扩展经验

  • 2013-06-22
  • 本文字数:2092 字

    阅读完需:约 7 分钟

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 的博客,你就会发现其团队在解释目前正在做的事情上做了很多的努力,足够多的细节让用户感到的是欣慰而不是困惑。
2013-06-22 08:411045
用户头像

发布了 501 篇内容, 共 232.9 次阅读, 收获喜欢 54 次。

关注

评论

发布
暂无评论
发现更多内容

DOM,Diff算法与Key机制

beifeng1996

React

以指标驱动业务决策,Kyligence 亮相 Gartner IT Symposium/Xpo™ 峰会

Kyligence

数据分析 指标中台 OLAP技术

《Go语言学习路线图》让你少踩坑,高效学,Let’s Go!

王中阳Go

golang 学习方法 技术专题合集 10月月更 “程”风破浪的开发者

常见的网路设备和网络参考模型,以及常见的网络层协议及数据通信过程

Python-派大星

10月月更

输入到页面展现到底发生什么?

loveX001

JavaScript

软件测试 | 测试开发工程师必读经典好书清单

测试人

软件测试 测试开发 测试工程师 测试书籍

MASA Framework 缓存入门与设计

MASA技术团队

.net MASA Framewrok MASA

“程”风破浪的开发者|模拟微信第一篇,nodejs搭建一套高性能分布式的在线文件服务

ike潮

学习方法 分布式 nodejs 文件服务器 “程”风破浪的开发者

前端经典面试题合集

loveX001

JavaScript

Vue的开发模式与webpack🔥

渔戈

前端 Vue3 10月月更

Java中的super和this关键字详解

共饮一杯无

Java 10月月更 super和this关键字

Go语言入门—06切片

良猿

Go golang 后端 10月月更

7 步保障 Kubernetes 集群安全

SEAL软件供应链安全

Kubernetes 云原生 Kubernetes 集群 企业号十月 PK 榜 审计日志

MobPush Android SDK集成指南

MobTech袤博科技

android Android Studio sdk

计算机网络 ,什么是Internet?什么是协议?TCP/UDP的区别以及优缺点 分组交换与电路交换的区别以及优缺点

Python-派大星

10月月更

技术分享 | 测试开发工程师必读经典好书清单,抽奖赠书送福利!

测吧(北京)科技有限公司

测试

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

Python列表和元组有什么区别

芥末拌个饭吧

后端 python 3.5+ 10月月更

数通路由交换之网络基础(一)

Python-派大星

10月月更

阿里前端二面高频react面试题

beifeng1996

React

全彩LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

【kafka运维】Topic的生产和消费运维脚本

石臻臻的杂货铺

kafka kafka运维 10月月更

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

校招面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

测吧(北京)科技有限公司

测试 测试开发

直面数字化挑战,戴尔PowerEdge R750最全面的通用服务器

科技热闻

React源码分析4-深度理解diff算法

goClient1992

React

来自MailBox的应用扩展经验_移动_崔康_InfoQ精选文章