亚马逊如何变成 SOA(面向服务的架构)?
上一篇文章,我摘錄了《程序員的吶喊》。這本書有趣的內(nèi)容太多,今天再摘錄一段。
1、
亞馬遜公司不僅是世界最大的網(wǎng)絡(luò)書店,還是世界最大的云服務(wù)商。它是怎么實(shí)現(xiàn)從電商到云商的轉(zhuǎn)變呢?
一切都是CEO杰夫·貝索斯促成的,他對(duì)市場(chǎng)有著超乎常人的理解和預(yù)見。
2、
2000年前后,貝索斯有一次在員工大會(huì)上提到,各種辦公工具、書籍、影音制品都可以數(shù)字化,所以也意味著很容易盜版。數(shù)字產(chǎn)品可能會(huì)利潤(rùn)越來(lái)越低,很快就不再產(chǎn)生任何收入了。
所有的民用工業(yè)品也都很不妙,服裝和電子消費(fèi)品的消費(fèi)周期越來(lái)越短。連烤爐這種東西,也沒(méi)人想要去年的型號(hào)。總之,賣這些東西,看上去也不太會(huì)賺大錢。
亞馬遜未來(lái)靠什么賺錢,貝索斯不僅憂心忡忡。
3、
2002年,貝索斯突然向全公司發(fā)布了一道指令。
(1)從今天起,所有的團(tuán)隊(duì)都要以服務(wù)接口的方式,提供數(shù)據(jù)和各種功能。
(2)團(tuán)隊(duì)之間必須通過(guò)接口來(lái)通信。
(3)不允許任何其他形式的互操作:不允許直接鏈接,不允許直接讀其他團(tuán)隊(duì)的數(shù)據(jù),不允許共享內(nèi)存,不允許任何形式的后門。唯一許可的通信方式,就是通過(guò)網(wǎng)絡(luò)調(diào)用服務(wù)。
(4)具體的實(shí)現(xiàn)技術(shù)不做規(guī)定,HTTP、Corba、PubSub、自定義協(xié)議皆可。
(5)所有的服務(wù)接口,必須從一開始就以可以公開作為設(shè)計(jì)導(dǎo)向,沒(méi)有例外。這就是說(shuō),在設(shè)計(jì)接口的時(shí)候,就默認(rèn)這個(gè)接口可以對(duì)外部人員開放,沒(méi)有討價(jià)還價(jià)的余地。
(6)不遵守上面規(guī)定,就開除。
他意識(shí)到,亞馬遜現(xiàn)有的賣書送書的基礎(chǔ)設(shè)施,其實(shí)可以變成一個(gè)非常出色、可定制的計(jì)算平臺(tái),讓用戶付費(fèi)使用。但是前提是,整個(gè)基礎(chǔ)設(shè)施必須改造成面向服務(wù)的架構(gòu)。
4.
接下來(lái)的幾年里,亞馬遜全公司都轉(zhuǎn)向了面向服務(wù)的架構(gòu)(SOA)。這個(gè)過(guò)程中,工程師們得到了大量的經(jīng)驗(yàn)教訓(xùn)。
教訓(xùn)一:SOA架構(gòu)的錯(cuò)誤定位,非常麻煩。
一個(gè)請(qǐng)求可能要經(jīng)過(guò)20次服務(wù)器調(diào)用,才能找到問(wèn)題的真正所在。通常,單單是問(wèn)題的定位就要花費(fèi)15分鐘到幾個(gè)小時(shí),除非搭建大量的外圍監(jiān)控和報(bào)警措施。
教訓(xùn)二:同事也是潛在的 DOS 攻擊者。
公司內(nèi)部某個(gè)小組,會(huì)突然對(duì)你的服務(wù)發(fā)起大量請(qǐng)求。除非每個(gè)服務(wù)都設(shè)有嚴(yán)格的用量和限量措施,否則根本無(wú)法保證可用性。
教訓(xùn)三:監(jiān)控和質(zhì)量保障(QA)是兩回事。
監(jiān)控一個(gè)服務(wù)的時(shí)候,可能會(huì)得到"一切正常"的回復(fù)。但是很有可能,整個(gè)服務(wù)唯一還正常工作的部分,就是這個(gè)回應(yīng)"一切正常"的模塊。只有完整地調(diào)用服務(wù),才能確定服務(wù)是正常的。
這意味著,真正監(jiān)控一個(gè)服務(wù),必須做到對(duì)所有的服務(wù)和數(shù)據(jù)進(jìn)行完整的語(yǔ)意檢查,否則是看不出問(wèn)題的。如果做到了這一點(diǎn),本質(zhì)上就是在做自動(dòng)化 QA 了。
教訓(xùn)四:必須有服務(wù)發(fā)現(xiàn)機(jī)制。
面對(duì)成百上千的服務(wù)時(shí),沒(méi)有服務(wù)發(fā)現(xiàn)機(jī)制是不可想象的。這又離不開服務(wù)注冊(cè)機(jī)制,而它本身也是一個(gè)服務(wù)。亞馬遜有一套統(tǒng)一的服務(wù)注冊(cè)機(jī)制,可以通過(guò)編程的方式找到所有服務(wù),包括一個(gè)服務(wù)有哪些API,目前是不是運(yùn)行正常,在什么位置等。
教訓(xùn)五:必須有沙箱用來(lái)調(diào)試
如果代碼中調(diào)用了他人服務(wù),查找問(wèn)題的難度要高很多,除非有統(tǒng)一的方式在沙箱里運(yùn)行所有服務(wù),否則幾乎不可能進(jìn)行任何調(diào)試。
教訓(xùn)六:不能信任任何人
團(tuán)隊(duì)采用服務(wù)的方式進(jìn)行合作以后,基本上就不能信任其他團(tuán)隊(duì)了,正如不能信任第三方工程師一樣。
原文地址:http://www.ruanyifeng.com/blog/2016/09/how_amazon_take_soa.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的亚马逊如何变成 SOA(面向服务的架构)?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用 Exceptionless 作为
- 下一篇: Xamarin支持微软HoloLens混