近年來,微服務因其良好的伸縮性和靈活性備受各大巨頭科技公司的青睞,微服務儼然已成為技術社區的一個熱門詞匯。作者Susan Fowler從她在Uber成功實施微服務的經驗出發,結合其他各大公司工程師的意見和建議,制訂了一組生產就緒微服務的標準。作者在書中不僅對這組標準的各項細節展開了深入的討論,還提供了一個檢查清單,用于幫助讀者了解自己的微服務生態系統是否符合生產就緒標準。
譯者序
微服務在最近幾年逐漸成為一個熱門的技術新名詞,受到技術社區的熱捧。一些巨頭公司,特別是那些互聯網公司,用戶規模在不斷增長,業務需求變得日益復雜,開發團隊的規模也隨之膨脹,一般的單體應用早已無法滿足公司發展的需求。微服務的出現可以說是行業發展到一定階段的必然產物。確切地說,微服務并不是一門技術,而是一種架構風格。你可以使用任何一門開發語言、任何一種框架來實現一個微服務。微服務容易開發、理解和維護,可以獨立部署、獨立伸縮,非常靈活。
通過將單體應用分解成微服務,解決了復雜性問題。每個微服務負責處理單一的任務,微服務之間通過定義好的接口相互通信,最后組成一個龐大的微服務生態系統。看似我們繞了一個大圈子,其實則不然。
每個微服務就是一個獨立運行的應用,分別由專門的團隊負責開發,開發人員可以自由選擇他們熟悉的技術,也可以采用最新的技術,而且可以快速做出變更。所以對于開發人員來說,微服務給他們帶來了極大的自由度,同時極大地提升了開發速度。
每個微服務可以獨立開發、獨立部署,而不像單體應用那樣牽一發而動全身。每個微服務可以獨立演化,在快速做出變更后進行部署,如果有必要,每天可以進行多次部署,因為微服務體積小,所以構建時間短,部署起來也非常方便。
每個微服務都可以獨立伸縮,可以根據具體情況為每個微服務部署不同數量的實例,也可以為不同的微服務選擇不同的硬件。比如,對于不是很關鍵的微服務可以使用便宜的硬件,對于負載不是很高的微服務就可以少部署幾個實例。而對于高負載的關鍵微服務則多部署一些實例,并使用更好的硬件。
不過,采用微服務架構的門檻其實是很高的。Martin Fowler認為,一個公司要采用微服務,必須滿足三個基本前提條件,即快速配置能力、基本的監控能力和快速部署能力。而除此之外,要成功實施微服務,還有其他很多重要的因素需要考慮。作為 Uber的網站可靠性工程師,Susan Fowler在 Uber內部致力于微服務的標準化,制訂生產就緒微服務的標準,并幫助微服務團隊成功實施微服務。 Susan基于她在 Uber成功實施微服務的經驗,并結合她與其他公司工程師之間就微服務話題進行的討論,總結出了一套生產就緒微服務的標準。本書列出的一組生產就緒微服務的檢查清單可以作為成功實施微服務的參考標準。
不過話說回來,在軟件技術領域并不存在什么銀彈。微服務并不適合所有公司,在考慮是否采用微服務之前要先了解清楚自己的問題。先仔細想清楚,你的問題一定只能通過微服務來解決嗎?如果是,那么你具備了實施微服務的條件了嗎?不要只是因為那些巨頭公司采用了微服務就盲目崇拜他們,如果走錯了路,到最后只會給你帶來慘痛的教訓。
這不是一本描寫具體技術實現的書,沒有代碼,沒有具體的開發框架。但是它也不是只空講理論,本書列出的生產就緒微服務的標準完全來自于 Uber和其他公司的最佳實踐,而且從目前來看,可以說是前無古人,后無來者的一次針對實施微服務的大總結。
這本書值得所有的技術總監、架構師、網站可靠性工程師和開發工程師一讀。先拋開腦子里的代碼、開發框架,用宏觀的視角審視微服務,了解微服務的本質。所謂知己知彼,百戰不殆,只有了解了微服務的本質,才能不被其左右。當然,如果你真的需要微服務,而且具備了實施微服務的條件,那么這本書一定會給你帶來不可限量的驚喜!
薛命燈 2017年 6月于上海
譯者簡介
薛命燈,畢業于廈門大學軟件學院,具有十余年軟件開發和架構經驗。技術涉獵十分廣泛,從前端到后端,從各種編程語言到分布式軟件架構,從企業應用到大數據。在工作之余,愛好攝影和技術翻譯,是 InfoQ的優秀社區編輯。
前言
在作為網站可靠性工程師(SRE)加入到 Uber工作之后,我提出了生產就緒標準的倡議,并在 Uber實施了幾個月,這本書也隨之誕生。Uber龐大的單體 API正逐漸被分解成微服務,在我加入 Uber那會兒,已經有上千個從單體 API分離出來的微服務,它們獨立于單體系統運行。每個微服務都有專門的開發團隊進行設計、開發和維護,但 85%的微服務幾乎沒有 SRE。
招聘 SRE和打造 SRE團隊不是一件容易的事情, SRE比其他類型的工程師更難找:網站可靠性工程師是一種新型職位, SRE必須(至少在一定程度上)是軟件工程、系統工程和分布式系統架構方面的專家。在短時間內為所有的團隊配備內部 SRE團隊是不可能的,于是我的團隊(SRE咨詢團隊)誕生了。我們的目標很簡單:推動這些沒有 SRE的團隊實施高標準化。
雖然我們的任務很簡單,但并沒有明確的指示,所以我和我的團隊就有了一定的自由空間來定義一系列標準,Uber所有的微服務都可以遵循這些標準。從一開始就讓這個龐大組織的每個微服務都遵循高標準不是一件容易的事情,于是在我的同事 Rick Boone(他的微服務高標準為這本書帶來了啟發)的幫助下,我創建了一個詳細的標準檢查列表。我相信,Uber的每一個微服務在進入生產環境之前都應該遵循這些標準。
我們需要提煉出一系列原則,并提出具體的要求。最后我們提出了 8項原則: Uber的每個微服務都應該具備穩定性、可靠性、伸縮性、容錯能力、高性能、可監控、文檔化和災備能力。每個原則都包含了具體的標準,這些標準對每個原則的具體含義進行了定義。重點是,我們要求每個原則都可以被量化,量化結果有助于提升微服務的可用性。如果一個微服務滿足了這些標準和要求,我們就說它是生產就緒的。
如何在團隊里高效地推行這些標準是接下來要做的事情。我建立了一個流程,對于關鍵性業務服務(這些服務的中斷會拖垮整個應用),SRE團隊需要在團隊間展開架構評審,收集審計反饋(關于每個服務是否滿足生產就緒要求的檢查列表),創建詳細的路線圖(把微服務帶向生產就緒狀態的詳細指南),并為每個服務的生產就緒程度打分。
架構評審是整個流程中最為重要的部分:所有相關的開發人員被聚集到一個房間里,他們被要求在 30 min或更短的時間內在白板上畫出服務的架構圖。我的團隊和開發人員可以快速地定位問題。當把微服務和所有相關元素(端點、請求消息流、依賴項等)都畫在一起時,每一個故障點都會變得清晰可見。
架構評審卓有成效。每次評審之后,我們會核對檢查列表,看看服務是否滿足生產就緒要求,然后把結果分享給開發團隊的經理和開發人員。我發現,在對服務進行生產就緒評估時,簡單的生產就緒與否不足以準確地反映評估情況,所以我們加入了打分機制。每一項要求都對應一個分數,這些分數最后匯總成總分。
審計之后是創建路線圖。路線圖包含服務未能滿足生產就緒要求的列表項,以及近期發
生的中斷情況、改進措施的描述、任務鏈接,以及相關開發人員的名字。
在做完這個流程(也被稱為 Susan Flowler的生產就緒流程即服務)的生產就緒檢查之后,下一步是對整個流程進行自動化,以便讓 Uber所有的微服務持續地執行這個流程。在寫這本書的時候,無畏的 Roxana del Toro正領導著他的 SRE團隊對整個流程進行自動化。
生產就緒標準里的每一項要求和實現細節都是我和我的 SRE同事們經過無數個小時的細心工作才總結出來的。我們做了大量筆記,有過無數次的討論,對微服務的方方面面(它們零零散散,有的領域甚至是一片空白)進行了全面調研。我與 Uber和其他公司的微服務開發團隊進行過交流,討論如何對微服務進行標準化,看看是否存在一組標準原
則可以應用在任意的微服務上,并對業務產生可量化的影響。這本書就是基于這些筆記、
討論、會議和調研而寫的。
在與舊金山海灣地區其他公司的網站可靠性工程師和軟件工程師進行交流之后,我才知道,在 SRE領域,乃至整個技術行業,這都是一件非常有意思的事情。當有工程師向我詢問微服務標準化和構建生產就緒微服務的相關問題時,我可以給他們提供建議,于是我寫了這本書。
在寫這本書的時候,關于微服務標準化的資料很少,關于如何構建和維護微服務生態系統的指南也很少,而當那些對單體應用進行微服務拆分的工程師問起下一步我們該怎么辦時,更是沒有一本書能夠解答這個問題。我寫本書的目的就是希望能夠填補這些空白,并解答這個問題。當初我開始著手對 Uber進行微服務標準化的時候是多么希望能有這樣一本書啊。
這本書為誰而寫
這本書主要是為微服務軟件工程師和網站可靠性工程師而寫的,他們要么苦于不知道該如何對單體系統進行分解,要么正在著手構建新的微服務,并希望能夠構建出穩定的、可靠的、可伸縮的、容錯的、高性能的微服務。
不過,書中所提及的相關原則不僅限于以上讀者。大部分原則都可以被用于改進任何大小和任意架構的服務和應用。工程師、工程經理、產品經理和公司的高管都會從本書中獲益,他們可以借此為他們的應用制訂標準,從架構決策中理解組織結構的變更,或者把它們作為推動組織架構演變和運營的指南。
我假設讀者對微服務的基本概念、微服務架構和現代分布式系統基礎都有所了解,對于已經掌握了這些概念的讀者來說,他們可以從書中獲得更大的價值。對于還不熟悉這些概念的讀者,我在本書的第 1章專門對微服務架構、微服務生態系統、微服務給組織帶來的挑戰,以及將單體應用拆分成微服務的本質進行了描述。
如何定位這本書
這本書不是關于如何做的指南手冊:它并沒有為每一章所涉及的內容提供任何教程。如果要把它們寫成教程,可以寫出很多卷,因為每一章的內容都可以寫成一本書。
所以,這是一本高度抽象的書,它具有很強的通用性,書中的內容幾乎可以被應用于任何一家公司的任意一個微服務上。不過它也足夠細致,工程組織可以把它作為切實可行的指南,用于改進和標準化微服務。每個公司的微服務生態系統都各不相同,遵循命令式或填鴨式的步驟指南沒有任何意義。所以,我強調的是概念,解釋了它們在構建生產就緒微服務方面起到的重要作用,并為每個概念提供示例和實現策略。
當然,這本書不是一本關于如何構建微服務和微服務生態系統的百科全書。首先,我得承認,構建微服務和微服務生