首页 › 案例
亚马逊(Amazon) · 2002–2006

第六条

据一位前员工回忆,贝索斯曾下令:亚马逊所有团队之间只能通过服务接口打交道。不照做的,开除。

◷ 约 2 分钟

2011 年 10 月,谷歌工程师史蒂夫·叶格(Steve Yegge)在 Google+ 上写了一篇长帖,按 GeekWire 的统计有 4771 个词。这篇东西本来只想给谷歌同事看,文中还专门招呼了一句「在座 150 来位前亚马逊的同仁」。结果他手一滑,发成了全网公开。他很快删了帖,可帖子还是被人存了下来,照样讨论得很热闹。

叶格进谷歌之前,在亚马逊干了大约六年半。帖子最核心的,是他在那边亲历的一件事。大约 2002 年(他自己说,「前后差一年」),杰夫·贝索斯下了一道命令。照叶格的回忆,大意是这样的:

「所有团队今后都要通过服务接口,对外提供自己的数据和功能。」团队之间只能通过这些接口沟通。不许直接读别的团队的数据库,不许共享内存,不许留任何后门。用什么技术无所谓,「贝索斯不在乎」。每一个接口从设计第一天起,就得做到将来能对公司外部的开发者开放。

然后是第六条:「不照做的,开除。」

第七条是「谢谢,祝你愉快!」,叶格承认这是他自己加的玩笑。第六条,他写道,「是来真的,于是大家开始干活」。

关于怎么用服务搭软件,外面早就有不少文档和经验之谈。叶格说,放到亚马逊这么大的规模上,这些东西的用处,大概相当于提醒印第安纳·琼斯过马路要左右看。

接下来两年左右,亚马逊硬是把自己改造成了一堆服务的集合,工程师们一路踩坑,才知道代价在哪。一张故障工单,可能要在 20 个服务调用之间转来转去,才找到真正该负责的人。隔壁随便哪个团队,都可能一下子发来海量请求,把你的服务压垮,于是每个服务都得限定每个调用方最多能要多少。用叶格的话说:「按服务来组织,让团队学会了互相不信任,方式和不该信任外部开发者的那些方式大体一样。」

亚马逊首席技术官沃纳·沃格斯讲过公司这一边的版本,里面没有开除的威胁。他在 2019 年写道:1998 年,亚马逊所有开发团队都在同一个应用上干活,每次发布都得在所有团队之间协调一遍。后来,亚马逊把应用拆成一个个服务,也把组织拆成了一个个小而自主的团队,「小到两个披萨就能喂饱」。

沃格斯也讲到了后来的事。他写道,亚马逊在搭建高度可扩展的基础设施上的成功,「最终催生了新的核心能力,并促成了 2006 年 AWS 的创立」。叶格的说法是:贝索斯看出来,为卖书搭起来的这套机器,可以改造成一个给别的公司用的计算平台。

叶格这篇帖子,矛头其实对准的是自己的东家。他认为谷歌不懂平台。说到亚马逊的平台,他写道:「亚马逊的 AWS(aws.amazon.com)好得不得了。你自己去看,随便点点。真丢人。这些东西我们一样都没有。」

这件事里藏着几个道理

康威定律每个团队只能通过接口找别的团队,软件之间的分界线就成了团队之间的分界线。叶格说,团队之间学会了互相提防,提防的方式和提防外部开发者差不多。逆康威策略亚马逊想要一个由独立服务拼成的系统。据其首席技术官的说法,公司为此拆掉了按职能划分的层级,改成一个个小而自主的团队,每个团队管一块。协调机制以前团队可以直接读别人的数据,命令下来以后只剩一条标准:走接口,否则免谈。叶格列出了随之而来的新机制,从限定每个团队能调用多少次,到一个能查到所有服务的注册中心。两个披萨团队亚马逊首席技术官说,新团队小到两个披萨就能喂饱,每个团队专管一个具体的产品、服务或功能,说了算。

出处

  1. Steve Yegge, Stevey's Google Platforms Rant, Google+, October 2011 (archived copy, University of Washington CSE 452)
  2. GeekWire, Classic rant by Google engineer rips apart Google+ and describes Jeff Bezos as a micromanager, October 13, 2011
  3. Werner Vogels, Modern applications at AWS, All Things Distributed, August 28, 2019