阮一峰

日期: 2016年9月10日

上一篇文章,我摘录了《程序员的呐喊》。这本书有趣的内容太多,今天再摘录一段。

1、

亚马逊公司不仅是世界最大的网络书店,还是世界最大的云服务商。它是怎么实现从电商到云商的转变呢?

一切都是CEO杰夫·贝索斯促成的,他对市场有着超乎常人的理解和预见。

2、

2000年前后,贝索斯有一次在员工大会上提到,各种办公工具、书籍、影音制品都可以数字化,所以也意味着很容易盗版。数字产品可能会利润越来越低,很快就不再产生任何收入了。

所有的民用工业品也都很不妙,服装和电子消费品的消费周期越来越短。连烤炉这种东西,也没人想要去年的型号。总之,卖这些东西,看上去也不太会赚大钱。

亚马逊未来靠什么赚钱,贝索斯不仅忧心忡忡。

3、

2002年,贝索斯突然向全公司发布了一道指令。

(1)从今天起,所有的团队都要以服务接口的方式,提供数据和各种功能。

(2)团队之间必须通过接口来通信。

(3)不允许任何其他形式的互操作:不允许直接链接,不允许直接读其他团队的数据,不允许共享内存,不允许任何形式的后门。唯一许可的通信方式,就是通过网络调用服务。

(4)具体的实现技术不做规定,HTTP、Corba、PubSub、自定义协议皆可。

(5)所有的服务接口,必须从一开始就以可以公开作为设计导向,没有例外。这就是说,在设计接口的时候,就默认这个接口可以对外部人员开放,没有讨价还价的余地。

(6)不遵守上面规定,就开除。

他意识到,亚马逊现有的卖书送书的基础设施,其实可以变成一个非常出色、可定制的计算平台,让用户付费使用。但是前提是,整个基础设施必须改造成面向服务的架构。

4.

接下来的几年里,亚马逊全公司都转向了面向服务的架构(SOA)。这个过程中,工程师们得到了大量的经验教训。

教训一:SOA架构的错误定位,非常麻烦。

一个请求可能要经过20次服务器调用,才能找到问题的真正所在。通常,单单是问题的定位就要花费15分钟到几个小时,除非搭建大量的外围监控和报警措施。

教训二:同事也是潜在的 DOS 攻击者。

公司内部某个小组,会突然对你的服务发起大量请求。除非每个服务都设有严格的用量和限量措施,否则根本无法保证可用性。

教训三:监控和质量保障(QA)是两回事。

监控一个服务的时候,可能会得到"一切正常"的回复。但是很有可能,整个服务唯一还正常工作的部分,就是这个回应"一切正常"的模块。只有完整地调用服务,才能确定服务是正常的。

这意味着,真正监控一个服务,必须做到对所有的服务和数据进行完整的语意检查,否则是看不出问题的。如果做到了这一点,本质上就是在做自动化 QA 了。

教训四:必须有服务发现机制。

面对成百上千的服务时,没有服务发现机制是不可想象的。这又离不开服务注册机制,而它本身也是一个服务。亚马逊有一套统一的服务注册机制,可以通过编程的方式找到所有服务,包括一个服务有哪些API,目前是不是运行正常,在什么位置等。

教训五:必须有沙箱用来调试

如果代码中调用了他人服务,查找问题的难度要高很多,除非有统一的方式在沙箱里运行所有服务,否则几乎不可能进行任何调试。

教训六:不能信任任何人

团队采用服务的方式进行合作以后,基本上就不能信任其他团队了,正如不能信任第三方工程师一样。

(完)

亚马逊如何变成 SOA(面向服务的架构)?的更多相关文章

  1. 使用AWS亚马逊云搭建Gmail转发服务(三)

    title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...

  2. 使用AWS亚马逊云搭建Gmail转发服务(二)

    title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...

  3. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  4. 亚马逊如何变成 SOA(面向服务的架构)

    . 亚马逊公司不仅是世界最大的网络书店,还是世界最大的云服务商.它是怎么实现从电商到云商的转变呢? 一切都是CEO杰夫·贝索斯促成的,他对市场有着超乎常人的理解和预见. 2. 2000年前后,贝索斯有 ...

  5. 为什么亚马逊云计算中的DNS服务叫Route53?

    最近在用亚马逊的云计算服务,看到它的DNS服务的名字叫做"Route 53".这个名字让我很好奇,为什么叫"Route 53"呢?有什么特殊含义? 看到了这个Q ...

  6. 使用WCF实现SOA面向服务编程—— 架构设计

    原文地址:http://www.cnblogs.com/leslies2/archive/2011/03/29/1997889.html SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就 ...

  7. SOA面向服务体系架构

    SOA概念 1.什么是SOA 面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型. 它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的 ...

  8. SOA面向服务的架构理解

    Ø  单一应用架构 ·当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. Ø  垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几 ...

  9. SOA面向服务的架构

    1.关于SOA的定义,目前主要有以下三个: 1)W3C的定义:SOA是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成 ...

随机推荐

  1. C程序演示产生僵死进程的过程

    先抄录网上一段对僵死进程的描述: 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中.这种 ...

  2. usaco silver刷水~其实是回顾一下,补题解

    [BZOJ1606][Usaco2008 Dec]Hay For Sale 裸01背包 ;i<=n;i++) for(int j=m;j>=a[i];j--) f[j]=max(f[j], ...

  3. nginx 中 PHP 调用PEAR.php遇到的问题

    公司有个老项目,写了很多年了,是在apache 上面跑的,无意间,我想让它跑到nginx上,结果遇到了PEAR.php的问题,先安装pear 基本安富有就是 wget http://pear.php. ...

  4. 分模块创建maven项目(一)

    maven是一个项目构建和管理的工具. 我们可以通过maven仓库可以实现管理构建(主要是JAR还包括:WAR,ZIP,POM等等). 我们可以通过maven插件可以实现编译源代.产生Javadoc文 ...

  5. 遍历Map的两种方法(有排序)

    初始化一个map Map<String, String> map = new HashMap<String, String>(); map.put("1", ...

  6. Vim 常见操作

    1.复制所有内容 按照此顺序敲即可:gg(光标定位到文件头)  V(选中该行) G(选中该行开始到最后一行结尾) y(复制选中内容) 2.粘贴所有内容 正常模式下,敲p即可,如果遇到粘贴内容不全,需要 ...

  7. js的extend和fn.extend使用

    $.fn.extend扩展的是一个jQuery对象函数,$.extend扩展的是一个jQuery全局函数 <!DOCTYPE html> <html> <head> ...

  8. 解决谷歌浏览器和360浏览器 input 自动填充淡黄色背景色的问题

     input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px white inset;}

  9. 重新启动 Apache 以加载上面安装的模块

    尽管Ubuntu 是一种新兴的Linux分支,但Ubuntu 组织却为Apache提供了丰富的支持软件,这些软件都可以从发行版的光盘获取,也可以从官方站点轻松下载.所以,Ubuntu非常适合作为Web ...

  10. Ubuntu Linux上安装oracle jdk

    说明:由于很多系统不支持使用OpenJDK,因此在ubuntu下会需要安装Oracle JDK.而Oracle JDK的安装貌似没有提供apt方式,因此安装Oracle JDK的方式相对麻烦一些,我经 ...