亞馬遜如何變成 SOA(面向服務的架構)?

阮一峰發表於2016-09-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,目前是不是執行正常,在什麼位置等。

教訓五:必須有沙箱用來除錯

如果程式碼中呼叫了他人服務,查詢問題的難度要高很多,除非有統一的方式在沙箱裡執行所有服務,否則幾乎不可能進行任何除錯。

教訓六:不能信任任何人

團隊採用服務的方式進行合作以後,基本上就不能信任其他團隊了,正如不能信任第三方工程師一樣。

(完)

相關文章