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