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

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

1、

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

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

2、

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

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

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

3、

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

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

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

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

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

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

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

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

4.

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

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

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

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

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

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

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

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

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

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

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

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

教训六:不能信任任何人

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

原文地址:http://www.ruanyifeng.com/blog/2016/09/how_amazon_take_soa.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新闻发布项目——业务逻辑层(commentService)

package bdqn.newsManageServlet.Service;import java.util.List;import bdqn.newsManageServlet.Dao.commentDao; import bdqn.newsManageServlet.Dao.Impl.commentDaoImpl; import bdqn.newsManageServlet.entity.comment;/*** 新闻评论的业务逻辑层* author Administrator**…

linux 安装mysql 8.0_Linux安装mysql 8.0的详细方法介绍(代码示例)

本篇文章给大家带来的内容是关于Linux安装mysql 8.0的详细方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。经过一番努力下载mysql文件,我们可以开始Mysql8.0的安装了。解压文件// 解压文件生成…

亚信科技笔试面试2019届

首先笔试 笔试超级难 jsp 数据库 java 很多要百度 记得多找几个小伙伴哦~ 面试 一面: 技术面 讲一下你的项目 根据你的项目提问 面试官: 有哪些排序算法 我:冒泡 面试官: 只有一个冒泡? 我: 还有选择吧(我怕手写 &am…

Xamarin支持微软HoloLens混合现实开发

今年年初,微软以4亿美元的价格收购移动开发工具Xamarin,Xamarin允许开发者编写跨平台应用,提供Android、iOS和Windows10上原生应用体验。微软收购Xamarin后,Xamarin变得更加开放,比如Visual Studio用户免费使用&#x…

mysql fpmmm_zabbix配fpmmm(mpm)数据传送不了问题解决

我们环境用zabbix mpm来监控mysql,不过最近官网已经不叫mpm了,而是叫fpmmm,理由为:fpmmm is the successor of mpm. mpm was renamed to fpmmm because of the naming conflict with the Apache Multi-Processing Modules (MPM).好…

各种面试题(一)

转载自 各种面试题(一)1.说说你对缓存的理解? 1.使用缓存的目的: 提高应用程序的性能,减少到数据库的访问次数 2.缓存的介质(缓存的存储位置) 内存:临时性存储空间 存取数据快 减少网络通信量 硬盘&#…

浙大中控笔试面试2019届

学校招聘会投递简历 过了几天 叫我去滨江面试 先笔试 没人监考 (但是面试的时候会抽几道笔试题问你) 面试官是三个 吓尿了 面试官: 我: 面试官: JDBC会吗 讲一下 我: DriverManager获取连接对象..…

新闻发布项目——业务逻辑层(categoryTBService)

package bdqn.newsManageServlet.Service;import java.util.List;import bdqn.newsManageServlet.entity.categoryTB; import bdqn.newsManageServlet.entity.newsTb;/*** 新闻类别的业务逻辑层的接口* author Administrator**/ public interface categoryTBService {// 删除,根…

python初学函数_Python初学者速收藏!面向Python初学者的知识-函数

什么是函数式编程?函数式编程是一种编码范例,其中我们定义要做什么而不是执行什么动作。这个想法最初是从数学中采用的,我们定义输入到函数中的输入以及我们期望从中获得的输出。 函数式编程很少依赖状态管理-这意味着无论输出多少&#xff0…

通用业务流水号功能设计

有一段时间没有思考代码相关的工作了,最近项目经常碰到不同业务流水号的生成,下面的技术人员每次都针对流水号生成写一些复杂的代码;为了解放以后这方面的工作于是动了一下脑子想一个动态可配置的流水号生产组件,虽然没写代码一段…

时代银通笔试20181023

Java4种访问控制符 Java中的四个访问控制符权限从高到低分别为private、protected、包访问权限和private。访问控制符属于类所有,所以在方法中不能使用访问控制符修饰。访问控制符只能修饰类中的成员变量、成员方法和类本身。 1、private 修饰的成员变量&#xff…

总结Java常见面试题和答案

转载自 总结Java常见面试题和答案 int和Integer有什么区别? 答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。String和StringBuffer的区别? 答:String是不可变的对象&…

ubuntu 13.04 mysql_Ubuntu13.04 下MySQL5.6安装过程

1.mysql下载:按照自己系统选择 http://www.mysql.com/downloads/installer/2.mysql依赖包安装 (libaio1.so) 若已安装可以省略:sudo apt-get install libaio1sudo apt-get install cmake libncurses5-dev bison g (可不选,有问题时再执行)3.组及用户创建:sudo gro…

Exceptionless 本地部署

前两天看到了这篇文章免费开源分布式系统日志收集框架 Exceptionless,亲身体会了下,确实不错,按照官方的文档试了试本地部署,折腾一番后终于成功,记下心得在此,不敢独享。 本地部署官方wiki .NET 4.6.1 这个…

java文件读写

java.io几种读写文件的方式 一、Java把这些不同来源和目标的数据都统一抽象为数据流。 Java语言的输入输出功能是十分强大而灵活的。 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络…

经典笔试编程题--Java实现

转载自 经典笔试编程题--Java实现1.输入一个正数n,输出所有和为n的连续正数序列。 分析:设定两个指针,min指向和为n的连续正数序列的最小值,max指向和为n的连续正数序列最大值。sum表示真正的和。 初始情况下,min、max和sum 都指…

java虚拟机的内存模型_JVM(Java虚拟机)内存模型(转载/整理)

Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM是为Java字节码定义的一种独立于具体平台的规格描述,是Java平台独立性的基础。对于字节码指令集不感兴趣,直接看寄存器。JVM设置了4个最为常用的寄存器。它们是…

如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”

前言 面向对象的思想已经非常成熟,而使用C#的程序员对面向对象也是非常熟悉,所以我就不对面向对象进行介绍了,在这篇文章中将只会介绍面向对象在F#中的使用。 F#是支持面向对象的函数式编程语言,所以你用C#能做的,用F#…

新华三

百度 新华三 笔试题目 http://www.663395.net/xxs163090/ https://wenku.baidu.com/view/f61a1161ae1ffc4ffe4733687e21af45b307fe7d.html https://blog.csdn.net/qq_36562999/article/details/81436356 https://blog.csdn.net/kyyee/article/details/78090954?locationNum4&…

java面试题及答案(基础题122道,代码题19道)

转载自 java面试题及答案(基础题122道,代码题19道) JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象:  抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打…